精华内容
下载资源
问答
  • *这篇总结一下TCP协议的内容和特点。。→_→*

    *这篇总结一下TCP协议的内容和特点。。→_→*

    1. TCP协议的特点

      • TCP是面向连接的运输层协议:先建立连接,再传输数据,最后释放连接

      • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点

      • TCP提供可靠交付的服务:通过TCP传输的数据,无差错、不丢失、不重复、按序到达

      • TCP提供全双工服务TCP连接双方都设有发送缓存、接收缓存用来临时存放双向通信的数据。TCP在合适的时候将数据发送或应用程序在合适的时候读取数据

      • 面向字节流:流入到进程或从进程流出的字节序列,TCP把应用程序交下来的数据看成一连串的无结构的字节流
    2. TCP的连接

      • TCP的连接的端点叫做套接字(socket)端口号拼接到IP地址即构成了套接字

      • 套接字 socket = (IP地址:端口号)

      • 同一个IP地址可以有多个不同的TCP连接,同一个端口号也可以出现在多个不同的TCP连接中

    3. TCP报文段首部格式

      • TCP报文段首部格式

      • 源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号

      • 序号:占4字节,序号范围[0,(2^32) - 1]。序号增加到 (2^32) - 1后,下一个序号就又回到0。在TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。序号字段值指本报文段所发送的数据的第一个字节的序号

      • 确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号若确认号为N,则说明序号N-1为止的所有数据都以正确收到

      • 数据偏移:占4位,指出TCP报文段的数据起始处距离TCP报文段的起始处的距离,即TCP报文段的首部长度。其单位为4字节,所以数据偏移的最大值为60字节,即TCP首部最大长度(选项长度不能超过40字节

      • 保留:占6位,保留今后使用,目前应置为0

      • 紧急URG(URGent):仅当URG=1时紧急字段有效,表明紧急指针字段有效。告诉系统此报文段有紧急数据,应尽快传送,而不要按照原来的排列顺序来传送。发送方TCP把把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的仍为普通数据,此时与紧急指针字段(Urgent Pointer)配合使用

      • 确认ACK(ACKnowledgment):仅当ACK=1时确认号字段有效,在连接建立后所有传送的报文段都必须把ACK置1

      • 推送PSH(PuSH):仅当PSH=1时推送字段有效,发送方将PSH置1,并立即创建一个报文段发送出去,接收方收到PSH=1的报文段,就尽快交付接收应用程序,而不在等到整个缓存都填满后再向上交付,当接收方的接收窗口为零时,也可以发送

      • 复位RST(ReSeT):仅当RST=1时复位字段有效,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。还用来拒绝非法的报文段或拒绝打开一个连接

      • 同步SYN(SYNchronization):仅当SYN=1时同步字段有效,在连接建立时用来同步序号。当SYN=1且ACK=0时,表明这是一个连接请求报文段。当SYN=1且ACK=1时,表明这一个对方同意建立连接的响应报文段。

      • 终止FIN(FINis):仅当FIN=1时终止字段有效,用来释放一个连接,当FIN=1时表明此报文段的发送方的数据已发送完毕,并要求释放连接

      • 窗口:占2字节,窗口值[0,2^(16) - 1]。指发送本报文段的一方的接收窗口大小,告诉对方现在允许对方发送的数据量,即窗口值作为接收方让发送方设置其发送窗口的依据。TCP规定即使为零窗口,也要接收零窗口探测报文、确认报文段和携带紧急数据的报文段

      • 检验和:占2字节,检验范围包括首部和数据。计算检验和时,在TCP报文段的前面加上12字节的伪首部。接收方收到此报文段后,仍要加上伪首部计算检验和

      • 紧急指针:占2字节,紧急指针仅在URG=1时才有意义,指出本报文段中的紧急数据的字节数,即紧急数据的末尾在报文段中的位置。当紧急数据处理完后,TCP就告诉应用程序恢复到正常操作。窗口值为零时也可发送紧急数据

      • 选项:长度可变,最长可达40字节

    展开全文
  • dubbo协议报文格式

    千次阅读 2017-09-19 10:15:04
    TCP是传输协议,在应用层,往往会拓展自定义的协议,一是可以处理TCP本身的粘包拆包问题,二是约定通讯过程的其他细节。  所以dubbo默认采用自定义的dubbo协议。文档描述: Dubbo缺省协议采用单一长连接和NIO...

           dubbo默认采用netty进行TCP通讯。TCP是传输层协议,在应用层,往往会拓展自定义的协议,一是可以处理TCP本身的粘包拆包问题,二是约定通讯过程的其他细节。

           所以dubbo默认采用自定义的dubbo协议。文档描述:

    Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

    缺省协议,使用基于netty3.2.5+hessian3.2.1交互。
        连接个数:单连接
        连接方式:长连接
        传输协议:TCP
        传输方式:NIO异步传输
        序列化:Hessian二进制序列化
        适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
        适用场景:常规远程服务方法调用

           dubbo协议中对字节流的处理在com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec类中,包含了对request请求的编码和解码,response响应的编码和解码。

           dubbo协议采用固定长度的消息头(16字节)和不定长度的消息体来进行数据传输,消息头定义了一些通讯框架netty在IO线程处理时需要的信息。具体dubbo协议的报文格式如下:


    dubbo协议报文消息头详解:

    magic:类似java字节码文件里的魔数,用来判断是不是dubbo协议的数据包。魔数是常量0xdabb

    flag:标志位, 一共8个地址位。低四位用来表示消息体数据用的序列化工具的类型(默认hessian),高四位中,第一位为1表示是request请求,第二位为1表示双向传输(即有返回response),第三位为1表示是心跳ping事件。

    status:状态位, 设置请求响应状态,dubbo定义了一些响应的类型。具体类型见com.alibaba.dubbo.remoting.exchange.Response

    invoke id:消息id, long 类型。每一个请求的唯一识别id(由于采用异步通讯的方式,用来把请求request和返回的response对应上)

    body length:消息体 body 长度, int 类型,即记录Body Content有多少个字节。

           最后给大家推荐一个有意思的网站,http://asciiflow.com/。用来做纯文本的画图。文中的图片就是在这个网站上画出来的。

           文中如有问题请指正。

    展开全文
  • 数据传输完成后未成功跳出 原因:while (true) {switch (stage) {case 0:break;}不能跳出循环,需要在switch语句外添加break。 在实现一个 C/S 结构的文件传输应用时,报错如下:debug assertion failed expre...

    // GBN_client.cpp : 定义控制台应用程序的入口点。
    #include <stdio.h>
    #include <stdlib.h>
    #include <WinSock2.h>
    #include <time.h>
    #include <fstream>
    
    #pragma comment(lib,"ws2_32.lib")
    
    #define SERVER_PORT 12340 //接收数据的端口号
    #define SERVER_IP  "127.0.0.1" // 服务器的 IP 地址
    
    const int BUFFER_LENGTH = 1026;
    const int SEQ_SIZE = 20;     //接收端序列号个数,为 1~20
    const int SE
    展开全文
  • 可靠数据传输协议-GBN 协议的设计与实现 首先最重要的代码:github地址 一、 实验目的 理解滑动窗口协议的基本原理;掌握 GBN 的工作原理;掌握基于 UDP 设计并实现一个 GBN 协议的过程与技术。 二、 实验内容 实现...

    可靠数据传输协议-GBN 协议的设计与实现

    首先最重要的代码:github地址

    一、 实验目的

    理解滑动窗口协议的基本原理;掌握 GBN 的工作原理;掌握基于 UDP 设计并实现一个 GBN 协议的过程与技术。

    二、 实验内容

    实现了GBN协议,模拟丢包,并支持双向传输,并改进为了SR协议

    1. 基于UDP设计一个简单的GBN协议,实现单向可靠数据传输(服务器到客户的数据传输)。
    2. 模拟引入数据包的丢失,验证所设计协议的有效性。
    3. 改进所设计的 GBN 协议,支持双向数据传输;(选作内容,加分 项目,可以当堂完成或课下完成)
      4)将所设计的 GBN 协议改进为 SR 协议。( 选作内容,加分项目, 可以当堂完成或课下完成)

    三、实验过程及结果

    1. 流程:首先client端将需要发送的文件解析成byte数组,调用send发送server端使用receive接收,当数据传输结束后server端利用在之前receive获取的port和address使用重载的send方法返回数据,client直接调用receive即可。
      其中定时器采用多线程,没发送一个都启用一个定时间线程,并将发送的socket,packet,序列号等传入,启动线程即使其sleep,当超多时间后判断是否接收到ack,没有则重传并再次启动定时器。
      对ack的接收也使用多线程处理,使其发送的同时可以接收。
      需要注意的是由于多个线程都用到了ackMap(记录接收ack状况的map)所以需要使用线程安全的ConcurrentHashMap
    2. 数据分组格式
      Length	Seq	Data	End
      Length:数据长度,2字节,<=1024;
      Seq:序列号,1字节,0 ~ 255;
      Data:数据,最大1024自己;
      End:结尾标志,1字节,0表示结尾,1表示非结尾
    3. 确认分组格式
      Seq	End
      Seq:序列号,1字节,0 ~ 255;
      End:结尾标志,1字节,0表示结尾,1表示非结尾
    4. 协议两端程序流程图
      在这里插入图片描述
    5. 协议典型交互过程
      发送方的事件与动作:
      • 从上层收到数据。当从上层接收到数据后,SR 发送方检查下一个可用于该分组的序号。如果序号位于发送方的窗口内,则将数据打包并发送;否则就像在 GBN 中一样,要么将数据缓存,要么将其返回给上层以便以后传输。
      • 超时。定时器再次被用来防止丢失分组。然而,现在每个分组必须拥有其自己的逻辑定时器,因为超时发生后只能发送一个分组。
      • 收到ACK。如果收到 ACK,倘若该分组序号在窗口内,则 SR 发送方将那个被确认的分组标记为已接收。若该分组的序号等于 send_base,则窗口基序号向前移动到具有最小序号的未确认分组处。如果窗口移动了并且有序号落在窗口内的未发送分组,则发送这些分组。
      接收方的事件与动作:
      • 序号在 [rcv_base, rcv_base+N-1] 内的分组被正确接收。在此情况下,收到的分组落在接收方的窗口内,一个选择 ACK 被回送给发送方。如果该分组以前没收到过,则缓存该分组。如果该分组的序号等于接收端的基序号(rcv_base),则该分组以及以前缓存的序号连续的(起始于 rcv_base 的)分组交付给上层。然后,接收窗口按向前移动分组的编号向上交付这些分组。
      • 序号在 [rcv_base-N, rcv_base-1] 内的分组被正确收到。在此情况下,必须产生一个 ACK,即使该分组是接收方以前确认过的分组。
      • 其他情况。忽略该分组。
    6. 数据分组丢失验证模拟方法
      设置数据包丢失率和ACK丢失率,使用Math.random生成0到1的随机数,只有当生成的随机数大于丢失率时才发送数据或ACK
      private static double sendLoss = 0.1;
      private static double recvLoss = 0.05;
    7. 程序实现的主要类(或函数)及其主要作用
      1)Server:服务器端,首先接收客户端发送的数据,之后发送数据给客户端
      2)Client:客户端,首先发送数据给服务器端,然后接收服务器返回的数据
      3)RecvAck:接收ack,继承自thread,参数为ackMap,datagramSocket。使用新的线程接收ack,注意要设置阻塞时间,否则接收完成后会阻塞住,ackMap的size为0并且收到ack的end为0时代表接收完成。注意当倒数几个有重发时,虽然接到了end是0但不是终止,所以要两个条件一起判断。
      4)TimeOut:定时器类,继承自thread,参数有datagramSocket,datagramPacket,sequence。每发送一个数据则启动一个定时器,睡眠100ms,之后判断是否接受到ack,没接受到则重传,并重新启动定时器
      5)PublicMethod:一些公共的方法,因为实现了双向数据传输,客户端与服务器端逻辑基本相同,都放在了公共方法里,其也是程序的重点,重要代码处理逻辑都在其中。
      a)ByteArrayOutputStream getByteArray(File file) :将要传输的文件转化成ByteArrayOutputStream方便以后传输时转化成数组处理
      通过FileInputStream读入文件并将其写入ByteArrayOutputStream
      b)void send(DatagramSocket socket, byte[] sendBytes, InetAddress address, int targetPort):client端发送函数,参数为UDP的socket,要传输的数据,目的地址,目的端口号。
      使用ackMap记录已经发送的分租收到ack的情况,创建RecvAck对象并start启动接收ack线程,注意必须使用线程安全的ConcurrentHashMap(开始没有发现,经常出现null,debug巨久),当其收到连续的ack时滑动窗口到第一个未收到ack的位置。可以发送的窗口大小为窗口大小减去ackMap的大小,接下来开始发送数据,按上面的数据格式创建报文,并发送,序列号最大为255,注意要循环序列号,之后发送报文并启动定时器线程,将socket和ackMap,packet,sequence传送给定时器并启动。当全部发送且ackMap里面没有数据时终止。
      c) byte[] receive(DatagramSocket socket):接受函数,参数为接受的socket,以byte数组返回接收到的数据。
      使用ByteArrayOutputStream存放接收到的数据,通过datagramSocket的receive接受数据,并获取其中的长度,序列号,是否结束。注意要判断收到序列号所在的位置,由于序列号是循环的,[rcv_base, rcv_base+N-1]和[rcv_base-N, rcv_base-1]的大小可能不同要进行分析。第二种情况发送只ack即可,第一种如果收到和base相同的则滑动接受窗口,不连续则缓存都要发送ack。都不满足则无需处理。当接接收超时时证明接收完成退出循环。(因为发送的ack可能没有到达所以不好用是否接收到全部数据判断,否则对面可能未接到ack而server已关闭不发送ack使对面陷入无限重传)
      d) void send(DatagramSocket socket, byte[] sendBytes):server端的发送函数,参数只有socket和数据,实际为客户端socket的重载,其中目的地址和目的端口号有receive函数中解析出来,由于server端先接受,首先调用receive方法时即可获取targetPort和address。
      处理逻辑与client的send相同
      e) void recvByteMethod(FileOutputStream fileOutputStream, DatagramSocket socket):接受数据函数,使用wile(true)循环使得可以一直处于接受状态,否则必须在server开始后再启动client也可以防止server端回传数据时client已关闭的问题。
    展开全文
  • MQTT协议入门介绍

    2020-02-05 14:45:07
    目录 MQTT概览 ...MQTT V3.1.1协议报文 MQTT消息QoS MQTT会话(Clean Session) MQTT连接保活心跳 MQTT遗愿消息(Last Will) MQTT保留消息(Retained Message) MQTT WebSocket连接 MQTT协议...
  • TCP/IP第四层--传输层TCP数据报文详解

    万次阅读 2019-01-28 19:47:48
    TCP/IP第四层--传输层TCP数据报文详解
  • CAN总线传输协议

    万次阅读 多人点赞 2019-06-29 22:12:57
    一、控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线、同轴电缆或光纤来传输信号,因其高性能、高可靠性和高实时性等特点,已经成为了世界上应用最广泛的...
  • TCP/IP协议簇的传输协议主要有两个,TCP(Transimission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据协议
  • IPV4 报文格式

    万次阅读 多人点赞 2018-07-23 21:45:52
    字段长度为8位,它给出了主机到主机层或传输协议 的“ 地址” 或协议号,协议字指定了数据包中信息的类型。当前已分配了 100 多个不同的协议号。 比较有名的 1:ICMP 4:IP 6:TCP 17:UDP 21:ftp 22:ssh 23...
  • 计算机网络谢希仁第七版 课后答案

    万次阅读 多人点赞 2019-09-03 23:13:25
    谢希仁计算机网络第七版课后答案 第一章 概述 1-01 计算机网络向用户可以提供那些服务?答: 连通性和共享 1-02 简述分组交换的要点。答:(1)报文分组,加首部(2)经路由器储存...(2)报文交换:无须预约传输带...
  • TELNET协议

    千次阅读 2019-06-30 13:01:14
    1、Telnet协议的目的是提供一个相对通用的,双向的,面向八位字节的通信方法,允许界面终端设备和面向终端的过程能通过一个标准过程进行互相交互。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一...
  • 前端面试题(持续更新中)

    万次阅读 多人点赞 2019-11-06 17:16:33
    前端面试题 1.闭包 闭包就是能够读取其他函数内部变量的函数。 闭包的缺点:滥用闭包函数会造成内存泄露,因为闭包中引用到的包裹函数中定义的变量都 永远不会被释放,所以我们应该在必要的...引用数据类型:Objec...
  • 传输协议介绍

    2020-10-29 22:35:03
    在 TCP/IP 协议栈中,传输层有两个协议: TCP(传输控制协议)和 UDP(用户数据协议)。 TCP 协议传输更加稳定可靠,UDP 协议传输效率更高。这两个协议各有特点,在实际应用 中,根据实际应用的需要,选择不同的传输层...
  • 可靠数据传输原理

    2020-09-01 08:54:59
    可靠数据传输协议可靠数据传输协议rdt1.0:可靠信道上的可靠数据传输rdt2.0:产生位错误的信道rdt2.1:产生位错误的信道rdt2.2:产生位错误的信道二级目录二级目录一级目录二级目录三级目录 概念 什么是可靠? 不错...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    typeof运算符返回值中有一个跟javascript数据类型不一致,它是________”function”_________。 68 定义了一个变量,但没有为该变量赋值,如果alert该变量,javascript弹出的对话框中显示___undefined______ 。 68...
  • 什么是Mqtt mqtt是为物联网场景设计的基于tcp的pub/sub协议, ...使命: 九十年代早期为实现 在带宽有限的条件下,让传感器能与IBM的MQ Integrator通信的一个实时数据传输协议 更多:说到实时数据传输,可能你会想
  • 术语“面向连接的”是指使用TCP的两个应用程序必须在它们可交换数据之前,通过相互联系来建立一个TCP连接。最典型的比喻就是拨打一个电话号码,等待另一方接听话并说“喂”,然后再说“找谁?”。这正是一个TCP连接的...
  • MQTT物联网通信协议概论

    千次阅读 2019-07-20 09:44:15
    实时通信协议是物联网技术中的一项根本性技术,在数据的有效传输、及时通信方面不可或缺,在物联网领域发挥着至关重要的作用,因此物联网通信协议的制定至关重要。目前物联网设备广泛使用的有四大实时协议XMPP、REST...
  • 一、网络层安全性 、 二、IPsec 协议族 、 三、IPsec 协议族组成 、 四、IP 安全数据包 工作方式 、 ...七、IP 安全数据格式 、 八、IP 安全数据报 生成流程 、 九、IP 安全数据格式 、 十、IPsec 构件 、
  • 流媒体数据传输RTSP

    千次阅读 2019-05-24 22:10:58
    流媒体数据传输RTSP 一、流媒体 1.1 流媒体基本概念 流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样...
  • 数据传输时候的流程 TLP和DLLP报文格式 PCIe总线的拓扑结构 PCIe采用的是树形拓扑结构, 一般由根组件(Root Complex),交换设备(Switch),终端设备(Endpoint)等类型的PCIe设备组成 Root Complex: 根桥设备,是P
  • Modbus TCP协议解析

    千次阅读 2019-07-07 17:13:54
    在之前的文章中,我们介绍了Modbus RTU协议的内容和...文章目录一、Modbus TCP协议解析Modbus TCP和Modbus RTU的区别Modbus TCP协议的构成Modbus TCP的报文头Modbus TCP的功能码Modbus TCP的数据码二、持续更新:Mo...
  • LoRaWAN协议格式

    千次阅读 2019-05-15 23:08:52
    LoRaWAN瞄准了物联网中的一些核心需求,如安全地双向通讯、移动化和本地服务。该技术无需本地复杂配置,即可以让智能设备实现无缝互操作性,给物联网领域的用户、开发者和企业自由操作权限。 LoRaWAN网络架构是...
  • 传输控制协议(TCP)、IP协议

    千次阅读 2019-06-03 12:07:05
    传输控制协议(TCP) 传输控制协议( Transmission Control Protocol),简称TCP协议,它在...字节流的服务:使用TCP协议进行传输的应用程序之间传输数据可视为无结构的字节流,基于字节流的服务没有字节序问题的困扰...
  • 无线传感器网络复习大纲

    千次阅读 多人点赞 2019-04-30 10:31:40
    第一章 考点: 无线传感器网络组成部分,概念、特点... 自组织网络多跳传输特点(了解) 1、1无线传感器网络介绍 无线传感器概念:无线传感器网络是一种特殊的无线通信网络,它是由许多个传感器节点通过无线...
  • 什么是传输协议

    2020-12-29 11:50:59
    TCP提供全双工服务,即数据可在同一时间双向传输 TCP报文段 TCP将若干个字节构成一个分组,叫报文段(Segment) TCP报文段分装在IP数据报中 IP首部 TCP报文段 TCP报文段 源端口号(16) 目标端口号(16) ...
  • 传输协议封装

    2020-12-17 23:30:17
    TCP报文格式和分析: TCP是一种可靠的、面向连接的字节流服务。源主机在传送数据前需要先和目标主机建立连接。然后,在此连接上,被编号的数据段按序收发。同时,要求对每个数据段进行确认,保证了可靠性。如果在...
  • HTTPS工作原理及报文讲解

    千次阅读 2020-07-27 16:41:05
    HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版,是...
  • FTP协议分析

    万次阅读 多人点赞 2016-04-08 12:06:14
    一、实验名称 FTP协议分析二、实验目标 ... FTP(File Transfer Protocal),是文件传输协议的简称。FTP使得主机间可以共享文件,用于控制Internet上文件的双向传输。它是一个客户机/服务器系统。用户通过
  • 【网络协议从入门到底层原理】学习笔记汇总 网络互联模型: 请求过程: 网络分层: 域名( Domain Name) 由于IP地址不方便记忆,并且不能表达组织的名称和性质,人们设计出了 域名(比如baidu.com) 但实际上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,208
精华内容 5,283
关键字:

双向数据传输协议的报文格式