Traceroute 跳数根据使用的 tcp 端口而变化

Traceroute number of hops changes depending on the tcp port used

我使用Nmap跟踪一些网站如下

nmap -Pn --traceroute 108.177.127.103

我注意到结果因使用的 TCP 端口而异。所以,当我使用端口 25 而不是端口 80 时,它会给出不同的结果。

奇怪的是路由过程应该发生在第3层。路由过程不应依赖于 TCP 端口。

我的第一个想法是 Nmap 出了点问题。但是,当我使用 Wireshark 嗅探数据包时。我找到了 ICMP 响应,它们与 Nmap 给出的完全一致。

然后,我使用windows命令行如下

tracert 108.177.127.103

我得到了一个完全不同的结果(它给出了 24 跳,在 nmap 中只有 9 跳)。

再次,我使用 Wireshark 查看发送和接收的内容,它们都很好。但是,cmd tracert 使用的是 ping 请求,它没有使用 TCP 协议。

更糟糕的是,在某些情况下,被跟踪的路由器 IP 都是私有的。即使,目标IP地址甚至不在我的国家!

这是 162.121.211.20 端口 25 上的 Nmap 跟踪路由之一:

192.168.1.1 (192.168.1.1)

host-197.43.213.1.tedata.net (197.43.213.1)

10.45.3.49 (10.45.3.49)

10.38.6.30 (10.38.6.30)

10.38.7.81 (10.38.7.81)

10.37.87.141 (10.37.87.141)

10.37.22.190 (10.37.22.190)

10.37.242.170 (10.37.242.170)

162.121.211.20

谁能给我解释一下这是怎么回事?!

在实践中,一些路由决策可能取决于上层。

例如,如果 ISP 提供防病毒、内容过滤或 proxying/content-distribution 服务,则它可能会将 HTTP 流量发送到某些特殊设备以提供这些服务。

端口 25 (SMTP) 流量可能会被重定向到某些反垃圾邮件过滤器。

各种 "low priority" 流量(其定义可能不同)可能通过 "high priority" 流量以外的其他路径发送。经典示例是优先于 BitTorrent 的 VoIP 或游戏流量。

这是 Net Neutrality 的一部分。