1. 程式人生 > >Linux網路命令學習之traceroute

Linux網路命令學習之traceroute

trcertroute建立一個UDP資料包,不斷修改TTL值併發送出去,如果收到”超時錯”,表示剛剛到達的是路由器,而如果收到的是”埠不可達”錯誤,表示剛剛到達的就是目的主機。這樣路由跟蹤完成,程式結束。

通過traceroute我們可以知道資訊從你的計算機到網際網路另一端的主機是走的什麼路徑

traceroute通過傳送小的資料包到目的裝置直到其返回,來測量其需要多長時間。一條路徑上的每個裝置traceroute要測3次。輸出結果中包括每次測試的時間(ms)和裝置的名稱(如有的話)及其IP地址

記錄按序列號從1開始,每個紀錄就是一跳 ,每跳錶示一個閘道器,我們看到每行有三個時間,單位是 ms,其實就是-q的預設引數。探測資料包向每個閘道器傳送三個資料包後,閘道器響應後返回的時間

;如果您用 traceroute -q 4 10.56.10.107,表示向每個閘道器傳送4個數據包。

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

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

10.50 和10.56就是兩個網段

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

Traceroute的工作原理:

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

Traceroute程式的設計是利用ICMP及IP header的TTL(Time To Live)欄位(field)(TTL 就是一條域名在DNS伺服器裡面的存活時間)。首先,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(ICMP 已超時)訊息,因為它已是目的地了,那麼traceroute如何得知目的地到達了呢?

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

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