Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7112344
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类:

2012-11-23 14:54:21

ping-r和tracert获取的路由信息不一致

只有部分是windows服务器ip才回显,不知道原因。

C:\Users\xx>ping -r 9  10.1.1.15

正在 Ping 10.1.1.15 具有 32 字节的数据:
来自 10.1.1.15 的回复: 字节=32 时间=50ms TTL=125
    路由: 10.253.10.130 ->
           10.1.2.243 ->
           10.1.1.253 ->
           10.1.1.15 ->
           10.1.2.248 ->
           10.253.10.129 ->
           10.10.172.254
来自 10.1.1.15 的回复: 字节=32 时间=54ms TTL=125
    路由: 10.253.10.130 ->
           10.1.2.243 ->
           10.1.1.253 ->
           10.1.1.15 ->
           10.1.2.248 ->
           10.253.10.129 ->
           10.10.172.254
来自 10.1.1.15 的回复: 字节=32 时间=55ms TTL=125
    路由: 10.253.10.130 ->
           10.1.2.243 ->
           10.1.1.253 ->
           10.1.1.15 ->
           10.1.2.248 ->
           10.253.10.129 ->
           10.10.172.254
来自 10.1.1.15 的回复: 字节=32 时间=54ms TTL=125
    路由: 10.253.10.130 ->
           10.1.2.243 ->
           10.1.1.253 ->
           10.1.1.15 ->
           10.1.2.248 ->
           10.253.10.129 ->
           10.10.172.254

10.1.1.15 的 Ping 统计信息:

 

为什么ping -r与tracert获取的路由信息不一样。而有回答是tracert采用了最短路径优先路由协议(OSPF)所导致,看来技术到理解也不是那么简单的事情,写点浅显的技术解释文章给大家,算给大家上点基本常识课,遇见问题如何去找答案。
首先记住:OSPF只是路由之间的选路协议,对于主机而言,是完全没办法 干涉和获取的,他只能忠实的被动有路由去转发,他们在包到达目标路径上执行的策略都是一致的,虽然可能由于某些路由改变了路径导致其路径不一致,但是如果 tracert的包是由OSPF选路确定的路径,那么ping的包也一样。

闲话少说,我们还是分析具体问题:做个实验抓取ping -r和tracert命令执行产生的包来分析吧: 这是

ping -r 9

产生的结果: 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

看一下发出的请求包: 在发出的ICMP包中的IP头中使用了0x07 0x27的源地址路由选项,说明ICMP的路由是根据返回包的记录的源地址选项来实现路由记录的,从返回的包中的路由记录中可以看出和显示的路由信息完全 一致。但是我们知道,通过源路由选项我们得出的结果是从返回我们主机的包,其记录的路由实际上是到我们的路由,而不是我们的主机到的路由,这就有差别了。

而tracert则是通过递增ttl来实现的路由检测,那么他是一个标准的由我们的主机到的路由,

结果 是: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

对比以下有什么不同呢?因为使用TTL方式会记录本地代理服务器的地址,而这台机器是关掉了源路由选项处理的功能的,所以要却掉这个地址对比如下: 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 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

因为一个是回路,一个是去路,因此可能选择的路由路径是不一致的,即使是一致的,也会产生不同的结果。为什么呢?

因为路由都是多接口的,从一个接口收到包以后,转发到另一个接口上,由于 ping方式获取的是包返回的路由,所以记录的都是这个路由的返回时候收到包的接口,而ttl递增方式则是记录的发送包的时候收到的路由接口地址。假设来 去都使用了一样的路由路径,路由1到路由2,则演示如下: TTL递增方式的路由是: 主机1A《-》路由1接受接口〈-〉路由1发送接口〈-〉路由2接受接口〈-〉路由2发送接口〈-〉目标 记录的是:路由1接受接口,路由2接受接口 ping -r方式则是记录了 路由1发送接口,路由2发送接口(以我们发送ICMP的时候的眼光看待) 所以ping -r和tracert得出的结果是不一样的,并且无论如何你都无法使得他们得出一样的结果,无论路由器之间采用了什么算法。 另外如果某些路由关闭了源路由选项支持的功能,也会使得ping -r方式获得的路由信息不全。

阅读(1611) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~