测的 。(早期TCP 协议栈,具体的可以参见1981 年出的关于TCP 雏形的RFC793 文档)
TCP 头结构
TCP 协议头最少20 个字节,包括以下的区域(由于翻译不禁相同,文章中给出
相应的英文单词):
TCP 源端口(Source Port):16 位的源端口其中包含初始化通信的端口 。源端口和
源IP 地址的作用是标示报问的返回地址 。
TCP 目的端口(Destination port):16 位的目的端口域定义传输的目的 。这个端口指
明报文接收计算机上的应用程序地址接口 。
TCP 序列号(序列码,Sequence Number):32 位的序列号由接收端计算机使用,重
新分段的报文成最初形式 。当SYN 出现,序列码实际上是初始序列码(ISN),而第一个数
据字节是ISN 1 。这个序列号(序列码)是可以补偿传输中的不一致 。
TCP 应答号(Acknowledgment Number):32 位的序列号由接收端计算机使用,重
组分段的报文成最初形式 。,假如设置了ACK 控制位,这个值表示一个预备接收的包的序
列码 。
数据偏移量(HLEN):4 位包括TCP 头大小,指示何处数据开始 。
保留(Reserved):6 位值域,这些位必须是0 。为了将来定义新的用途所保留 。
标志(Code Bits):6 位标志域 。表示为:紧急标志、有意义的应答标志、推、重置
连接标志、同步序列号标志、完成发送数据标志 。按照顺序排列是:URG、ACK、PSH、
RST、SYN、FIN 。
窗口(Window):16 位,用来表示想收到的每个TCP 数据段的大小 。
校验位(Checksum):16 位TCP 头 。源机器基于数据内容计算一个数值,收信息机
要与源机器数值结果完全一样,从而证实数据的有效性 。
优先指针(紧急,Urgent Pointer):16 位,指向后面是优先数据的字节,在URG
标志设置了时才有效 。假如URG 标志没有被设置,紧急域作为填充 。加快处理标示为紧急
的数据段 。
选项(Option):长度不定,但长度必须以字节 。假如没有选项就表示这个一字节
的域等于0 。
填充:不定长,填充的内容必须为0,它是为了数学目的而存在 。目的是确保空
间的可猜测性 。保证包头的结合和数据的开始处偏移量能够被32 整除,一般额外的零以保
证TCP 头是32 位的整数倍 。
标志控制功能
URG:紧急标志
紧急(The urgent pointer) 标志有效 。紧急标志置位,
ACK:确认标志
确认编号(Acknowledgement Number)栏有效 。大多数情况下该标志位是置位的 。
TCP 报头内的确认编号栏内包含的确认编号(w 1,Figure:1)为下一个预期的序列编号,同
时提示远端系统已经成功接收所有数据 。
PSH:推标志
该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用
处理 。在处理telnet 或rlogin 等交互模式的连接时,该标志总是置位的 。
RST:复位标志
复位标志有效 。用于复位相应的TCP 连接 。
SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效 。该标志仅在三次握手建立
TCP 连接时有效 。它提示TCP 连接的服务端检查序列编号,该序列编号为TCP 连接初始端
(一般是客户端)的初始序列编号 。在这里,可以把TCP 序列编号看作是一个范围从0 到4,
294,967,295 的32 位计数器 。通过TCP 连接交换的数据中每一个字节都经过序列编号 。
在TCP 报头中的序列编号栏包括了TCP 分段中第一个字节的序列编号 。
FIN:结束标志
带有该标志置位的数据包用来结束一个TCP 回话,但对应端口仍处于开放状态,
预备接收后续数据 。
