Traceroute,ICMP,UDP和TCP

traceroute何时使用TCP? 或者它只是使用UDP,为什么Traceroute在MacX上使用UDP和Windows上的ICMP? 我以为ICMP只是包含一个消息,说明是什么导致了一个数据包的错误,并不传输像TCP和UDP这样的数据段。

ICMP消息仍然是IP数据包。 Traceroute默认在Unix和Windows上使用ECHO Request (ICMPtypes8),并增加TTL,logging它从路由跳跃中获得的每个Time Exceeded (Type 11)消息的发送地址。 (参见: http : //en.wikipedia.org/wiki/Internet_Control_Message_Protocol )

这是做到这一点的“正确”方法,但是如果路由上的某些系统丢弃或以不同的方式处理ICMPstream量,则可能会遇到问题。

traceroute一些实现(例如在Linux上)具有用于切换到TCP / UDP的-T-U选项(以及用于指定目标端口的-p参数)。 这对于更真实地模拟真实的stream量非常有用,在某些情况下可能会得到更准确的结果。

我怀疑OSX实现默认为UDP,但我不能肯定地说。 您可能会发现使用ICMP的交换机。

Windows Tracert通常使用具有特定TTL的ICMP。 TTL每跳都增加,直到到达目的地。 这意味着第一跳的TTL(最大跳数)为1.即使数据包没有到达目标,第一跳也会丢弃它并发回一个TIME EXCEEDED消息,这个消息用于映射路由,下一个ICMP以2的TTL发送。

OSX和Linux在默认情况下使用UDP,但端口号不断增加,但都可以configuration为使用TCP,UDP,ICMP或GRE数据包。