为什么traceroute发送的是UDP数据包而不是ICMP数据包?

19
根据Stevens(TCP/IP Illustrated)的说法,traceroute程序发送UDP数据包到目标主机,并使用递增的TTL(1、2、3等)从ICMP TTL EXPIRED消息中获取中间跳数信息。
"destination reached"的条件是ICMP PORT UNREACHABLE消息,因为traceroute会向一个高端口地址(即:不太可能有人在那里监听)发送数据包。
所以我的问题是:相对于使用递增的TTL发送ICMP echo request消息并使用echo reply答复作为结束条件,是否存在使用UDP数据包的技术原因(缺点、RFC等)?
我知道ICMP echo reply可能会被防火墙或其他中间网络设备过滤掉,但我想UDP数据包也可能会遇到同样的情况 ;)
非常感谢
Sergio
1个回答

18

这实际上是"旧"的traceroute方法。我想主要原因是,发送普通的UDP数据包不需要特殊权限,而发送ICMP数据包则需要(原始套接字或等效套接字)。这就是为什么例如ping通常被设置为root用户,这在安全方面存在很大的风险。

现在,traceroute也支持ICMP和TCP探测数据包,因此您更有可能通过防火墙,后者往往没有经过考虑而部署。这也意味着traceroute在您的系统上也可能被设置为root用户。请参阅其手册,特别是有关可用方法的部分:http://linux.die.net/man/8/traceroute


UDP非根traceroute - CS QGB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接