标题: 解答ping-r和tracert获取的路由信息为什么不一致的问题 [原创] 返回
作者: 闪空[flashsky]   [ 邮箱: flashsky1@sina.com 主页: ] 发表日期: 2002-11-06   浏览次数: 4108
看见有人问为什么ping -r与tracert获取的路由信息不一样。而有回答是tracert采用了最短路径优先路由协议(OSPF)所导致,看来技术到理解也不是那么简单的事情,写点浅显的技术解释文章给大家,算给大家上点基本常识课,遇见问题如何去找答案。\r
首先记住:OSPF只是路由之间的选路协议,对于主机而言,是完全没办法干涉和获取的,他只能忠实的被动有路由去转发,他们在包到达目标路径上执行的策略都是一致的,虽然可能由于某些路由改变了路径导致其路径不一致,但是如果tracert的包是由OSPF选路确定的路径,那么ping的包也一样。\r
闲话少说,我们还是分析具体问题吧:口说无凭,还是做个实验抓取ping -r和tracert命令执行产生的包来分析吧:\r
这是ping www.sina.com.cn -r 9产生的结果:\r
218.17.93.143 ->61.144.201.66 ->61.144.236.211 ->61.140.1.18 -> 202.105.1.246 ->202.105.1.177 ->61.140.8.5 ->61.145.112.248 -> 61.145.113.124\r
那么看一下发出的请求包:\r
在发出的ICMP包中的IP头中使用了0x07 0x27的源地址路由选项,说明ICMP的路由是根据返回包的记录的源地址选项来实现路由记录的,从返回的包中的路由记录中可以看出和显示的路由信息完全一致。但是我们知道,通过源路由选项我们得出的结果是从www.sina.com.cn返回我们主机的包,其记录的路由实际上是www.sina.com.cn到我们的路由,而不是我们的主机到www.sina.com.cn的路由,呵呵,这就有差别了。\r
而tracert则是通过递增ttl来实现的路由检测,那么他是一个标准的由我们的主机到www.sina.com.cn的路由,结果是:\r
192.168.0.1->218.17.93.254->61.144.201.65->61.144.236.209->61.140.1.17->202.105.1.245->202.105.1.178->61.140.8.6->61.145.113.253->61.145.113.90\r
对比以下有什么不同呢?因为使用TTL方式会记录本地代理服务器的地址,而这台机器是关掉了源路由选项处理的功能的,所以要却掉这个地址对比如下:\r
218.17.93.143 ->61.144.201.66 ->61.144.236.211 ->61.140.1.18 -> 202.105.1.246 ->202.105.1.177 ->61.140.8.5 ->61.145.112.248 -> 61.145.113.124\r
218.17.93.254->61.144.201.65->61.144.236.209->61.140.1.17->202.105.1.245->202.105.1.178->61.140.8.6->61.145.113.253->61.145.113.90\r
因为一个是回路,一个是去路,因此可能选择的路由路径是不一致的,即使是一致的,也会产生不同的结果。为什么呢?因为路由都是多接口的,从一个接口收到包以后,转发到另一个接口上,由于ping方式获取的是包返回的路由,所以记录的都是这个路由的返回时候收到包的接口,而ttl递增方式则是记录的发送包的时候收到的路由接口地址。假设来去都使用了一样的路由路径,路由1到路由2,则演示如下:\r
TTL递增方式的路由是:\r
主机1A《-》路由1接受接口〈-〉路由1发送接口〈-〉路由2接受接口〈-〉路由2发送接口〈-〉目标\r
记录的是:路由1接受接口,路由2接受接口\r
ping -r方式则是记录了\r
路由1发送接口,路由2发送接口(以我们发送ICMP的时候的眼光看待)\r
所以ping -r和tracert得出的结果是不一样的,并且无论如何你都无法使得他们得出一样的结果,无论路由器之间采用了什么算法。\r
另外如果某些路由关闭了源路由选项支持的功能,也会使得ping -r方式获得的路由信息不全。\r
\r
\r
[此贴被 闪空(flashsky) 在 7月24日16时11分 编辑过]\r
\r
------------------------\r
帖子发表时间:7/24 16:46\r
\r

四不象[tabris17]回复道:

^o^\r
有水平 \r
\r


四不象[tabris17]回复道:

高手\r
\r
我跟定你了 \r
\r


蓝林[laneagle]回复道:

这位高手以一大篇文章来批判我的最短路优先原则,当然有一定的道理。但是,问题是,如果路由改变的话,真的不会对PING -R和TRACERT的路由显示产生变化吗,我怀疑这点,况且PING -R最多只能记录9个路由信息,而且有的主机根本会忽略PING -R 的RECOND_ROUTE选项,不能作为基准。\r
\r
\r
[此贴被 蓝林(laneagle) 在 7月27日13时50分 编辑过] \r
\r


闪空[flashsky]回复道:

    别人问的问题是有先决条件,即多次情况下ping -r和tracert的不同而自己的相同,这已经否决了你的关于路由之间由于OSPF导致的路径不一致的问题,我对你的不满不是你的第一次的回答而是第二次的回答你的回答是:\r
“那就是TRACE和PING的路由方案是不同的,因为PING是直接想主机发包,而TRACE则是先探出路由(可能是最短的,也可能不是),然后逐个路由发包,用于计算时间数,来确定是何路由,这应当有所不同。 ”,不仔细研究问题,动手测试,随便就给人以错误的回答,害人不浅。\r
    “另外如果某些路由关闭了源路由选项支持的功能,也会使得ping -r方式获得的路由信息不全。”这句话已经包含了你的PING -R 的RECOND_ROUTE选项的问题。\r
   至于记录9个,我没说,你补充上了也对。\r
   另外这个文章只是解释为什么ping -r和tracert产生的结果不同,你不相信源路由产生的结果是一回事,但是ping -r是采用这个方法是无可置疑的事情,就技术层而探讨,与其结果可靠不可靠无关。你可以抓取PING -R的包自己研究一下就知道了。\r
   当然在这是讨论问题,讨论是有,错误也会犯,互相取笑一下也有,不要记在心上了。另外向你道歉,不该用一些词语导致你产生不快的情绪,我会去掉的。\r
\r
\r
[此贴被 闪空(flashsky) 在 7月24日21时44分 编辑过] \r
\r


邪·安[xiean]回复道:

你们争什么啊。。。去找 M$ 要 ping 和 tracert 的源码来研究得了。。 \r
\r


闪空[flashsky]回复道:

呵呵\r
   这不是争,好象这个问题也无需读源代码,主要是抓包分析包内容和协议就够了。\r
我的这个解释应该是正确的,因为我后来查看了一下《TCP/IP详解》中的第七卷关于路由记录选项中的章节,也提到了这个问题,就是回来的时候记录路由那个接口的问题,因此可以确定,排除路径变化的因素,主要还是记录接口导致的,大家可以参考《TCP/IP详解》中的第七卷这部分的内容。\r
\r
\r


magic[buaaytt]回复道:

我很努力地去看了,还是看不太懂!悲剧! \r
\r


NetDemon[netdemon]回复道:

最近看来看去就这个帖子算是好帖子\r
\r
\r


远航[wlbyyh]回复道:

ping还有什么其它的用法吗? \r

当前位置: 20CN 精华区 > 安全基地 > 黑客进阶 返回

20CN缃戠粶瀹夊叏灏忕粍鐗堟潈鎵鏈
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
璁哄潧绋嬪簭缂栧啓锛NetDemon

绮CP澶05087286鍙