我正在排除无线互联网连接不断中断的故障。ISP 说无线电信号良好,所以一定是我的 cisco asa 5505。我不相信他们……
为了讨论,假设以下内容:
远程站点公网IP为10.1.1.50,默认网关为10.1.1.1
当我从远程位置到 10.1.1.50 进行 tracert 时,tracert 的倒数第二跳是否应该始终是 10.1.1.1?
当连接中断时,倒数第二跳不是 10.1.1.1,但是 10.1.1.1 是可 ping 的,并且我可以对它进行 tracert。
我认为这是 ISP 的路由问题。
我的逻辑合理吗?如果 10.1.1.1 可访问,那么在我收到超时之前,它不应该是 tracert 上的倒数第二跳吗?
答案1
在 99% 的情况下,traceroute 的倒数第二跳将不是是目标主机的默认网关。这是由 traceroute 的工作方式决定的。
所有 IP 数据包都有一个 - 名字有点错误 -生存时间(生存时间) 字段。每个转发数据包的路由器都会将此字段减一。如果路由器将 TTL 减为 0,则会丢弃该数据包并生成ICMP TTL 已超出错误数据包并将其发送回发送原始数据包的人。错误数据包的目标 IP 是原始数据包的源(在本例中为发起跟踪路由的主机)。错误数据包的源 IP 通常是传出接口,即面向网络其余部分的接口。
Traceroute 利用了这一事实;它发送具有连续增加的 TTL 的数据包;这会导致源和目标之间的路径上的每个路由器将 ICMP 不可达消息发送回执行 traceroute 的主机。每个错误都会有一个探测数据包在被丢弃之前到达的最终路由器的源 IP。这允许 traceroute 构建源和目标之间路径的图片。
考虑下面的图表(忽略多条路径的可能性):
________ 1.1____1.2 2.1____2.2 ________
|Host A|-----|Router 1|--- Internet ---|Router 2|-----|Host B|
-------- ---------- ---------- --------
如果主机 A 正在执行到主机 B 的跟踪路由,则倒数第二跳将是路由器 2,它将接收如下探测数据包:
SrcIP: A | DstIP: B | TTL: 1
路由器 2 将把 TTL 减为 0;这将导致它生成 ICMP TTL 过期:
SrcIP: 2.1 | DstIP: A | TTL <default>
因此,当 traceroute 收到此错误消息时,它将看到的倒数第二跳的 IP 地址将是路由器 2 面向互联网的接口,而不是面向主机 B 的接口。