linux命令--traceroute

歡迎轉載,轉載請註明原文地址:http://blog.csdn.net/majianfei1023/article/details/51034593


Traceroute程序是一個能更深入探索TCP/IP協議的方便可用的工具。

Traceroute程序可以讓我們看到IP數據報從一臺主機傳到另一臺主機所經過的路由器的IP地址。
Traceroute程序使用ICMP報文和IP首部中的TTL字段(生存週期) 


原理:
程序是利用增加存活時間(TTL)值來實現其功能的。每當數據包經過一個路由器,其存活時間就會減1。當其存活時間是0時,主機便取消數據包,併發送一個ICMP TTL數據包給原數據包的發出者。


程序發出的首3個數據包TTL值是1,之後3個是2,如此類推,它便得到一連串數據包路徑。注意IP不保證每個數據包走的路徑都一樣。


通過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 開啓或關閉數據包的正確性檢驗。






Traceroute的工作原理:
Traceroute程序使用ICMP報文和IP首部中的TTL字段,TTL由發送端初始化,當路由器接收到一份IP數據包,如果TTL字段是0或者1,路由器將該數據包丟棄,並給源主機發一個ICMP“超時”信息。按照這個基本的相應過程,可以猜想traceroute程序的完整過程,首先它發送一份TTL字段爲1的IP數據報給目的主機,處理這個數據報的第一個路由器將TTL值減1,然後丟棄該數據報,並給源主機發送一個ICMP報文,這個報文包含了路由器的IP地址,這樣就得到了第一個路由器的地址,然後,traceroute發送一個TTL爲2的數據報來得到第二個路由器的IP地址,繼續這個過程,直至這個數據報到達目的主機。按照這個原理我們也可以很好的解釋了上面traceroute www.163.com的結果了,即所有顯示的13跳是從我到百度183.134.9.59這個服務器所經過的所有路由器的信息,而且由於網絡是動態變化的,路徑也可能會發生變化,所以如果追蹤同樣的目的IP,發現不同的路徑當屬於正常情況。


有時我們traceroute一臺主機時,會看到有一些行是以星號表示的。出現這樣的情況,可能是防火牆封掉了ICMP的返回信息,所以我們得不到什麼相關的數據包返回數據。如果從某跳開始所有的時間都成了星號,即超時,則網絡故障很有可能就出現在了這一跳。 有時我們在某一網關處延時比較長,有可能是某臺網關比較阻塞,也可能是物理設備本身的原因。


那麼程序如何判斷是否已經到達目的主機了呢?
在Linux下,traceroute程序發送一個UDP數據報給目的主機,但它選擇一個不可能的值作爲UDP端口號(大於30000),使目的主機的任何一個應用程序都不可能使用該端口,因此,當該數據報達到目的主機的時候,目的主機會產生一個“端口不可達”錯誤的ICMP報文,這樣,traceroute程序要做的就是區分接收到的ICMP報文是超時還是端口不可達,從而來區分是路由器還是目的主機。

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