一个人希望通过TCP而不是UDP发送traceroute的目的是什么?这样做有什么优点/缺点?我知道traceroute通常使用UDP ICMP“ echo”数据包,而TCP的traceroute使用其三向握手的“ SYN”数据包,但是我很好奇为什么一个可能比另一个更好。如果要视情况而定,那是什么情况?

评论

我以为您在问tcptraceroute,对吗?

例如,该实现或traceroute -T -p 80将通过TCP端口80执行traceroute。

有时udp被阻止,并且进行跟踪路由的唯一方法是将tcp与允许的端口一起使用。例如端口80(Web)或端口25(smtp)

#1 楼

没有“ UDP ICMP“ echo”“这样的东西。 traceroute发送TTL递增的UDP探测。该探针是发往高端口的单个数据报,不太可能是监听服务。当数据报通过网络流出时,TTL会递减,直到它达到零为止,这时将生成ICMP错误(“超时”)。该ICMP消息标识“跳”。当TTL足以到达目标时(由于该端口上没有侦听器),将生成ICMP“端口不可达”错误,从而结束跟踪。

tcptraceroute的目的是执行相同的操作使用TCP连接进行某种路径检查。它在诊断到特定服务的连接问题时最有用。 (例如,Web服务器)由于探针看起来像是正常的TCP连接尝试,它们将通过NAT,防火墙,ACL,速率限制等,就像来自预期应用程序的连接一样。

评论


我的印象是traceroute将UDP ICMP回显请求数据包发送到指定的目的地,不是吗?另外,您指定使用tcptraceroute的充分理由。但是,为什么不默认使用tcptraceroute? (UDP)跟踪路由是否有任何特定优势?

–医生
2014年1月3日在22:16



没有像“ UDP ICMP echo”这样的东西。 UDP和ICMP是完全不同的东西。默认情况下,traceroute使用UDP。许多版本支持使用ICMP回显的“ -I”,如果防火墙或NAT无法处理UDP探针,则很有用。

–瑞奇
2014年1月3日22:27

我认为,造成混淆的部分原因是,在使用tracert.exe时,MS Windows确实会发送ICMP回显请求(TTL越来越大)。思科路由器(和大多数* nix设备)使用Ricky所述的UDP探针。

–罗恩·托恩(Ron Trunk)
2014年1月3日23:14

@Ron会的。我从来没有注意过M $关心如何做任何事情。要点是……UDP和ICMP是不同的东西。

–瑞奇
2014年1月3日23:53

@Ricky Beam-糟糕,是的,您是对的。

–医生
2014年1月6日下午16:50

#2 楼

Tcp traceroutes可用于测试访问列表,该访问列表会阻止路由器,防火墙或入侵防御系统上的给定协议。好人和​​坏人都对这种知识感兴趣。诸如tcptraceroute之类的工具在渗透测试器工具箱中是常见的,并且可以在精明的网络管理员系统中找到。

#3 楼

Traceroute依赖于发送具有受控TTL的探针并监视ICMP时间超出错误,该错误会再次出现。

探针可以是任何协议。 Windows默认情况下使用ICMP回显数据包。大多数类似unix的系统默认情况下使用UDP数据包。

如果我们的网络像预期的Internet设计者一样简单,则无需更改跟踪路由中使用的协议的选项,但实际上我们有防火墙,NAT,流量优先级系统等。对于您的跟踪,使用与应用程序实际使用的协议相同的协议(并可能使用相同的端口号)可以增加您的traceroute的结果代表您的网络的机会。应用程序将会看到。