【问题标题】:In traceroute source code why the size is hard coded to 512 : u_char packet[512];在 traceroute 源代码中,为什么将大小硬编码为 512 : u_char packet[512];
【发布时间】:2016-06-17 06:33:28
【问题描述】:

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

我不知道为什么大小限制为 512 字节。如果 ICMP 入站数据包大小大于 512 字节会怎样?

【问题讨论】:

    标签: linux icmp traceroute


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-23
      • 2019-07-19
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多