TCP在IP数据报中的封装
IP头部
TCP头部
可看到,IP数据报即 = P头部协议 + TCP报文段,这也称为TCP在IP数据报中的封装。有趣的是,TCP报文段中的数据部分并不是必须的,当一个连接被建立和终止时,交换的报文段只包含了TCP头部而没有数据,一个不带任何数据的头部会被用于确认接收到的数据,也称为一个纯ACK。
接下来重点看TCP头部。
TCP头部的标准长度是20字节,除非出现选项,常见选型包括最大段大小、时间戳、窗口缩放和选择性ACK。
源和目的端口号与IP头部中的源和目的IP地址一起唯一标识了每个连接,这个IP地址和端口的组合也被称为端点或套接字,即每个TCP连接由一对套接字或端点(客户机IP地址、客户机端口号、服务器IP地址、服务器端口号)唯一标识。
序列号字段标识了TCP发送端到TCP接收端的数据流的一个字节,可认为是一个编号。
确认号字段包含的值是该确认号的发送方期待接收的下一个序列号,即最后被成功接收的数据字节的序列号+1,这个字段只有在ACK位字段被启用的情况下才有效。
头部长度字段以32位字为单位给出头部的大小(必须项,因为选项字段可变),最多只能带60字节的头部。
CWR——拥塞窗口减
ECE——ECN回显
URG——紧急
ACK——确认
PSH——推送
RST——重置连接
SYN——用于初始化一个连接的同步序列号
FIN——该报文段的发送方已经结束向对方发送数据
窗口大小是字节数,由ACK号制定,16位的字段限制了窗口大小到65535字节,从而限制了TCP的吞吐量性能,窗口缩放选项允许对这个值进行缩放。
TCP校验和字段是强制的,由发送方进行计算和保存,然后由接收方验证,算法和IP、ICMP、UDP的校验和一样。
紧急指针字段只有在URG位字段被设置时才有效。