traceroute使用UDP或ICMP还是两者?

当我从我的笔记本电脑在www.google.com域上进行跟踪时,是使用icmp还是udp
我认为这是icmptypes11,但在寻找别的东西时,我遇到了使用icmp type 30的规则,并且我看到了使用udp的规则。
有人可以向我解释这是如何工作的?
我正在为一个虚拟专用服务器的防火墙(iptables)工作。

    发送的数据包的types根据实现而不同。 默认情况下,Windows tracert使用ICMP,Mac OS X和Linux traceroute使用UDP。 我没有BSD或Solaris机器或任何其他操作系统在手边检查,但Mac OS X版本的手册页提到它的出处是BSD 4.3。

    Mac和Linux版本提供了select各种不同协议的能力,包括ICMP,TCP,UDP和GRE数据包。 其他协议可以通过名字或者数字来指定,但是traceroute并不知道其他协议是如何工作的。 它只是盲目地发送它们。

    他们还可以更改有效载荷以及源端口和目标端口,以避免防火墙或发现path上的哪个路由器正在丢弃一定大小的数据包。

    所有版本的traceroute都依赖于沿路由每跳的ICMPtypes11 (超时)响应。 如果防火墙阻止了ICMPtypes11响应,则traceroute将不起作用。 这些数据包是入站的,而不是出站的。

    ICMPtypes30专门用于跟踪路由,标记为“信息请求”。 我无法find任何实际使用的地方。 Mac OS X和Linux版本的手册页说-I将发送ICMPtypes8 (回应请求)。 维基百科说,Windows tracert也使用ICMP回应请求。 ICMPtypes30或types8是出站数据包,不是入站。

    当TTL恰好等于跳数时, ICMPtypes0 (回应响应)可以作为最后一个包返回。 Traceroute在收到其中一个时会知道它已经完成。 这是一个入站数据包。

    当到达目的地时, TCP SYN数据包将引起RST数据包或SYN ACK数据包的响应。 如果您收到一个SYN ACK数据包,跟进一个RST数据包是很礼貌的,以免在服务器上留下半开连接。

    如果发送带有“Do not fragment”标志集的大数据包,则可以获得ICMPtypes3代码4的响应,而不是ICMPtypes11的响应,但是这很可能仅用于查找具有最小MTU的跳。 通常情况下,您只能从路线上的一跳获得这种响应。 不是所有的人。

    传统的traceroute每增加一个端口就使用UDP。

    您可以使用任何types的数据包来实现它 – ICMP,TCP SYN等。只需要IP数据包到期,您就是黄金。

    MacOS等各种实现都支持多种types的跟踪路由,以及不增加端口等的模式,以绕过防火墙的限制。