Traceroute的工作原理

 Traceroute是我们经常用到的一个路由跟踪命令。
      它的实现原理如下:
      它发送一份 TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将 T T L值减 1,丢弃该数据报,并发回一份超时I C M P报文。这样就得到了该路径中的第一个路由器的地址。然后 Tr a c e r o u t e程序发送一份T T L值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到 T T L值为1的I P数据报,也不会丢弃该数据报并产生一份超时 I C M P报文,这是因为数据报已经到达其最终目的地。那么我们该如何判断是否已经到达目的主机了呢?
      Traceroute程序发送一份 U D P数据报给目的主机,但它选择一个不可能的值作为 U D P端口号(大于 30 000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的 U D P模块产生一份“端口不可达”错误(见 6 . 5节)的 I C M P报文。这样, Tr a c e r o u t e程序所要做的就是区分接收到的 I C M P报文是超时还是端口不可达,以判断什么时候结束。


     我们使用ping命令的R选项也可以打印出源主机到目的主机所经过的路由。但是它和traceroute有些不同,至于区别在哪里?大家可以思考一下

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

TraceRoute的工作原理

默认分类    2008-12-18 19:30   阅读362   评论0  
字号:    
1.TraceRoute的工作原理:

      traceroute 有使用两种:使用ICMP的和使用UDP的。Microsoft
      使用ICMP,所以win95上发出的traceRT应使用的是ICMP,但我没有用 sniffer查过;其它包括unix和cisco router都使用UDP.


      ICMP traceroute:
      ===========
      使用ICMP Echo Request, Echo Reply and TTL-expired.

      源发出 ICMP
      Equest,第一个request的TTL为1,第二个request的TTL为2,以后依此递增直至第30个;中间的router送回ICMP
      TTL-expired ( ICMP type 11)
      通知source,(packet同时因TTL超时而被drop),由此source知晓一路上经过的每一个router;最后的destination送回ICMP
      Echo Reply。

      所以中间任何一个router上如果封了
ICMP Echo Request , traceroute就不能工作;如果封了type 11
      (TTL-expired), 中间的router全看不到,但能看到packet 到达了最后的destination;如果封了ICMP Echo
      Reply,中间的全能看到,最后的destination看不到

      UDP traceroute:
      ==========
      使用ICMP TTL-expired(type 11), I
CMP port unreachable(type 3, code 3) , UDP
 
     port >32768
.

      source发出UDP packet, source port使用随机的任何大于32768的高段port#, destination port #
      从33434开始每送个probe依此递增,直至33434+29,(cisco
      router上使用extended-traceroute命令可以修改这个起始的33434 port #),
      同时TTL从1开始依此递增,直至1+29=30(最多送30个probe)。中间的router送回 ICMP
      TTL-expired,使得source得知了中间的每一个router,最后的destination送回TTL-expired 和ICMP port
      unreachable (因为任何主机上都没有应用使用UDP port# >32768这样的高段port#)。

      所以中间某处封掉UDP
      port>32768回导致traceroute不工作;封掉TTL超时会使source看不到中间的router(有的router根本不支持回送TTL超时);封掉type3,
      code3可能看不到destination.

      另外需要知道的是,由于回送TTL-expired的信息需要CPU生成一个packet,必须打断 CPU,为保证其它工作的正常进行,cisco
      router每隔一秒才处理traceroute,所以在source 上你可能看到中间一路 * * *,但却看得到最后的destination.
      这时你应知道这是中间的router CPU太忙或者中间路由器不回送TTL-expired包的原因,不必大惊小怪的。:-)
判断使用何种负载均衡方式,用show ip cef、 show interface ip等命令就能看出来
负载均衡的两种技术,有一种基于目标地址的比较容易造成饿死和撑死,另外一种加上目的端口和和源路由进行hash,就解决了这个问题。好像在后期思科ios加上的
2.关于Ping和Traceroute的扩展选项 源站路由(source routing)
 
---------------------------------------------------------------------------------------------------------------------------------------------------------
下面是traceroute 过程抓包,可以看出traceroute 程序原理:
 
[ricky@ricky]$ traceroute 10.61.0.154
traceroute to 10.61.0.154 (10.61.0.154), 30 hops max, 38 byte packets
 1  10.61.37.1 (10.61.37.1)  0.774 ms  0.707 ms  0.812 ms
 2  10.61.0.154 (10.61.0.154)  0.567 ms  0.574 ms  0.811 ms
 
过程抓包:
 
11:08:39.936078 10.61.37.18.32771 > 10.61.0.154.33435: udp 10 [ttl 1]
11:08:39.936585 10.61.37.1 > 10.61.37.18: icmp: time exceeded in-transit [tos 0xc0]
11:08:39.937294 10.61.37.18.32771 > 10.61.0.154.33436: udp 10 [ttl 1]
11:08:39.937738 10.61.37.1 > 10.61.37.18: icmp: time exceeded in-transit [tos 0xc0]
11:08:39.938010 10.61.37.18.32771 > 10.61.0.154.33437: udp 10 [ttl 1]
11:08:39.938572 10.61.37.1 > 10.61.37.18: icmp: time exceeded in-transit [tos 0xc0]
11:08:39.938836 10.61.37.18.32771 > 10.61.0.154.33438: udp 10
11:08:39.939151 10.61.0.154 > 10.61.37.18: icmp: 10.61.0.154 udp port 33438 unreachable
11:08:39.939521 10.61.37.18.32771 > 10.61.0.154.33439: udp 10
11:08:39.939841 10.61.0.154 > 10.61.37.18: icmp: 10.61.0.154 udp port 33439 unreachable
11:08:39.940102 10.61.37.18.32771 > 10.61.0.154.33440: udp 10
11:08:39.940661 10.61.0.154 > 10.61.37.18: icmp: 10.61.0.154 udp port 33440 unreachable

---------------------------------------------------------------------------------------------------------------------------------------------------

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值