了解 traceroute 会话中的路由器行为

Understanding the router behavior in traceroute sessions

我正在尝试了解路由器如何处理 UDP 和 TCP 数据包。

我选择了一个网站并使用了 UDP 和 TCP 的 traceroute。

UDP输出如下:

yilmazali@udemy:~$ traceroute -v -m 15 metu.edu.tr
traceroute to metu.edu.tr (144.122.145.153), 15 hops max, 52 byte packets
 1  csp3.zte.com.cn (192.168.1.1) 60 bytes to 192.168.1.4  16.534 ms  1.281 ms  1.136 ms
 2  host-212-57-0-245.reverse.superonline.net (212.57.0.245) 60 bytes to 192.168.1.4  9.552 ms  9.559 ms  10.065 ms
 3  10.40.22.237 (10.40.22.237) 76 bytes to 192.168.1.4  6.070 ms  10.966 ms  6.093 ms
 4  10.34.255.157 (10.34.255.157) 36 bytes to 192.168.1.4  7.869 ms  9.842 ms  6.538 ms
 5  10.34.255.250 (10.34.255.250) 76 bytes to 192.168.1.4  7.474 ms  7.732 ms  11.364 ms
 6  10.38.207.137 (10.38.207.137) 148 bytes to 192.168.1.4  8.746 ms  7.645 ms  5.906 ms
 7  10.40.145.85 (10.40.145.85) 36 bytes to 192.168.1.4  7.223 ms  8.806 ms  8.685 ms
 8  * * *
 9  144.122.1.18 (144.122.1.18) 60 bytes to 192.168.1.4  20.426 ms  13.984 ms  15.184 ms
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *

使用 TCP traceroute,我可以在 12 跳内到达主机目的地:

yilmazali@udemy:~$ sudo tcptraceroute -p 80 metu.edu.tr
Selected device en0, address 192.168.1.4, port 80 for outgoing packets
Tracing the path to metu.edu.tr (144.122.145.153) on TCP port 80 (http), 30 hops max
 1  192.168.1.1  1.215 ms  1.080 ms  1.316 ms
 2  host-212-57-0-245.reverse.superonline.net (212.57.0.245)  4.183 ms  9.425 ms  10.032 ms
 3  10.40.22.237  7.459 ms  7.782 ms  7.361 ms
 4  10.34.255.157  6.455 ms  5.887 ms  14.849 ms
 5  10.34.255.250  6.110 ms  10.768 ms  7.230 ms
 6  10.38.207.137  7.604 ms  6.761 ms  9.247 ms
 7  10.40.145.85  8.526 ms  8.942 ms  10.607 ms
 8  * * *
 9  144.122.1.18  15.320 ms  16.699 ms  14.010 ms
10  dng03.general.services.metu.edu.tr (144.122.145.153) [open]  17.520 ms  14.696 ms *

[Q1] 我无法理解路由器在步骤 [8] 中在 TCP traceroute 中的行为。我有这样一个疯狂的猜测:路由器收到了 TTL=1 的数据包,并且看到它应该 return 给我响应“TTL 已过期”。但它没有(为什么它不 return 我?防火墙规则?)。在下一次迭代中,我的计算机发送了 TTL=9 的相同数据包,这次我从 144.122.1.18 得到了“ttl 已过期”的回答。这是否意味着步骤 [8] 的路由器实际上转发了我的数据包,看到它是 TTL=2(并且在转发时也减少了 TTL)?在第 8 次迭代中,路由器丢弃了我的数据包并且没有 return 响应我,但是在第 9 次迭代中,路由器将我的数据包转发到下一个路由器。如果我的数据包在第 8 次迭代中被定义为可丢弃的东西,为什么路由器在第 9 次迭代中转发它?

我认为路由器中的防火墙配置有两个作用:

我不确定这两件事是否在实践中完成。

[Q2] 我的第二个问题是:在 TCP traceroute 中我们看到 metu.edu.tr 可以在 10 跳后到达。

假设 [B2] 为假,即考虑到路由器确实转发 TTL>1 的数据包,如果 metu.edu.tr 在 10 跳内可达,为什么我在第一个 traceroute 会话中的 UDP 数据包无法到达主持 15 次迭代(即使 TTL=15)。我希望路由器将它转发到下一个路由器,直到我到达 dng03.general.services.metu.edu.tr,希望 return 是我 ICMP port unused 错误或类似的事情。

非常感谢您的宝贵时间!

If my packet is defined as something droppable in 8th iteration, why does router forward it in 9th iteration?

不是同一个包。丢弃的数据包的 TTL 为 8,因此无法转发。未丢弃的数据包的 TTL 为 9。

... and also decremented TTL while forwarding

是的,路由器在转发时递减 TTL。这就是 TTL 的首要意义:转发时递减 TTL当 TTL 达到零时下降

Why doesnt it return me? Firewall rules?

可能是防火墙规则、路由器配置、每次 ICMP 消息的限制...

if metu.edu.tr was reachable in 10 hops, why my UDP packets in first traceroute session could not reach to host in 15 iteration (even with TTL=15

您显示的 traceroute 输出 并不意味着在 10 跳后 无法到达主机。这意味着主机在 10 跳 没有响应 数据包,即没有超过 ICMP TTL 但也没有任何其他(如 ICMP 端口无法访问)。可能是服务器实际上以 10 跳到达,但它只是丢弃了您的 UDP 数据包而没有任何进一步的反应。这发生在所有 UDP 探测到达服务器时,即无论原始 TTL 10、11、12,...。

这就像敲门却没有回应。可能有人不在里面,但也可能只是忽略了敲门声。因此它不能从没有人在里面的“无响应”中得出。