计算机网络笔记(三十三)——5.5TCP报文段的首部格式

TCP报文段的首部格式是保证可靠传输和连接管理的关键。

TCP报文段首部格式图示

在这里插入图片描述

各字段详细说明

  1. 源端口(16位)

    • 发起TCP连接的应用程序端口号(范围:1-65535)
    • 示例:HTTP客户端通常使用随机临时端口(如49152-65535)
  2. 目的端口(16位)

    • 目标应用程序的端口号
    • 示例:HTTP服务默认端口80,HTTPS默认443
  3. 序列号(32位)

    • 作用:标识发送的数据字节流中第一个字节的编号
    • 特性:初始值ISN在握手时随机生成(防止伪造)
    • 示例:若SYN段的序列号为x,后续数据第一个字节为x+1
  4. 确认号(32位)

    • 作用:期望收到的下一个报文段的第一个字节序号
    • 仅在ACK标志置1时有效
    • 规则:确认号=已成功接收的最后字节序号+1
  5. 数据偏移(4位)

    • 作用:指示TCP首部长度(以4字节为单位)
    • 公式:首部长度 = 数据偏移值 × 4字节
    • 示例:若值为5,则首部长度=5×4=20字节(无选项)
  6. 保留位(6位)

    • 保留供未来使用,目前必须置0
  7. 控制位(6位)

    • URG:紧急指针有效(需配合紧急指针字段)
    • ACK:确认号有效(建立连接后所有报文必须置1)
    • PSH:接收方应立即将数据提交给应用层
    • RST:强制断开异常连接(如收到不存在的端口请求)
    • SYN:同步序列号(用于建立连接)
    • FIN:结束连接(用于正常关闭)
  8. 窗口大小(16位)

    • 作用:流量控制,标识接收方当前可接收的字节数
    • 示例:窗口值=500表示发送方最多发送500字节而不必等待确认
  9. 校验和(16位)

    • 范围:覆盖TCP首部、数据和伪首部(含源/目的IP地址)
    • 伪首部结构:仅用于计算校验和,不计入实际传输
    ┌───────────┬───────────┬───────────┬───────────┐
    │ 源IP地址 (32位)           │ 目的IP地址 (32位)          │
    ├───────────┼───────────┼───────────┼───────────┤
    │ 协议字段 (8位) │ 零填充 (8位) │ TCP长度 (16位)            │
    └───────────┴───────────┴───────────┴───────────┘
    
  10. 紧急指针(16位)

    • 当URG=1时生效,指示紧急数据结束位置(与序列号的偏移量)
  11. 选项字段

    • MSS(最大报文长度):协商双方可接受的最大数据长度
      • 格式:0x01(类型) 0x04(长度) 0xXX 0xXX(具体值)
      • 示例:MSS=1460(以太网MTU=1500时的典型值)
    • 时间戳:计算RTT和防止序列号回绕
    • 窗口缩放:扩展窗口大小(通过左移位数)

完整TCP首部示例

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         源端口 (16)         |          目的端口 (16)           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       序列号 (32)                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       确认号 (32)                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据偏移 |保留位|U|A|P|R|S|F|            窗口大小 (16)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          校验和 (16)        |         紧急指针 (16)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    选项(可变长度,最大40字节)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

关键应用场景

  1. 连接建立(SYN控制位)

    • 三次握手中SYN和ACK的组合:

      客户端 → SYN=1, seq=x
      服务端 → SYN=1, seq=y, ack=x+1
      客户端 → seq=x+1, ack=y+1
      
  2. 流量控制(窗口字段)

    • 动态调整发送速率避免接收方缓冲区溢出
  3. 快速重传(序列号与确认号)

    • 连续收到3个重复ACK时触发快速重传
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao--xin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值