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

ICMP应答报文第22字节的含义是什么?删除packet[22] += 8为何无法收回复

问题1:ICMP回复报文中第22个字节的含义

首先统一计数规则:以下描述均采用代码中字节数组的下标规则,从0开始计数,你提到的第22个字节对应packet[22]。
我们拿到的是TUN设备输出的IP层原始报文,IP首部默认长度为20字节,因此下标20及之后的内容属于ICMP报文:

  • 下标20:ICMP类型字段,Echo请求的固定值为8,Echo回复的固定值为0
  • 下标21:ICMP代码字段,Echo类报文的固定值为0
  • 下标22、23:ICMP校验和字段,覆盖整个ICMP报文内容,用于接收方校验报文是否在传输中损坏,下标22就是ICMP校验和的高8位。

问题2:删除packet[22] += 8后收不到回复的原因

这段代码是ICMP Echo请求的极简回包逻辑,为了效率没有重新计算整个ICMP报文的校验和,而是直接做了快速调整:
ICMP校验和采用反码求和算法,代码中把ICMP类型字段从8(请求)修改为0(回复),相当于整个ICMP报文的求和结果减少了8,直接给校验和加8就可以抵消这个修改带来的差异,得到合法的回复校验和。
如果删除这一行,ICMP回复的校验和还是原来请求报文的校验和,和当前回复报文的内容不匹配,接收方操作系统在校验ICMP报文时会判定为非法报文直接丢弃,上层应用自然就收不到对应的回复了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:05