traceroute 使用 UDP 还是 ICMP 还是两者兼而有之?

traceroute 使用 UDP 还是 ICMP 还是两者兼而有之?

当我从笔记本电脑跟踪 www.google.com 域时,我使用的是 icmp 还是 udp?
我以为是 icmp 类型 11,但在搜索其他内容时,我遇到了使用 icmp 类型 30 的规则,并且看到了使用 udp 的规则。
有人可以向我解释一下它的工作原理吗?
我正在为虚拟专用服务器开发防火墙(iptables)。

答案1

发送的数据包类型因实现方式而异。默认情况下,Windowstracert使用 ICMP,而 Mac OS X 和 Linux 都traceroute使用 UDP。我手头没有 BSD 或 Solaris 机器或任何其他操作系统可供检查,但 Mac OS X 版本的手册页提到其出处是 BSD 4.3。

我拥有的 Mac 和 Linux 版本提供了选择各种不同协议的功能,包括 ICMP、TCP、UDP 和 GRE 数据包。其他协议可以通过其名称或编号指定,但 traceroute 对其他协议的工作原理一无所知。它只是盲目地发送它们。

它们还可以改变有效载荷以及源端口和目标端口,以避开防火墙,或者发现路径上的哪个路由器丢弃了一定大小的数据包。

所有版本的 traceroute 都依赖于ICMP 类型 11(超时)来自路由中每一跳的响应。如果防火墙阻止了 ICMP 类型 11 响应,则跟踪路由将不起作用。这些数据包是入站的,而不是出站的。

ICMP 类型 30是专门为 traceroute 指定的,并被标记为“信息请求”。我找不到实际使用它的地方。Mac OS X 和 Linux 版本的手册页说,-I将发送ICMP 类型 8(回显请求)。维基百科说 Windowstracert也使用 ICMP 回显请求。ICMP 类型 30 或类型 8 是出站数据包,而不是入站数据包。

ICMP 类型 0(回显响应)可能会在 TTL 恰好等于跳数时作为最后一个数据包返回。Traceroute 收到其中一个数据包时就会知道它已完成。这是一个入站数据包。

TCP 同步数据包到达目的地后,将导致发送RST数据包或响应数据包。如果您收到一个数据包,最好跟进一个数据包,以免在服务器上留下半开连接。SYN ACKSYN ACKRST

有可能得到ICMP 类型 3 代码 4如果您发送一个设置了“不分段”标志的大数据包,则将返回 ICMP 类型 11 响应,但这可能仅允许您找到具有最小 MTU 的跃点。您通常只会从路由上的一个跃点获得此类响应。并非所有跃点。

答案2

传统的跟踪路由在每一跳上都使用增加端口的 UDP。

您可以使用任何类型的数据包来实现它 - ICMP,TCP SYN等。所需要的只是 IP 数据包过期,然后您就成功了。

各种实现,例如 MacOS,提供对多种类型的跟踪路由的支持,以及不增加端口的模式等,以绕过防火墙限制。

相关内容