Linux可以Ping通但不能traceroute

  • 今天闲来无事,想弄清楚学校至百度服务器的网络问题,结果不试不知道,一试吓一跳。完全出乎我的意料。我们学校的网关是172.21.6.254,172.21.4.254和172.21.7.254。发现可以ping通学校网关,却不能traceroute。如下图:
    image
    image

  • 这是为什么?查了一下资料: windows的tracert预设是走ICMP协议,而linux的traceroute则预设走UDP协议,若两端点之间的UDP connection被任何firewall挡掉, 那 traceroute 就不行了.

  • 原因好像大概知道了,就是有firewall把udp给挡掉了。解决方法:traceroute -I 加I参数改用ICMP协议。即下图,果然成功了。
    可以发现,从我的服务器到达百度服务器经过了21跳。
    image

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    traceroute to baidu.com (123.125.115.110), 30 hops max, 60 byte packets
    1 192.168.1.1 (192.168.1.1) 实验室路由器
    2 172.21.6.254 (172.21.6.254) 学校网关内接口
    3 172.21.200.5 (172.21.200.5) 学校网关外接口
    4 172.30.201.6 (172.30.201.6) 本地局域网
    5 211.71.94.251 (211.71.94.251) 北京市朝阳区 教育网
    6 124.207.38.253 (124.207.38.253) 北京市 鹏博士宽带
    7 * * * (有的就是这么设置,便于隐藏)
    8 10.10.1.1 (10.10.1.1) 4.997 ms 本地局域网
    9 218.241.251.105 (218.241.251.105) 北京市 鹏博士宽带
    10 218.241.253.241 (218.241.253.241) 北京市 鹏博士宽带
    11 218.241.245.181 (218.241.245.181) 北京市 鹏博士宽带
    12 202.99.1.173 (202.99.1.173) 北京市 鹏博士宽带
    13 * * *
    14 * * *
    15 202.106.42.97 (202.106.42.97) 北京市北京市 联通
    16 61.148.154.97 (61.148.154.97) 北京市 联通
    17 * * *
    18 61.148.146.194 (61.148.146.194) 北京市 联通
    19 61.49.168.98 (61.49.168.98) 北京市 联通
    20 * * *
    21 123.125.115.110 (123.125.115.110) 北京市 联通 (百度服务器)
  • 那么我们就来了解一下traceroute的工作原理:Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。Traceroute的原理是非常非常的有意思,它受到目的主机的IP后,首先给目的主机发送一个TTL=1(还记得TTL是什么吗?)的UDP(后面就 知道UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。
    有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较 小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号>30000(真变态)的UDP报,所以到达目的主机的时候,目的 主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了,所以,说Traceroute是一个骗子一点也不为过
    Traceroute程序里面提供了一些很有用的选项,甚至包含了IP选路的选项。

  • 当我以为终于弄懂得时候,我发现还是太年轻了,在windows我又手贱的试了一下,又发现了问题。为什么windows下也能ping通,但不能traceroute呢?
    image

  • 欲知结果如何,还是待我知道以后。

-------------本文结束感谢您的阅读-------------