traceroute、tracert是基于何种协议,还是本身就是一个独立的协议?
发布网友
发布时间:2022-04-30 01:06
我来回答
共1个回答
热心网友
时间:2022-06-27 18:26
就是基于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开始端口都是可以调整的。