歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 每天一個Linux命令(49)traceroute命令

每天一個Linux命令(49)traceroute命令

日期:2017/3/3 11:54:16   编辑:Linux技術

[b] traceroute指令讓你追蹤網絡數據包的路由途徑,預設數據包大小是40Bytes。[/b][b] (1)用法:[/b]

[b] 用法: traceroute [參數] [主機][/b] [b] (2)功能:[/b]

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

[/b]

[b] (3)選項參數:[/b] 1) -m       設置檢測數據包的最大存活數值TTL的大小。

2) -n        直接使用IP地址而非主機名稱。 3) -w<超時秒數> 設置等待遠端主機回報的時間

4) -r        忽略普通的Routing Table,直接將數據包送到遠端主機上。 5) -q       設置發送探測包的個數

[b] (4)實例:[/b] 1)[root@localhost sunjimeng]# traceroute www.baidu.com        查詢到百度的站點經過的路徑

[root@localhost sunjimeng]# traceroute www.baidu.com
traceroute to www.baidu.com (14.215.177.37), 30 hops max, 60 byte packets
 1  192.168.142.2 (192.168.142.2)  0.116 ms  0.071 ms  0.132 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
......
30 * * *
注意:

有時我們traceroute一台主機時,會看到有一些行是以星號表示的。出現這樣的情況,可能是防火牆封掉了ICMP的返回信息,所以我們得不到什麼相關的數據包返回數據。 2)[root@localhost sunjimeng]# traceroute -q 4 www.baidu.com      把探測包的個數設置為值4(默認是三次)

[root@localhost sunjimeng]# traceroute -q 4 www.baidu.com
traceroute to www.baidu.com (14.215.177.38), 30 hops max, 60 byte packets
 1  192.168.142.2 (192.168.142.2)  0.114 ms  0.143 ms  0.103 ms  0.135 ms
 2  * * * *
 3  * * * *
 4  * * * *
 5  * * * *
......
30 * * * *
3)[root@localhost sunjimeng]# traceroute -n www.baidu.com       顯示IP地址,不查主機名

[root@localhost sunjimeng]# traceroute -n www.baidu.com
traceroute to www.baidu.com (14.215.177.38), 30 hops max, 60 byte packets
 1  192.168.142.2  0.151 ms  0.107 ms  0.060 ms              
 2  * * *
 3  * * *
 4  * * *
 5  * * *
......
30 * * *
注意:

  有時我們在某一網關處延時比較長,有可能是某台網關比較阻塞,也可能是物理設備本身的原因。當然如果某台DNS出現問題時,不能解析主機名、域名時,也會 有延時長的現象;您可以加-n參數來避免DNS解析,以IP格式輸出數據。 4)[root@localhost sunjimeng]# traceroute -m 5 www.baidu.com      設置跳數

[root@localhost sunjimeng]# traceroute -m 5 www.baidu.com
traceroute to www.baidu.com (14.215.177.38), 5 hops max, 60 byte packets
 1  192.168.142.2 (192.168.142.2)  0.100 ms  0.130 ms  0.052 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
[root@localhost sunjimeng]#
5)[root@localhost sunjimeng]# traceroute -r www.baidu.com       繞過正常的路由表,直接發送到與當前主機相連的IP地址

[root@localhost sunjimeng]# traceroute -r www.baidu.com
traceroute to www.baidu.com (14.215.177.38), 30 hops max, 60 byte packets
connect: 網絡不可達
[root@localhost sunjimeng]# traceroute -r 0.0.0.0
traceroute to 0.0.0.0 (0.0.0.0), 30 hops max, 60 byte packets
 1  localhost (127.0.0.1)  0.104 ms  0.012 ms  0.009 ms
[b] (5)其他:[/b]

traceroute的工作原理:

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地址,三個包每次來回所花時間。

windows下的tracert:

  在大多數情況下,我們會在linux主機系統下,直接執行命令行:  traceroute hostname。  而在Windows系統下是執行tracert的命令: tracert hostname。   

Copyright © Linux教程網 All Rights Reserved