Linux命令學習手冊-traceroute命令

通過traceroute我們可以知道信息從你的計算機到互聯網另一端的主機是走的什麼路徑。當然每次數據包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。Linux系統中,我們稱之爲traceroute,MS Windows中爲tracert。 traceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其IP地址。

在大多數情況下,我們會在linux主機系統下,直接執行命令行:

traceroute hostname

而在Windows系統下是執行tracert的命令:

tracert hostname

1.命令格式:

traceroute[參數][主機]

2.命令功能:

traceroute指令讓你追蹤網絡數據包的路由途徑,預設數據包大小是40Bytes,用戶可另行設置。

具體參數格式:traceroute [-dFlnrvx][-f<存活數值>][-g<網關>…][-i<網絡界面>][-m<存活數值>][-p<通信端口>][-s<來源地址>][-t<服務類型>][-w<超時秒數>][主機名稱或IP地址][數據包大小]

3.命令參數:

-d 使用Socket層級的排錯功能。

-f 設置第一個檢測數據包的存活數值TTL的大小。

-F 設置勿離斷位。

-g 設置來源路由網關,最多可設置8個。

-i 使用指定的網絡界面送出數據包。

-I 使用ICMP迴應取代UDP資料信息。

-m 設置檢測數據包的最大存活數值TTL的大小。

-n 直接使用IP地址而非主機名稱。

-p 設置UDP傳輸協議的通信端口。

-r 忽略普通的Routing Table,直接將數據包送到遠端主機上。

-s 設置本地主機送出數據包的IP地址。

-t 設置檢測數據包的TOS數值。

-v 詳細顯示指令的執行過程。

-w 設置等待遠端主機回報的時間。

-x 開啓或關閉數據包的正確性檢驗。

4.使用實例:

實例1:traceroute 用法簡單、最常用的用法

命令:

traceroute www.baidu.com 

輸出:

