微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

我认为路由器中的防火墙配置有两件事:

  • [B1] 拒绝接听主机(拒绝发送 ttl 过期消息),
  • [B2] 还要丢弃要在网络中传播到下一个主机的数据包。

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

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

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

非常感谢您的时间!

解决方法

如果我的数据包在第 8 次迭代中被定义为可丢弃的东西,为什么路由器在第 9 次迭代中转发它?

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

...并且在转发时也递减 TTL

是的,路由器在转发时会递减 TTL。这就是 TTL 的初衷:转发时递减 TTLTTL 达到零时丢弃

为什么不回我?防火墙规则?

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

如果在 10 跳内可以到达 metu.edu.tr,为什么我在第一个 traceroute 会话中的 UDP 数据包在 15 次迭代中无法到达主机(即使 TTL=15

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。