linux可以ping通,Linux可以Ping通但不能traceroute
今天閑來無事,想弄清楚學校至百度服務器的網絡問題,結果不試不知道,一試嚇一跳。完全出乎我的意料。我們學校的網關是172.21.6.254,172.21.4.254和172.21.7.254。發現可以ping通學校網關,卻不能traceroute。如下圖:
這是為什么?查了一下資料:windows的tracert預設是走ICMP協議,而linux的traceroute則預設走UDP協議,若兩端點之間的UDP connection被任何firewall擋掉, 那 traceroute 就不行了.
原因好像大概知道了,就是有firewall把udp給擋掉了。解決方法:traceroute -I 加I參數改用ICMP協議。即下圖,果然成功了。
可以發現,從我的服務器到達百度服務器經過了21跳。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22traceroute 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呢?
欲知結果如何,還是待我知道以后。
總結
以上是生活随笔為你收集整理的linux可以ping通,Linux可以Ping通但不能traceroute的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux c语言 readline,L
- 下一篇: linux删除文件退出,在Linux中用