为什么 traceroute 的三个相同 TTL 的数据包总是去同一个路由器?
Why traceroute's three packets with same TTL always go to same router?
最近在研究"Computer Networking A Top-Down Approach"这本书中的traceroute
,有几个问题让我印象深刻。书上说我引用
Trace-route actually repeats the experiment just described three
times, so the source actually sends 3 • N packets to the destination.
我的问题是:如果源发送 3 个具有相同 TTL 值的数据包,为什么 应该 所有具有相同 TTL 的数据包都到达 相同路由器一直(一直我的意思是在一次traceroute执行期间所有3个具有相同TTL值的数据包) 。我的意思是,为什么 TTL=n 的数据包不会从源 n 跳转到路由器,而另一个具有相同 TTL 的数据包会转到 another 路由器 n 从源跳转等等?由于不同时间的拥塞情况不同,很有可能两个到达同一目的地的数据包可能走不同的路由。为什么在 traceroute 的 3 个数据包具有相同 TTL 的情况下不会发生?如果确实发生了,为什么每个 TTL 值只显示一个路由器?
还有一个问题
RFC1393 说:
The purpose behind this is to record the source of each ICMP TTL
exceeded message to provide a trace of the path the packet took to
reach the destination.
假设 TTL=3,数据包采用路由器 A-B-C 的路径,并且由于 TTL=4 的数据包面临不同的拥塞,它采用路径 A-X-Y-D。现在,关于 trace 我们可以得出什么结论?
还是我遗漏了更明显的东西?
TTL 是指数据包在丢弃之前可以传输的最大跳数。因此,TTL等于5的数据包并不意味着数据包每次发送都需要经过5跳。
你的前提是错误的。例如,如果路径中存在负载平衡,则您不会总是以相同的跃点数获得相同的路由器。关于这个有一个 recent question in Network Engineering。
如果您有一个 stable、设计良好的网络并且没有负载平衡,您应该以相同的跃点数获得相同的路由器。这是因为路由 tables 应该是 stable 并且是确定性的。每个路由器在其路由 table 中都有通往目的地的最佳路由,并且在没有网络不稳定(或其他类似负载平衡)的情况下,路由 table 不会改变。数据包由每个路由器独立路由,应该遵循相同的路径。
事实上,路径上随机或变化的跃点可能是一个真正的问题,因为它可能指向严重的网络问题。如果一个或多个路由 table 中存在流失,则需要确定并纠正问题的根源。
您一直假设路由器会绕过拥塞。这几乎从来都不是真的。路由器通常通过整形、排队、and/or 监管来管理拥塞,而不是绕过拥塞进行路由。 QoS 的全部原因是处理网络拥塞并尝试管理公平性和顺序,哪些流量会被丢弃,哪些流量必须等待。
最近在研究"Computer Networking A Top-Down Approach"这本书中的traceroute
,有几个问题让我印象深刻。书上说我引用
Trace-route actually repeats the experiment just described three times, so the source actually sends 3 • N packets to the destination.
我的问题是:如果源发送 3 个具有相同 TTL 值的数据包,为什么 应该 所有具有相同 TTL 的数据包都到达 相同路由器一直(一直我的意思是在一次traceroute执行期间所有3个具有相同TTL值的数据包) 。我的意思是,为什么 TTL=n 的数据包不会从源 n 跳转到路由器,而另一个具有相同 TTL 的数据包会转到 another 路由器 n 从源跳转等等?由于不同时间的拥塞情况不同,很有可能两个到达同一目的地的数据包可能走不同的路由。为什么在 traceroute 的 3 个数据包具有相同 TTL 的情况下不会发生?如果确实发生了,为什么每个 TTL 值只显示一个路由器?
还有一个问题
RFC1393 说:
The purpose behind this is to record the source of each ICMP TTL exceeded message to provide a trace of the path the packet took to reach the destination.
假设 TTL=3,数据包采用路由器 A-B-C 的路径,并且由于 TTL=4 的数据包面临不同的拥塞,它采用路径 A-X-Y-D。现在,关于 trace 我们可以得出什么结论?
还是我遗漏了更明显的东西?
TTL 是指数据包在丢弃之前可以传输的最大跳数。因此,TTL等于5的数据包并不意味着数据包每次发送都需要经过5跳。
你的前提是错误的。例如,如果路径中存在负载平衡,则您不会总是以相同的跃点数获得相同的路由器。关于这个有一个 recent question in Network Engineering。
如果您有一个 stable、设计良好的网络并且没有负载平衡,您应该以相同的跃点数获得相同的路由器。这是因为路由 tables 应该是 stable 并且是确定性的。每个路由器在其路由 table 中都有通往目的地的最佳路由,并且在没有网络不稳定(或其他类似负载平衡)的情况下,路由 table 不会改变。数据包由每个路由器独立路由,应该遵循相同的路径。
事实上,路径上随机或变化的跃点可能是一个真正的问题,因为它可能指向严重的网络问题。如果一个或多个路由 table 中存在流失,则需要确定并纠正问题的根源。
您一直假设路由器会绕过拥塞。这几乎从来都不是真的。路由器通常通过整形、排队、and/or 监管来管理拥塞,而不是绕过拥塞进行路由。 QoS 的全部原因是处理网络拥塞并尝试管理公平性和顺序,哪些流量会被丢弃,哪些流量必须等待。