You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wireshark中TCP接收端校验和头部值的疑问及原理解析

TCP校验和常见疑问解答

接收端校验和头部的处理规则

接收端不需要填写TCP校验和字段——这个字段由发送端计算完成后填入TCP头部,接收端仅需执行验证操作:用收到的数据包(含伪头部)重新计算校验和,再与头部中的校验和值相加,若结果为全1(0xFFFF)则判定数据包无损坏。

为什么实际看到的校验和不是0xFFFF?

你提到的计算逻辑有两个关键遗漏点,这也是实际值不为全1的核心原因:

  • 分组单位错误:TCP校验和是按16位(2字节)为一组拆分数据求和,而非1字节分组。
  • 伪头部的强制参与:TCP校验和计算必须包含一个「伪头部」,该伪头部不属于TCP报文本身,仅用于校验IP层传输的正确性,包含以下内容:
    • 源IP地址(4字节)
    • 目的IP地址(4字节)
    • 保留位(1字节,值为0)
    • 协议号(1字节,TCP对应值为6)
    • TCP报文总长度(2字节)

完整的计算流程:

  1. 将TCP头部+数据按16位拆分,若总长度为奇数,则在末尾补1字节0凑整;
  2. 把伪头部同样按16位拆分;
  3. 将所有16位分组累加,若累加过程中产生进位(和超过16位),则把进位值加到低16位上;
  4. 对最终的累加和取反,得到的结果就是TCP校验和。

由于伪头部的存在,整个累加和几乎不可能是全0(取反后为0xFFFF),所以实际抓包看到的校验和都是类似0x34EF这样的随机值。

内容的提问来源于stack exchange,提问作者why

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:39:27