华为网络基础 | TCP头部封装

  • 内容
  • 相关

上一篇讲解了RS | 数据包帧字节——图例详解RS | IP报文头部,已经知道了数据通信过程中,封装的大概概念和封装的一般组成中IP报文头部的封装知识。

接下来继续讲解TCP头部封装,先来看看TCP协议定义的具体封装格式如下图:


从图中可以看出,TCP头部长度为20字节,这个头部中包含了下列字段:

(1)16bit源端口(Source Port):这个字段用于指明源设备上应用进程所使用的TCP端口号;

(2)16bit目的端口(Destination Port):这个字段用于指明目的设备上应用进程所使用的TCP端口号;通过源/目端口和源/目IP地址,可以唯一地确定一条TCP连接;

(3)32bit序列号(Sequence Number):一次TCP通信过程中某一个传输方向上的字节流的每个字节的编号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000;

(4)32bit确认号(Acknowledge Number):只有ACK标志为1时,确认号字段才有效。用来响应TCP报文段,给收到的TCP报文段的序号加1,三次握手时还要携带自己的序号。如被确认数据段的序列号为1117,该数据长1000字节,那么接收方确认接收到该数据时,发送的数据段确认好即应为2117,这表示自己已经接收到了对方之前发送的全部1000字节的数据。其实也包含目标端所期望收到源端的下一个数据字节。

(5)4bit头部长度(Header Length):有些又称为DataOffset(数据偏移),标识该TCP头部有多少个4字节,共表示最长15*4=60字节。同IP头部。

(6)6bit保留:未使用,留后

(7)6bit控制字段:当值为1时,分别表示

        URG(紧急指针是否有效),为1表示这个数据段中包含紧急数据,此时接收方会参考16bit的紧急指针字段

        ACK(表示确认号是否有效)

        PSH(提示接收端应用程序应该立即从TCP接收缓冲区读走数据)

        RST(表示要求对方重新建立连接)

        SYN(表示请求建立一个连接)

        FIN(表示通知对方本端要关闭连接)

(8)16bit窗口大小(Window):TCP流量控制的一个手段,用来告诉对端TCP缓冲区还能容纳多少字节。TCP协议是通过滑动窗口这个字段来实现流量控制的。

(9)16bit校验和(Checksum):这个字段的作用是校验整个TCP数据段,包括TCP头部和TCP数据部分。发送方在封装时会计算出校验和,并把计算结果写入该字段中。接收方在解封装之后则会再次计算校验和,把自己的计算结果与这个字段进行对比。若一致则通过验证,然而把数据转交给应用进程;若不一致则直接丢弃。

(10)16bit紧急指针(Urgent Pointer):用来标识哪部分数据是紧急数据。当URG位为1时这个字段有效,此时,从序列号开始到序列号+紧急指针之间的这段数据为紧急数据,需要立即处理。而从序列号+紧急指针后的数据开始则为正常数据。

上述字段的长度一共为20字节,也就是TCP头部长度最小为20字节。在这个20字节头部后面还有一个长度可变的“选项”字段,该字段最长为40字节。

(11)32bit的可选项字段(Option):可能包括"窗口扩大因子"、"时间戳"等选项。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求。

因此,TCP头部中用于标明“头部长度”的字段可标记的最大长度也就是60字节,即为固定头部20字节加上选项长度40字节的结果。

 您阅读这篇文章共花了:

上一篇:华为网络基础 | IP报文头部

下一篇:华为网络基础 | UDP头部封装

本文标签:    

版权声明:本文依据CC-BY-NC-SA 3.0协议发布,若无特殊注明,本文皆为《fishyoung》原创,转载请保留文章出处。

本文链接:华为网络基础 | TCP头部封装 - http://www.fishyoung.com/post-134.html