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

时间:2012-08-03 15:01:13

标签: size ip packet icmp payload

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

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

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

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

3 个答案:

答案 0 :(得分:5)

问题是你从RFC 792, Page 4引用了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      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RFC 1812, Section 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层的所有信息。

答案 1 :(得分:1)

如您所述,ICMP有效负载是IP报头加上原始数据包有效负载的8个八位字节。但是,IP头并不总是20个八位字节; 20只是最小的。 IP报头本身可以包含选项,报头长度由报头的IHL字段中的值指示。请参阅RFC 791的第3.1节。因此,看起来TCP数据包的IP标头中有12个额外的八位字节选项。 RFC 791定义了一些标准选项,例如源路由和时间戳。您必须解码标头以确定正在使用的选项。

答案 2 :(得分:1)

我想补充以备将来参考,不仅ICMP有效载荷的大小不同,如迈克所说,在 MPLS的ICMP扩展的情况下,它们也可能长于 128字节 即可。有关详细信息,请参阅this draft