我们的网络出现间歇性问题,发生在路由器 A 和 B 之间。A 距离网关最近。
问题发生时,A 无法 ping 通 B,反之亦然。如果我通过带外管理访问路由器 B,则沿网络向网关跟踪路由会返回奇怪的结果。
从路由器 B 开始的跳数如下:路由器 B -> 路由器 A -> R1 -> R2 -> R3 等
到 R3 的跟踪路由返回:RA -> 回复。R1
-> 回复。R2
-> 回复。
超时
到 R2 的跟踪路由返回:RA -> 回复。R1
-> 回复。
超时
向 R1 返回:RA -> Reply。
超时
这对我来说毫无意义。为什么当 traceroute 到达 R3 时,R2 可以回复,而当它是 traceroute 的终点时,R2 却不回复?
即使网络配置没有任何改变,该问题也会出现并消失。
据我理解,您的问题总是缺少最后的ICMP 回显答复,而中间的ICMP 超时消息则可以起作用。
Traceroute 返回的消息各不相同。看起来,有一个跃点在转发其他 ICMP 消息时丢弃了返回的 echo 回复。我会在有问题的路由器(两个接口)上运行数据包跟踪,当然,还要检查日志。
在前一种情况下,它实际上并不回复数据包。它发送有关无法进一步传递数据包的错误指示。不同之处在于 R2 不是探测的目的地,数据包的原始内容并不重要;它们不是导致响应的原因。
实际上没有特定的跟踪请求或答复——traceroute 工具完全通过收集此类错误响应来工作。
而在后一种情况下,数据包已成功传送,而 R2 作为实际接收者现在需要在某个更高的协议级别上处理它。例如,如果是 ICMP 回显请求(即“ping”),路由器现在必须明确响应该 ping。如果是 UDP 探测,路由器需要响应“端口不可达”。它可能被配置为不响应 ping,并且可能通过防火墙阻止了这些 UDP 端口。