traceroute是使用UDP还是使用ICMP或同时使用这两者?


24

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

Answers:


26

发送的数据包类型取决于实现方式。默认情况下,Windows tracert使用ICMP,而Mac OS X和Linux都traceroute使用UDP。我没有手头的BSD或Solaris机器或任何其他OS,但是Mac OS X版本的手册页提到其出处是BSD 4.3。

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

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

所有版本的traceroute都依赖于路由中每个跃点的ICMP 11类(超过时间)响应。如果防火墙阻止了ICMP 11类响应,则traceroute将不起作用。这些数据包是入站的,不是出站的。

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

当TTL完全等于跳数时,ICMP类型0(回波响应)可能作为最后一个数据包返回。当Traceroute接收到其中之一时,它将知道它已经完成。这是入站数据包。

TCP SYN数据包到达目的地时,将导致一个RST数据包或一个SYN ACK数据包作出响应。如果您收到一个SYN ACK数据包,则最好跟进一个RST数据包,以免在服务器上留下半开的连接。

如果发送设置了“请勿分段”标志的大数据包,则可能会返回ICMP 3类型的代码4响应,而不是ICMP 11类型的响应,但是,这很可能只允许您找到MTU最小的跃点。通常,您只会从沿路线的一跳处得到这种响应。不是所有的人。


8

传统的traceroute在每跳的递增端口上使用UDP。

您可以使用任何类型的数据包来实现它-ICMP,TCP SYN等。它所要做的就是IP数据包即将到期,您真是太棒了。

诸如MacOS之类的各种实现都提供对多种类型的traceroute的支持,以及不增加端口的模式等,以绕过防火墙限制。


7
类Unix实现中的默认UDP端口为33434至33534。ICMP实现使用“回显请求”(类型8)。
Ouki 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.