5.9 TCP报文段的首部格式
文中图片均来自于
https://www.bilibili.com/video/BV1c4411d7jb?p=65&vd_source=61258a05469482a4381c086011c25c18
-
源端口:16比特(2字节),写入源端口号,用来标识 发送该TCP报文段的应用进程
-
目的端口:16比特(2字节),写入目的端口号,用来标识 接收该TCP报文段的应用进程
-
序号:32比特(4字节),取值范围[0,232-1],指出本TCP报文段数据载荷的第一个字节的序号
- TCP报文段由首部和数据载荷组成,数据载荷中每个字节的数据都有序号
- 序号增大到最后一个后,下一个序号又回到0
-
确认号:32比特(4字节),取值范围[0,232-1],指出 期望收到对方下一个TCP报文段的数据载荷部分的第一个字节的序号,同时也是对之前收到的所有数据的确认。
- 确认号增大到最后一个后,下一个确认号又回到0
- 确认标志ACK取值为1时,确认号字段有效;取值为0,确认号字段无效
-
数据偏移:4比特,该值的单位是4字节。用来指出TCP报文段的首部长度
- 首部固定长度20字节 所以数据偏移字段的最小值为(0101)
- 首部最长长度60字节 所以数据偏移字段的最大值为(1111)
- 例如 数据偏移的二进制(0101)转为十进制为5 则 5*4 Byte = 20字节 通过数据偏移的值 可以算出 TCP报文段的首部长度
- 当数据偏移的二进制(1111)转为十进制为15 则 15*4 Byte = 60字节
-
窗口:16比特,该值的单位为 字节。指出发送本报文段的一方的接收窗口
-
校验和:16比特(2字节),用来检查TCP报文段在传输过程中是否出现了误码
-
ACK:确认标志位
- 在连接建立后,所有传送的TCP报文段都必须把ACK置1
- 取值为1时,确认号字段有效,取值为0时确认号字段无效
-
SYN:同步标志位,在TCP连接建立时用来同步序号,表示这是一个连接请求或连接接受报文
- FIN:终止标志位,用来释放TCP连接
- RST:复位标志位,用来复位TCP连接
- RST=1,表明TCP连接出现异常,必须释放连接,然后再重新建立连接
- RST=1,用来拒绝一个非法的报文段或拒绝打开一个TCP连接
- PSH:推送标志位,用来实现推送操作
- 接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付。
- URG:紧急标志位,用来实现紧急操作
- 取值为1时,紧急指针字段有效;取值为0时,紧急指针字段无效
- 紧急指针:16比特,该值的单位为字节,用来指明紧急数据的长度
- 当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后又是普通数据。
- 选项:增加选项可以增加TCP的功能
- 填充:由于选项的长度可变,使用填充来确保报文段首部能被4整除