Jam*_*ore 3 networking tcpip routing trace icmp
我正在对不断断开的无线互联网连接进行故障排除。ISP 说无线电信号很好,所以它必须由我的 cisco asa 5505 提供。我不相信他们...
讨论假设如下:
远程站点公网ip为10.1.1.50,默认网关为10.1.1.1
当我从远程位置执行 tracert 到 10.1.1.50 时,tracert 的倒数第二跳是否始终为 10.1.1.1?
当连接断开时,倒数第二个跃点不是 10.1.1.1,但是 10.1.1.1 是可 ping 的,我可以对其进行跟踪。
我认为这是ISP的路由问题。
我的逻辑有效吗?如果 10.1.1.1 是可达的,它不应该是在我超时之前在 tracert 上的倒数第二跳吗?
在 99% 的情况下,traceroute 的倒数第二跳不会是目标主机的默认网关。这是因为 traceroute 的工作方式。
所有 IP 数据包都有一个 - 有点错误命名的 - 生存时间( TTL ) 字段。每个转发数据包的路由器都会将该字段递减 1。如果路由器将 TTL 递减为 0,它将丢弃该数据包并生成一个ICMP TTL 超出错误数据包并将其发送回原始数据包的发送者。错误数据包将具有原始数据包源(在这种情况下,启动跟踪路由的主机)的目标 IP。错误数据包的源 IP 通常是输出接口的 IP 地址,即面向网络其余部分的 IP 地址。
Traceroute 利用了这一事实;它发送具有顺序增加的 TTL 的数据包;这会导致源和目标之间路径中的每个路由器将 ICMP 不可达消息发送回执行跟踪路由的主机。每个错误都将具有探测数据包在被丢弃之前到达的最终路由器的源 IP。这允许 traceroute 构建源和目标之间的路径图。
考虑下图(忽略多条路径的可能性):
________ 1.1____1.2 2.1____2.2 ________
|Host A|-----|Router 1|--- Internet ---|Router 2|-----|Host B|
-------- ---------- ---------- --------
Run Code Online (Sandbox Code Playgroud)
如果主机 A 正在执行到主机 B 的跟踪路由,则倒数第二跳将是路由器 2,它将接收如下探测数据包:
SrcIP: A | DstIP: B | TTL: 1
Run Code Online (Sandbox Code Playgroud)
Router 2 将 TTL 递减为 0;这将导致它生成一个 ICMP TTL 过期:
SrcIP: 2.1 | DstIP: A | TTL <default>
Run Code Online (Sandbox Code Playgroud)
因此,当 traceroute 收到此错误消息时,它看到的倒数第二跳的 IP 地址将是路由器 2 的面向 Internet 的接口,而不是面向主机 B 的接口。