为什么 ping 不通,但 traceroute 却不通

为什么 ping 不通,但 traceroute 却不通

几天来,我开始做出一个有趣的观察:一台机器间歇性地不响应 ICMP ping,但它仍然响应基于 ICMP 的跟踪路由(具体通过 -I 参数设置)。

据我所知,两者都使用 ICMP 的回显请求,因此我认为不会有任何区别。

有人可以解释一下这个吗?

答案1

最有可能的是乒乓被阻止/被丢弃,而路由追踪使用节点/跳跃的错误消息来确定路由。跟踪路由不是一个标准的工具,因为它使用技巧来获取信息。技巧是操纵 TTL,因此跳跃会以ICMP错误(超出 ICMP TTL),这就是为什么这种情况可能发生。

答案2

我可以给你一份清单标头字段 IP 报头。对于每个报头字段,我可以解释 ping 和 traceroute 可能对该字段使用不同的值。并且连接的另一端可能会根据该报头字段的值过滤流量。

但是,这不是一个非常有用的答案。相反,我建议您使用专门为此目的而设计的工具检查传出流量的标头字段。您可以使用它tcpdump来执行初步分析并保存流量以供进一步调查。对于更彻底的检查,我发现 Wireshark 是一个更合适的工具,它可以检查之前使用 tcpdump 捕获的流量,它还可以直接从网络接口捕获流量,以便您可以实时检查它。

最明显的差异是长度和跳数限制。使用 traceroute 时,接收端将接收具有不同跳数限制的数据包,只要它响应其中一个,您就会看到响应。使用 ping 时,它只会收到特定的跳数限制。

您还需要注意是否实际收到了任何回复。在配置错误的目标上,您可能会看到数据包被悄悄丢弃,但配置正确的目标可能会向您发送一条错误消息,说明它为何不会处理请求。一个程序可能会意外丢弃奇怪的响应,而另一个程序则会显示该响应。

可以使用 ping 和 traceroute 的命令行标志来改变多个报头字段。如果您怀疑某个特定报头字段触发了不同的行为,请查找命令行标志来修改该特定报头字段以确认您的怀疑。

相关内容