鉴于不同的操作系统可能使用不同的数据包类型(例如:UDP 数据包、TCP 数据包、ICMP 回显请求),我是否可以确定活动的浏览器会话将遵循与 traceroute 调用相同的路径?
换句话说,如果我正在浏览 www.stackexchange.com,我是否可以确定我的会话正在通过 traceroute 返回的节点路由到 www.stackexchange.com 与活动浏览器会话同时进行?
答案1
如果您还不了解 IP 路由,那么 traceroute 的结果不会告诉您任何信息。互联网上两个节点之间的路由可能每秒钟都在变化。而且一个方向的路由与返回路由不同。这甚至没有考虑到您提到的特定情况使用 CDN,这意味着不仅路由会发生变化,而且您与之通信的实际机器也可能不同。
话虽如此,但不能保证您从 traceroute 获得的路由与您的应用程序正在使用的路由相同。这可能有多种原因(如果算上不常见的情况,可能不止十几种),其中包括:
路径上的 ISP 故意以不同的方式路由跟踪路由数据包以隐藏其拓扑
拓扑在 traceroute 和 TCP SYN 之间发生了某种变化
有某种形式的负载均衡器或 CDN 可以故意重定向部分流量
这些是最有可能的,我无需深入探究网络的工作原理就可以解释。
顺便说一句,您的评论“不同的操作系统可能使用不同的数据包类型”是不正确的。 每一个连接到互联网的系统使用所有这些数据包类型,没有它们你就无法在网络上运行。
答案2
一般情况下,traceroute 会使用 ICMP 消息。如果使用 TCP 或 UDP 消息,traceroute 无法知道目标计算机上运行的服务,这意味着很难确定 TCP 或 UDP 消息中的端口。但如果没有防火墙阻止 ICMP 消息,ICMP 消息应该是可以的。
我能否确定活动的浏览器会话将遵循与我的 traceroute 调用相同的路径?
简而言之,不是。如果您的计算机和目标计算机之间有负载均衡器,则路径可能会有所不同,因为跟踪路由和浏览器使用两个会话。(这取决于负载均衡器上的规则。)