Traceroute和tracert的原理分析实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Traceroute和tracert的原理分析实验

作者:王富霖

1、拓扑图

图1 实验拓扑图

2、原理

Tracert跟踪路由:通过向目标发送不同 IP 生存时间 (TTL) 值的“Internet 控制消息协议(ICMP)”回应数据包,Tracert 诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。

Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。

可以得知,基本原理就是利用TTL=0时,ICMP返回超时来达到跟踪路由的目的。但在具体的实现上有不同的做法。目前主流设备都提供一个traceroute和tracert的指令。下面将针对这两条指令展开分析。

3、思科路由器、SUN主机执行traceroute指令,抓包分析。

翻阅《TCP/IP协议详解卷1》的描述:8.2节中原文如下:

“Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误(见6.5节)的ICMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。”

从以上结果来看路由器Traceroute命令默认发出的包发到目的地址UDP端口从33434开始,每个包递增1,TTL从1开始,每三个包(可以参数设置)后TTL加1。如果跟踪路由的跳数在30跳以内,到达目的地址后,因为目标IP 就是当前设备,所以解开上层UDP分析,发现端口不可达(本来就是为了不可达返回错误),以上抓包明显发现是“ICMP类型3 代码3的Destination unreachable(port unreachable)”。如果超时,直接显示星号,继续下一个包的发送。直到默认的30跳停止。

4、普通windows主机执行tracert指令,抓包分析。

在windws主机里面的tracert:

明显的和TCP/IP详解的Traceroute命令表述有点出入。windows主机的tracert是直接是用ping来实现的,但是这个ping的TTL值在3个包后增大1,如果目标在30跳之内,目的地址直接回应“ping回显ICMP类型0 代码0”不可达或者超时后返回星号,继续下一个TTL的包的发送,一直到达默认设置的30跳。

以上返回结果结果。这里仔细讲解一下每个输出结果的含义。

第一列:ttl 的值,勉强可以理解为第几跳(如果网络中有ttl修改的话就不一定了)。

一行中中连续2-4共三列一般都能看到3个连续的数字。比如:1ms 1ms 1ms,这三个分别是TTL相同但是顺序不同的的三个IP包到达同一个发送到从设备返回的时间差。如果显示星号说明返回超时,不再等待,直接下一个包的发送。

最后一列是ttl超时返回ICMP错误的设备的接口IP地址。(注意:前面tracert 带了-d 参数,说明不用域名解析,时间较快;如果不带-d就需要做域名解析,较长时间)。

结论:traceroute和tracert返回结果显示一样,实现方式表面不一样,实

质原理一样,都是ttl递增的方式,利用icmp返回错误代码来跟踪路由。

相关文档
最新文档