首页 理论教育TCP报文格式-计算机网络技术使用规范

TCP报文格式-计算机网络技术使用规范

【摘要】:TCP 报文共分为两部分:TCP 首部和TCP 数据,如图8.3所示。图8.3TCP 报文格式TCP 首部各字段的含义如下:源端口和目的端口这两个字段分别表示源端口和目的端口。因为TCP 是面向字节流的协议,所以报文段中的每个字节都有编号。URG:URG 标志位为“1”时,表示TCP 报文的数据段中包含紧急数据,紧急数据在TCP 报文数据段的位置由紧急指针字段给出。MSS 告诉对方TCP“我的缓存所能接收的报文段其数据字段的最大长度是MSS 个字节”。

TCP 报文共分为两部分:TCP 首部和TCP 数据,如图8.3所示。TCP 首部的前20 个字节是固定的,后面有4 ×N 个字节的选项(N 为整数),因此,TCP 首部的最小长度是20 个字节。

图8.3 TCP 报文格式

TCP 首部各字段的含义如下:

(1)源端口和目的端口

这两个字段分别表示源端口和目的端口。将TCP 报文中源和目的端口字段加上IP 报文中源和目的IP 地址字段,便构成了唯一标识一个TCP 连接的四元组(源端口、源IP 地址、目的端口、目的IP 地址)。

(2)发送序号、确认序号和通告窗口字段

这三个字段都在TCP 滑动窗口机制中用到。因为TCP 是面向字节流的协议,所以报文段中的每个字节都有编号。发送序号字段给出了该TCP 报文段中携带的数据第一个字节分配的编号(SYN 标志位为“0”)。如果在TCP 报文中SYN 标志位为“1”,则序号字段表示初始序号。确认序号给出了接收方希望接收的下一个TCP 报文段中数据流的第一个字节的编号。确认字段只有在ACK 标志位为“1”时有效,而一旦TCP 连接建立好,则这个确认序号字段一直有效。通告窗口字段给出了接收方返回给发送方关于接收缓存大小的情况。

(3)首部长度字段

该字段给出TCP 报文段首部的长度,即TCP 报文段的数据起始处距离TCP 报文段起始处有多远。此字段也称为数据偏移,占四个二进制位,表示十进制数的范围为0 ~15。由于数据偏移的单位为32 位字(即以4 字节长的字为计算单位),因此,数据偏移的最大值为60 个字节,这也是TCP 首部的最大长度。

(4)6 位标志位字段

这些标志位字段用于区分不同类型的TCP 报文。目前用到的标志位有SYN、ACK、FIN、RST、PSH 和URG。(www.chuimin.cn)

SYN:这个标志位用于TCP 连接的建立。SYN 与ACK 配合使用,当请求连接时,SYN=1,ACK=0;当响应连接时,SYN=1,ACK=1。

ACK:ACK 标志位为“1”时,意味着确认序号字段有效。

FIN:发送带有FIN 标志位的TCP 报文后,TCP 连接将被断开。

RST:这个标志位表示连接复位请求,用来复位那些产生错误的连接。

PSH:这个标志位表示push 操作。当TCP 报文到达接收端以后,若此报文的PSH 为“1”,则会将数据尽快交付给接收端的应用进程,而不再等到整个缓存都填满后再向上交付。

URG:URG 标志位为“1”时,表示TCP 报文的数据段中包含紧急数据,紧急数据在TCP 报文数据段的位置由紧急指针字段给出。

(5)校验和字段

此字段与UDP 中的校验和字段用法完全相同,它通过计算TCP 首部、TCP 数据以及伪首部(来自IP 报头的源地址、目的地址、协议和TCP 长度字段构成)得出结果。

(6)选项

此字段长度可变。TCP 最常用的选项字段为最大分段长度(Maximum Segment Size,MSS),即最大的数据分段长度。MSS 告诉对方TCP“我的缓存所能接收的报文段其数据字段的最大长度是MSS 个字节”。每个TCP 连接的发起方在第一个报文中会指明这个选项的内容,其值通常是发送方主机所连接的物理网络最大传输单元(MTU)减去TCP 首部长度和IP首部长度,这样可避免发送主机对IP 报文进行分段。