複製代碼
[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
 1  192.168.74.2 (192.168.74.2)  2.606 ms  2.771 ms  2.950 ms
 2  211.151.56.57 (211.151.56.57)  0.596 ms  0.598 ms  0.591 ms
 3  211.151.227.206 (211.151.227.206)  0.546 ms  0.544 ms  0.538 ms
 4  210.77.139.145 (210.77.139.145)  0.710 ms  0.748 ms  0.801 ms
 5  202.106.42.101 (202.106.42.101)  6.759 ms  6.945 ms  7.107 ms
 6  61.148.154.97 (61.148.154.97)  718.908 ms * bt-228-025.bta.net.cn (202.106.228.25)  5.177 ms
 7  124.65.58.213 (124.65.58.213)  4.343 ms  4.336 ms  4.367 ms
 8  202.106.35.190 (202.106.35.190)  1.795 ms 61.148.156.138 (61.148.156.138)  1.899 ms  1.951 ms
 9  * * *
30  * * *
[root@localhost ~]# 
複製代碼

說明:

記錄按序列號從1開始,每個紀錄就是一跳 ,每跳錶示一個網關,我們看到每行有三個時間,單位是 ms,其實就是-q的默認參數。探測數據包向每個網關發送三個數據包後,網關響應後返回的時間;如果您用 traceroute -q 4 www.58.com ,表示向每個網關發送4個數據包

有時我們traceroute 一臺主機時,會看到有一些行是以星號表示的。出現這樣的情況,可能是防火牆封掉了ICMP的返回信息,所以我們得不到什麼相關的數據包返回數據。

有時我們在某一網關處延時比較長,有可能是某臺網關比較阻塞,也可能是物理設備本身的原因。當然如果某臺DNS出現問題時,不能解析主機名、域名時,也會 有延時長的現象;您可以加-n 參數來避免DNS解析,以IP格式輸出數據

如果在局域網中的不同網段之間,我們可以通過traceroute 來排查問題所在,是主機的問題還是網關的問題。如果我們通過遠程來訪問某臺服務器遇到問題時,我們用到traceroute 追蹤數據包所經過的網關,提交IDC服務商,也有助於解決問題;但目前看來在國內解決這樣的問題是比較困難的,就是我們發現問題所在,IDC服務商也不可能幫助我們解決。

 

實例2:跳數設置

命令:

traceroute -m 10 www.baidu.com

輸出:

複製代碼
[root@localhost ~]# traceroute -m 10 www.baidu.com
traceroute to www.baidu.com (61.135.169.105), 10 hops max, 40 byte packets
 1  192.168.74.2 (192.168.74.2)  1.534 ms  1.775 ms  1.961 ms
 2  211.151.56.1 (211.151.56.1)  0.508 ms  0.514 ms  0.507 ms
 3  211.151.227.206 (211.151.227.206)  0.571 ms  0.558 ms  0.550 ms
 4  210.77.139.145 (210.77.139.145)  0.708 ms  0.729 ms  0.785 ms
 5  202.106.42.101 (202.106.42.101)  7.978 ms  8.155 ms  8.311 ms
 6  bt-228-037.bta.net.cn (202.106.228.37)  772.460 ms bt-228-025.bta.net.cn (202.106.228.25)  2.152 ms 61.148.154.97 (61.148.154.97)  772.107 ms
 7  124.65.58.221 (124.65.58.221)  4.875 ms 61.148.146.29 (61.148.146.29)  2.124 ms 124.65.58.221 (124.65.58.221)  4.854 ms
 8  123.126.6.198 (123.126.6.198)  2.944 ms 61.148.156.6 (61.148.156.6)  3.505 ms 123.126.6.198 (123.126.6.198)  2.885 ms
 9  * * *
10  * * *
[root@localhost ~]#
複製代碼

說明:

 

實例3:顯示IP地址,不查主機名

命令:

traceroute -n www.baidu.com

輸出:

複製代碼
[root@localhost ~]# traceroute -n www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
 1  211.151.74.2  5.430 ms  5.636 ms  5.802 ms
 2  211.151.56.57  0.627 ms  0.625 ms  0.617 ms
 3  211.151.227.206  0.575 ms  0.584 ms  0.576 ms
 4  210.77.139.145  0.703 ms  0.754 ms  0.806 ms
 5  202.106.42.101  23.683 ms  23.869 ms  23.998 ms
 6  202.106.228.37  247.101 ms * *
 7  61.148.146.29  5.256 ms 124.65.58.213  4.386 ms  4.373 ms
 8  202.106.35.190  1.610 ms 61.148.156.138  1.786 ms 61.148.3.34  2.089 ms
 9  * * *
30  * * *
[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
 1  211.151.74.2 (211.151.74.2)  4.671 ms  4.865 ms  5.055 ms
 2  211.151.56.57 (211.151.56.57)  0.619 ms  0.618 ms  0.612 ms
 3  211.151.227.206 (211.151.227.206)  0.620 ms  0.642 ms  0.636 ms
 4  210.77.139.145 (210.77.139.145)  0.720 ms  0.772 ms  0.816 ms
 5  202.106.42.101 (202.106.42.101)  7.667 ms  7.910 ms  8.012 ms
 6  bt-228-025.bta.net.cn (202.106.228.25)  2.965 ms  2.440 ms 61.148.154.97 (61.148.154.97)  431.337 ms
 7  124.65.58.213 (124.65.58.213)  5.134 ms  5.124 ms  5.044 ms
 8  202.106.35.190 (202.106.35.190)  1.917 ms  2.052 ms  2.059 ms
 9  * * *
30  * * *
[root@localhost ~]# 
複製代碼

說明:

 

實例4:探測包使用的基本UDP端口設置6888

命令:

traceroute -p 6888 www.baidu.com

輸出:

複製代碼
[root@localhost ~]# traceroute -p 6888 www.baidu.com
traceroute to www.baidu.com (220.181.111.147), 30 hops max, 40 byte packets
 1  211.151.74.2 (211.151.74.2)  4.927 ms  5.121 ms  5.298 ms
 2  211.151.56.1 (211.151.56.1)  0.500 ms  0.499 ms  0.509 ms
 3  211.151.224.90 (211.151.224.90)  0.637 ms  0.631 ms  0.641 ms
 4  * * *
 5  220.181.70.98 (220.181.70.98)  5.050 ms  5.313 ms  5.596 ms
 6  220.181.17.94 (220.181.17.94)  1.665 ms !X * *
[root@localhost ~]# 
複製代碼

說明:

 

實例5:把探測包的個數設置爲值4

命令:

traceroute -q 4 www.baidu.com

輸出:

複製代碼
[root@localhost ~]# traceroute -q 4 www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
 1  211.151.74.2 (211.151.74.2)  40.633 ms  40.819 ms  41.004 ms  41.188 ms
 2  211.151.56.57 (211.151.56.57)  0.637 ms  0.633 ms  0.627 ms  0.619 ms
 3  211.151.227.206 (211.151.227.206)  0.505 ms  0.580 ms  0.571 ms  0.569 ms
 4  210.77.139.145 (210.77.139.145)  0.753 ms  0.800 ms  0.853 ms  0.904 ms
 5  202.106.42.101 (202.106.42.101)  7.449 ms  7.543 ms  7.738 ms  7.893 ms
 6  61.148.154.97 (61.148.154.97)  316.817 ms bt-228-025.bta.net.cn (202.106.228.25)  3.695 ms  3.672 ms *
 7  124.65.58.213 (124.65.58.213)  3.056 ms  2.993 ms  2.960 ms 61.148.146.29 (61.148.146.29)  2.837 ms
 8  61.148.3.34 (61.148.3.34)  2.179 ms  2.295 ms  2.442 ms 202.106.35.190 (202.106.35.190)  7.136 ms
 9  * * * *
30  * * * *
[root@localhost ~]# 
複製代碼

說明:

 

實例6:繞過正常的路由表,直接發送到網絡相連的主機

命令:

 traceroute -r www.baidu.com

輸出:

[root@localhost ~]# traceroute -r www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
connect: 網絡不可達
[root@localhost ~]#  

說明:

 

實例7:把對外發探測包的等待響應時間設置爲3

命令:

traceroute -w 3 www.baidu.com

輸出:

複製代碼
[root@localhost ~]# traceroute -w 3 www.baidu.com
traceroute to www.baidu.com (61.135.169.105), 30 hops max, 40 byte packets
 1  211.151.74.2 (211.151.74.2)  2.306 ms  2.469 ms  2.650 ms
 2  211.151.56.1 (211.151.56.1)  0.621 ms  0.613 ms  0.603 ms
 3  211.151.227.206 (211.151.227.206)  0.557 ms  0.560 ms  0.552 ms
 4  210.77.139.145 (210.77.139.145)  0.708 ms  0.761 ms  0.817 ms
 5  202.106.42.101 (202.106.42.101)  7.520 ms  7.774 ms  7.902 ms
 6  bt-228-025.bta.net.cn (202.106.228.25)  2.890 ms  2.369 ms 61.148.154.97 (61.148.154.97)  471.961 ms
 7  124.65.58.221 (124.65.58.221)  4.490 ms  4.483 ms  4.472 ms
 8  123.126.6.198 (123.126.6.198)  2.948 ms 61.148.156.6 (61.148.156.6)  7.688 ms  7.756 ms
 9  * * *
30  * * *
[root@localhost ~]# 
複製代碼

說明:

 

Traceroute的工作原理:

Traceroute最簡單的基本用法是:traceroute hostname

Traceroute程序的設計是利用ICMP及IP header的TTL(Time To Live)欄位(field)。首先,traceroute送出一個TTL是1的IP datagram(其實,每次送出的爲3個40字節的包,包括源地址,目的地址和包發出的時間標籤)到目的地,當路徑上的第一個路由器(router)收到這個datagram時,它將TTL減1。此時,TTL變爲0了,所以該路由器會將此datagram丟掉,並送回一個「ICMP time exceeded」消息(包括髮IP包的源地址,IP包的所有內容及路由器的IP地址),traceroute 收到這個消息後,便知道這個路由器存在於這個路徑上,接着traceroute 再送出另一個TTL是2 的datagram,發現第2 個路由器…… traceroute 每次將送出的datagram的TTL 加1來發現另一個路由器,這個重複的動作一直持續到某個datagram 抵達目的地。當datagram到達目的地後,該主機並不會送回ICMP time exceeded消息,因爲它已是目的地了,那麼traceroute如何得知目的地到達了呢?

Traceroute在送出UDP datagrams到目的地時,它所選擇送達的port number 是一個一般應用程序都不會用的號碼(30000 以上),所以當此UDP datagram 到達目的地後該主機會送回一個「ICMP port unreachable」的消息,而當traceroute 收到這個消息時,便知道目的地已經到達了。所以traceroute 在Server端也是沒有所謂的Daemon 程式。

Traceroute提取發 ICMP TTL到期消息設備的IP地址並作域名解析。每次 ,Traceroute都打印出一系列數據,包括所經過的路由設備的域名及 IP地址,三個包每次來回所花時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章