ICMP类型11数据包有效负载的大小

Ric*_*son 6 ip size payload packet icmp

当类型为11时,ICMP数据包有效负载的大小是多少,即超过时间?由于它包含IP报头和生成ICMP消息的IP数据包有效负载的前8个字节,我认为其大小为20 + 8 = 28.

我正在重播TTL = 1的一些常见用户流量.在我倾倒的ICMP消息中,我注意到:

  • UDP数据包生成的所有ICMP数据包都具有大小为28字节的有效负载
  • TCP数据包生成的所有数据包都有40字节的有效负载

由于我需要通过比较这些字节来匹配ICMP超时消息和触发它们的数据包,因此这条信息是必不可少的,但我无法弄清楚为什么会发生这种情况.

Mik*_*ton 5

问题是你从RFC 792引用了8字节的头部有效载荷,但是RFC 1812改变了要求......

Time Exceeded Message (in RFC 792)

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |     Code      |          Checksum             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             unused                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Internet Header + 64 bits of Original Data Datagram      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Run Code Online (Sandbox Code Playgroud)

RFC 1812,第4.3.2.3节显着增加了ICMP错误消息中的允许有效负载(强调我的):

4.3.2.3原始消息头

从历史上看,每个ICMP错误消息都包含Internet标头和至少触发错误的数据报的前8个数据字节.由于使用IP-in-IP隧道技术和其他技术,这已不再适用. 因此,ICMP数据报应尽可能多地包含原始数据报,而ICMP数据报的长度不得超过576字节.返回的IP头(和用户数据)必须与接收到的相同,除了路由器不需要撤消对IP头的任何修改,这些修改通常在转发之前执行,这些修改是在检测到错误之前执行的(例如,递减TTL或更新选项).

您从Scapy数据包生成的ICMP错误应包含原始数据包的IP和TCP层的所有信息.