TCP报文段结构
TCP报文段由首部字段和一个数据字段组成。数据字段包含一块应用数据。MSS限制了报文段数据字段的最大长度。当TCP发送一个大文件时,TCP通常是将该文件划分成长度为MSS的若干块(最后一块除外,它通常小于MSS)。然而,交互式应用通常传送长度小于MSS的数据块。TCP的首部一般是20字节。
TCP报文段图示
源端口和目的端口
首部包括源端口号和目的端口号,它被用于多路复用/分解来自或送到上层应用的数据。
检验和字段
同UDP一样,TCP首部也包括校验和字段(checksum field)
序号字段和确认序列号字段
32比特的序号字段(sequence number field)和32比特的确认序号字段(acknowledgment number field)。这些字段被TCP发送方和接收方用来实现可靠数据传输服务。
接收窗口字段(receive window field)
16比特的接收窗口字段,该字段用于流量控制,表示接收方愿意接收的字节数量
首部长度字段(header length field)
4比特的首部长度字段,该字段指示了以32比特的字为单位的TCP首部长度。由于TCP选项字段的原因,TCP首部的长度是可以变的,通常选项字段为空,所以TCP首部的典型长度是20字节。
可选与变长的选项字段(options field)
该字段用于发送方与接收方协商最大报文段长度(MSS)时,或在高速网络环境下用作窗口调节因子时使用。首部字段中还定义了一个时间戳选项。
标志字段(flag field)
6比特的标志字段,ACK比特用于指示确认字段中的值是有效的,即该报文段包含一个对已被成功接收报文段的确认。RST、SYN和FIN比特用于连接建立和拆除,在明确拥塞通告中使用了CWR和ECE比特。当PSH比特被置位时,就指示接收方应立即将数据交给上传。URG比特用来指示报文段里存放着被发送到的上层实体置为紧急的数据。紧急数据的最后一个字节由16比特的紧急数据指针字段(urgent data pointer field)指出。当紧急数据存在并给出指向紧急数据尾指针的时候,TCP必须通知接收端的上层实体