traceroute、tracert是基于何种协议?

traceroute、tracert是基于何种协议?

就是基于ICMP的。TCP/IP协议详解卷1的8.2节中曾经说过,路由追踪时发送UDP数据报给目标主机,而且设置的端口值很高,一般大于30000,以避免端口号被使用。原文如下: “Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口 号(大于30 000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报 到达时,将使目的主机的UDP模块产生一份“端口不可达”错误(见 6 . 5节)的ICMP报文。 这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断 什么时候结束。” 中间的路由器是因为TTL=0以后返回ICMP 类型11,代码0的超时消息。目的IP到了以后,拆包分析UDP内容,发现端口不可达,返回ICMP类型3,代码3(目标端口不可达)实现。 在windws主机里面的tracert和TCP/IP详解的表述有点出入。windows主机的tracert是直接是用ping来实现的,但是这个ping的TTL值在3个包后增大1,不可达或者超时后返回星号,继续下一个TTL的包的发送,一直到达默认设置的30跳。一般在路由器和交换机上的traceroute都是UDP的方式,每个TTL发的包的个数和最大跳数、UDP开始端口都是可以调整的。