在traceroute源代码中为什么大小被硬编码为512:u_char packet [512];

时间:2016-06-17 06:33:28

标签: linux icmp traceroute

traceroute修改源代码时,我看到ICMP入站数据包大小被硬编码为512.

我不知道为什么大小限制为512字节。如果ICMP入站数据包大小超过512字节会发生什么?

1 个答案:

答案 0 :(得分:0)

一般来说,有3种方法(我不熟悉使用GRE协议实现)实现traceroute,发送ICMP Echo请求,UDP数据包或TCP SYN包,TTL值逐渐增加,从TTL值1开始。 / p>

  • 如果它发送ICMP echo请求,它需要ICMP TIME Exceed消息(8个字节+ IP头(20个字节)+前8个字节的原始数据报的数据)或到达目的地并返回ICMP echo reply 20 + 8个字节长。虽然根据rfc 792,它允许回应请求或回复的任意数据长度,但traceroute不需要那样。
  • 如果它发送UDP pakcets,则它需要ICMP TIME Exceed消息或到达目的地并返回一个20 + 8 + 20字节长的端口不可达消息。也许某些实现会添加一些数据,但不会太多。
  • 如果发送TCP SYN数据包,则入站数据包应为ICMP TIME Exceed消息,TCP SYN + ACK数据包或TCP RST数据包,所有数据都小于512字节。