如果一路上的路由器决定不发送超过 ICMP 时间(即到达途中的 TTL)或目的地不可达消息(即 UDP 数据包到达最终主机但端口关闭,但行为正确),您将获得超时点在跟踪路由中。
简而言之,如果您正在运行一个traceroute xyz
基于 UDP 的跟踪路由,即发送具有低 TTL 的 UDP 数据包,从 1 开始,每步增加 1。如果您的数据包在路由器处死掉,即 TTL 变为 0,那么根据 RFC 792 和其他一些标准,该路由器应该发送 ICMP“超时”消息,也就是说我们无法在时间范围内交付数据包,但至少我们告诉你你的包裹死了。
还有其他两种方法可以进行跟踪路由,如果您想更好地理解差异,我建议您使用手册页寻求帮助,例如这个。但总之你也可以发送ICMP Echo 数据包或TCP SYN 数据包。总而言之,有三种方法都基于不断增加的 TTL 来映射路由上的“主机”:
- UDP 到低 TTL 主机上的随机端口(通常为 33434 + 100)
- 根据我的经验,所有命令行工具的默认设置,例如
traceroute
和tracert
- ICMP Echo 以低 TTL 托管
- 我在几个图形工具中遇到过这种情况,也是大多数命令行工具的一个选项。
- TCP SYN,通常到端口 80,这样流量被“有点”屏蔽为 http 流量通过许多路由器,这些路由器通常将 ICMP Echo 和 UDP 数据包丢弃到奇怪的端口。
- 巧妙的技巧和“新”方法,虽然非正统,用于寻找到主机的路线。非常规,因为您在某种程度上滥用了 Internet 标准。作为大多数命令行工具的选项存在。
路由器可能会传递正常流量,从而允许您完成基于 TCP 的 http 请求,但它可能会默默地将 UDP 丢弃到奇怪的端口,将 TCP 半开放到奇怪的端口或具有低 TTL 的 ICMP ping,让您的本地跟踪路由进程等待,然后在那一站超时。