TraceRoute的工作原理

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), ICMP 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加上的

Linux下traceroute使用心得

问题:
在命令行下输入: 
traceroute www.google.com
屏幕打印是这样的:
traceroute to www.google.com (66.249.89.104), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
没有得到任何中间路由器的信息。

分析:
traceroute的基本原理就是发出TTL字段为1-n的ip包,然后等待路由器的ICMP超时回复,进而记录
下来经过的路由器。通过man traceroute 可以看到,traceroute可以在ip包中放三种数据:
1) 使用UDP包(默认选项是-U)
2)使用TCP包 选项是-T
3)使用ICMP包 选项是-I
而且每个包traceroute都发3次。
分别用-T,-I选项试试。
发现TCP包时候也不行,但是-I选项是有效果的:
 1  10.10.20.1 (10.10.20.1)  3.611 ms * *
 2  * * *
 3  10.10.10.1 (10.10.10.1)  3.590 ms * *
 4  * * *
 5  * * *
 6  * * 61.130.125.25 (61.130.125.25)  10.914 ms

但貌似不是全部的中间路由ip,有些包丢失了。
进一步查看traceroute的选项,有一个-z项,基本意思是设置探测包的发送间隔,默认是0,就是连续发送。设置这个的目的
是因为有些路由器设置了icmp rate limit. 继续研究为什么路由器要设置icmp的发送速率。
google之:原来是为了应付DOS攻击,进而限制端口发出的icmp的速率。

既然清楚了,那就尝试下:
sudo traceroute -I www.google.com -z 0.005 -q 1
traceroute to www.google.com (66.249.89.104), 30 hops max, 60 byte packets
 1  10.10.20.1 (10.10.20.1)  1.914 ms
 2  10.10.20.1 (10.10.20.1)  2.109 ms
 3  10.10.10.1 (10.10.10.1)  1.081 ms
 4  115.238.62.113 (115.238.62.113)  2.468 ms
 5  220.191.158.213 (220.191.158.213)  2.177 ms
 6  61.130.125.25 (61.130.125.25)  2.016 ms
 7  220.191.158.241 (220.191.158.241)  2.419 ms
 8  202.97.55.5 (202.97.55.5)  4.757 ms
 9  202.97.33.14 (202.97.33.14)  5.293 ms
10  202.97.33.2 (202.97.33.2)  5.161 ms
11  202.97.33.5 (202.97.33.5)  4.972 ms
12  202.97.5.138 (202.97.5.138)  41.524 ms
13  209.85.255.80 (209.85.255.80)  53.241 ms
14  209.85.249.195 (209.85.249.195)  68.928 ms
15  72.14.236.126 (72.14.236.126)  52.108 ms
16  66.249.89.104 (66.249.89.104)  48.105 ms

果真可以了。
如果想看具体traceroute发了什么包,路由器返回了什么包,可以用wireshark抓包看看.

linux traceroute追踪路由路径的更多相关文章

  1. Linux基础命令---traceroute追踪路由

    traceroute       traceroute指令输出到目标主机的路由包.Traceroute跟踪从IP网络到给定主机的路由数据包.它利用IP协议的生存时间(TTL)字段,并试图在通往主机的路 ...

  2. Linux基础命令---tracepath追踪路由信息

    tracepath tracepath指令可以追踪数据到达目标主机的路由信息,同时还能够发现MTU值.它跟踪路径到目的地,沿着这条路径发现MTU.它使用UDP端口或一些随机端口.它类似于Tracero ...

  3. traceroute/tracert--获取网络路由路径

    traceroute 是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具.traceroute 的原理是试图以最小的TTL发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网 ...

  4. (转)linux traceroute命令参数及用法详解--linux跟踪路由命令

    linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通 ...

  5. linux dhcp 设置路由及主机名

    自动获取ipDHCP方式获取ip:dhclient [网络接口]释放通过DHCP获取的ip地址:dhclient -r [网络接口]查看网络接口 ifconfig -a(列出所有接口含禁用的) eth ...

  6. windows下追踪路由

    追踪路由 tracert   目标ip/域名 测试两个ip是否畅通 ping    目标ip 在windows查看ip情况 ipconfig linux/unix下查看ip情况的使用 ifconfig

  7. linux网络协议栈--路由流程分析

    转:http://blog.csdn.net/hsly_support/article/details/8797976 来吧,路由 路由是网络的核心,是linux网络协议栈的核心,我们找个入口进去看看 ...

  8. Linux添加主机路由

    Linux添加主机路由:参考:http://zhidao.baidu.com/link?url=50qQ232ZiJqq1iftHvBdPzZh-JlQGi1DZ8wvF-j9dvQYsKiNgc-6 ...

  9. Linux查看软件安装路径

    Linux中查看某 个软件的安装路径(地址)有时显得非常重要.比如某个文件的快速启动项被删除,或者你要建立快速启动项,或者想删除. 添加安装文件等等,很多地方都要用到查案文件安装路径的命令. 这里给大 ...

随机推荐

  1. 我们是Android开发,我们都有着光明的未来

    作为一名程序员经常会逛v2ex论坛,前几天逛着玩的时候忽然发现一篇文章,标题非常吸引眼球名字叫中年危机的终极解法,作为一个步入而立之年的老人,心里非常激动,到底是啥解决法呢,于是迅速点进去查看. 进去 ...

  2. Salesforce Integration 概览(六) UI Update Based on Data Changes(UI自动更新基于数据变更)

    Salesforce用户界面必须由于Salesforce数据的更改而自动更新.这个场景其实在我所经历的项目中用到的不是特别多,因为客户可能直接点击刷新按钮就直接看到了最新的数据,而不是那种一直不刷新然 ...

  3. k8s之数据存储-高级存储

    PV和PVC 前面已经学习了使用NFS提供存储,此时就会要求用户会搭建NFS系统,并且会在yaml配置nf's,由于k8s支持的存储系统有很多,要求客户全部掌握,显然不现实.为了能够屏蔽底层存储实现的 ...

  4. CVPR2021 | 重新思考BatchNorm中的Batch

    ​ 前言 公众号在前面发过三篇分别对BatchNorm解读.分析和总结的文章(文章链接在文末),阅读过这三篇文章的读者对BatchNorm和归一化方法应该已经有了较深的认识和理解.在本文将介绍一篇关于 ...

  5. CNVD-2021-14536 锐捷 RG-UAC 统一上网行为管理审计系统信息泄露漏洞

    漏洞简介 锐捷 RG-UAC 统一上网行为管理审计系统存在信息泄露,攻击者通过网页源代码可间接获取管理用户账号密码,登录管理后台. 漏洞复现 fofa搜索以下关键字 title="RG-UA ...

  6. DVWA-全等级跨站请求伪造

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  7. SQL 练习34

    求每门课程的学生人数 SELECT cid,COUNT(cid) 课程人数 from sc GROUP BY cid

  8. NOIP 模拟 $12\; \text{简单的填数}$

    题解 一个纯的贪心,被我搞成 \(dp\) 了,最后把错解删掉了,骗了 \(10pts\) 考虑如何贪心,设置一种二元组 \((x,l)\),\(x\) 表示当前值,\(l\) 表示当前最长连续长度. ...

  9. java关键字native、static、final详解

    native: native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中.Java语言本身不能对操作系统底层进行访问和操作,但是可 ...

  10. 阿里云rds分区

    SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'xw_user_appl ...