TCP报文结构

TCP报文结构_第1张图片
image.png
  • 源端口地址和目标端口地址:标识发送方和接收方应用程序端口号
  • 序号:定义了指派给本报文第一个数据字节的编号。
  • 确认号(ack):定义了报文段的接收方期望从对方接收的字节编号。
  • HLEN:Head Length 首部长度。指出首部一共有多少个4字节。首部长度可以在20~60个字节之间,因此这个字段的值可以在5(5 x 4 = 20) ~ 15(15 x 4 = 60)之间
  • 保留:这是一个6位字段,保留为今后使用
  • 控制:这个字段定义了6种不同的控制位或标志,可以同时设置1位或多位标志。这些标志用在TCP的流量控制、连接建立和终止、连接异常终止以及数据传送方式等方面。
  • URG:紧急指针有效
  • ACK:确认是有效的
  • PSH:请求推送
  • RST:连接复位
  • SYN:同步序号
  • FIN:终止连接
  • 窗口尺寸:发送方TCP窗口的大小,以字节为单位。这个字段是16位的,也就是说窗口的最大长度为65535个字节,这个值由接收方来决定,这种情况下发送方必须服从接收方的指示。
  • 检验和:涉及三个部分:一个伪首部(后面会解释)、TCP首部以及从应用层来的数据。UDP是否使用检验和是可选的,而TCP使用检验和是强制性的。
  • 紧急指针:只有当紧急标志置位时(URG = 1),这个16位的字段才有效,此时报文中包含紧急数据
  • 选项:长度可变,最长40个字节。

深入解析:

1 序号和确认号

字节号:TCP把在一个连接中要发送的所有数据字节(八位组)都编上号,这就是字节号。

编号不一定从0开始,TCP选择0~(2^32 -1)之间的一个随机数作为第一个字节的编号。例如,若这个数是1057,而要发送的数据总共有6000个字节,那么这些字节的编号就是从1057~7056。

序号:每个报文段的序号,就是这个报文段中第一个数据字节的编号。

确认号:接收方期望接收的下一个字节的编号。如果报文段的接收方成功接收了对方发来的编号为n的字节,那么它就返回n+1作为确认号。

2 控制位

控制位包括的URG、ACK、PSH、RST、SYN和FIN,一共6中。

控制位的取值只能为0或1,1表示生效

在后续笔记中,有涉及到ACK和ack,其中ACK取值只为0或1(1表示确认有效),ack表示确认号(接收方期望接收的下一个字节的编号)。

以上内容摘自:

《TCP/IP协议族》第四版

你可能感兴趣的:(TCP报文结构)