当前位置: 首页 > news >正文

TCP报文格式

TCP(Transmission Control Protocol)头部是传输层协议的核心结构,用于建立连接、可靠传输、流量控制和拥塞控制。以下是 TCP 头部 的详细解析,包括各字段的作用和典型值。

1. 源端口(Source Port)

  • 长度:16 比特(2 字节)

  • 作用:标识发送方的应用程序端口号(0~65535)。

  • 示例

    • HTTP 客户端随机端口:49152(动态端口范围)

    • 服务器 SSH 端口:22

2. 目的端口(Destination Port)

  • 长度:16 比特(2 字节)

  • 作用:标识接收方的应用程序端口号。

  • 示例

    • HTTP 服务器端口:80

    • DNS 查询端口:53


3. 序列号(Sequence Number)

  • 长度:32 比特(4 字节)

  • 作用

    • 在 连接建立(SYN) 时,初始序列号(ISN)由系统随机生成(防预测攻击)。

    • 后续数据按字节编号,用于 数据排序和可靠性确认

  • 示例

    • 第一个数据包:ISN = 123456789

    • 发送 100 字节后:123456789 + 100 = 123456889


4. 确认号(Acknowledgment Number)

  • 长度:32 比特(4 字节)

  • 作用

    • 仅在 ACK=1 时有效,表示接收方期望收到的下一个字节序号(即已成功接收 Ack-1 之前的所有数据)。

    • 用于 可靠传输(接收方确认数据,发送方重传丢失数据)。

  • 示例

    • 发送方发送 Seq=1, Len=100,接收方回复 Ack=101(表示期望收到第 101 字节)。


5. 数据偏移(Data Offset / Header Length)

  • 长度:4 比特

  • 作用

    • 表示 TCP 头部长度(以 4 字节 为单位),最小 5(20 字节),最大 15(60 字节,含可选字段)。

    • 用于定位 数据部分 的起始位置。

  • 示例

    • 0101(5 × 4 = 20 字节,标准头部)


6. 保留(Reserved)

  • 长度:6 比特

  • 作用:保留字段,必须设为 0(未来扩展用)。


7. 控制标志(Control Flags)

  • 长度:6 比特(每个标志占 1 比特)

  • 作用:控制 TCP 连接状态和数据传输行为:

标志位名称作用
URG紧急指针表示数据需要优先处理(如 Ctrl+C 中断信号)
ACK确认表示 Acknowledgment Number 有效
PSH推送要求接收方立即提交数据给应用层(如 Telnet 实时交互)
RST重置强制终止异常连接(如端口未监听)
SYN同步发起连接请求(三次握手阶段)
FIN结束正常关闭连接(四次挥手阶段)

示例

  • 三次握手:SYN=1, ACK=0 → SYN=1, ACK=1 → ACK=1

  • 四次挥手:FIN=1, ACK=1 → ACK=1 → FIN=1, ACK=1 → ACK=1


8. 窗口大小(Window Size)

  • 长度:16 比特(2 字节)

  • 作用

    • 接收方告知发送方 当前可接收的数据量(字节数),用于 流量控制

    • 受接收方缓冲区剩余空间限制(可通过 SO_RCVBUF 调整)。

  • 示例

    • Window=8192(表示可接收 8KB 数据)


9. 校验和(Checksum)

  • 长度:16 比特(2 字节)

  • 作用

    • 校验 TCP 头部 + 数据 + 伪头部(IP 部分字段) 的完整性。

    • 计算方法:反码求和(类似 IP 校验和)。

  • 伪头部字段(12 字节,仅用于计算校验和):

    复制

    源 IP(4)| 目的 IP(4)| 保留(1)| 协议(1)| TCP 长度(2)

10. 紧急指针(Urgent Pointer)

  • 长度:16 比特(2 字节)

  • 作用

    • 仅在 URG=1 时有效,表示紧急数据的末尾偏移量(相对于 Sequence Number)。

    • 用于中断或高优先级数据(如 Telnet Ctrl+C)。

  • 示例

    • Seq=100, URG=1, Urgent Pointer=50 → 紧急数据范围:100~149


11. 可选字段(Options)

  • 长度:可变(最多 40 字节)

  • 作用:扩展 TCP 功能,常见选项:

    • MSS(Maximum Segment Size):协商最大报文段长度(如 1460 字节)。

    • SACK(Selective ACK):选择性确认,优化重传。

    • Window Scaling:窗口缩放因子(扩大窗口至 1GB)。

    • Timestamp:时间戳(计算 RTT,防序列号回绕)。

格式

复制

Kind(1)| Length(1)| Data(可变)

示例(MSS 选项):

复制

02(Kind) 04(Length) 05 B4(MSS=1460)

12. 填充(Padding)

  • 作用:确保 TCP 头部长度是 4 字节的倍数(对齐)。

  • 示例:若选项字段占 3 字节,则填充 1 字节 0x00


TCP 头部示例(Wireshark 抓包)

复制

Transmission Control Protocol, Src Port: 54321, Dst Port: 80
    Source Port: 54321
    Destination Port: 80
    Sequence Number: 123456789
    Acknowledgment Number: 987654321
    0101 .... = Header Length: 20 bytes
    Flags: 0x018 (PSH, ACK)
    Window: 8192
    Checksum: 0x7a3d [correct]
    Urgent Pointer: 0
    Options: MSS 1460, SACK Permitted

关键总结

  1. 核心字段

    • 端口号(定位应用)、序列号/确认号(可靠传输)、窗口(流量控制)。

  2. 控制连接

    • SYN/FIN 管理连接,ACK 确认数据,RST 强制终止。

  3. 优化机制

    • 选项字段(MSS、SACK、Window Scaling)提升性能。

  4. 典型长度

    • 标准头部 20 字节,含选项最多 60 字节。

理解 TCP 头部有助于分析网络问题(如丢包、拥塞)和优化传输性能(如调整窗口大小)。

相关文章:

  • SPI协议(20250325)
  • 基于动态光影融合的缺陷实时检测和材质量化方法,并且整合EventPS、VMNer和EvDiG
  • d2025327
  • Linux下EC11旋转编码器驱动调试
  • C++入门五式——类和对象(下)
  • 【TensorRT】TensorRT从安装到推理——Python 环境下 MobileNetV4 三分类任务
  • 【AVRCP】AVRCP核心术语解析
  • LeeCode 383. 赎金信
  • 【Linux】深度解析Linux进程间通信:匿名管道原理、实战进程池与高频问题排查。
  • 05 Python 元组:不可变序列的解析和应用
  • 上位机知识篇---PythonPip安装与配置
  • Enovia许可管理系统的兼容性和集成性
  • PHP回调后门小总结
  • Python 数据可视化实战:多维度销售数据分析与图表绘制
  • 【蓝桥杯】好数
  • 青少年编程与数学 02-012 SQLite 数据库简介 01课题、数据库概要
  • 系统与网络安全------Windows系统安全(1)
  • MybatisPlus(SpringBoot版)学习第五讲:条件构造器和常用接口
  • java代码错误(二)
  • Episode, time step, batch, epoch
  • 做淘宝客网站性质/刷关键词的平台
  • 做折线图网站/自动推广软件免费
  • 网站布局设计步骤/汕头seo计费管理
  • 帮公司制作网页多少钱/百度怎么优化排名
  • 枣庄做网站建设的公司/洛阳搜索引擎优化
  • 网站登记模板/深圳推广不动产可视化查询