gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:48:52 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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

关于linux - 在 traceroute 源代码中,为什么大小被硬编码为 512 : u_char packet[512];,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37874661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com