traceroute

traceroute

traceroute(Windows系統下是tracert)命令利用ICMP協議定位您的計算機和目標計算機之間的所有路由器。TTL值可以反映數據包經過的路由器或網關的數量,通過操縱獨立ICMP呼叫報文的TTL值和觀察該報文被拋棄的返回信息,traceroute命令能夠遍歷到數據包傳輸路徑上的所有路由器。

程序原理


程序利用增加存活時間(TTL)值來實現其功能。每當數據包經過一個路由器,其存活時間就會減1。當其存活時間是0時,主機便取消數據包,並傳送一個ICMPTTL數據包給原數據包的發出者。
程序發出的首3個數據包TTL值是1,之後3個是2,如此類推,它便得到一連串數據包路徑。注意IP不保證每個數據包走的路徑都一樣。

程序定義


詳細解釋

它由遍布全球的幾萬區域網和數百萬台計算機組成,並通過用於異構網路的TCP/IP協議進行網間通信。網際網路中,信息的傳送是通過網中許多段的傳輸介質和設備(路由器,交換機,伺服器,網關等等)從一端到達另一端。每一個連接在Internet上的設備,如主機、路由器、接入伺服器等一般情況下都會有一個獨立的IP地址。通過Traceroute我們可以知道信息從你的計算機到網際網路另一端的主機是走的什麼路徑。當然每次數據包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。UNIX系統中,我們稱之為Traceroute,MSWindows中為Tracert。Traceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備Traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其IP地址。

參數說明

1tracert[-d][-hmaximum_hops][-jcomputer-list][-wtimeout]target_name
該診斷實用程序通過向目的地發送具有不同生存時間(TTL)的Internet控制信息協議(ICMP)回應報文,以確定至目的地的路由。路徑上的每個路由器都要在轉發該ICMP回應報文之前將其TTL值至少減1,因此TTL是有效的跳轉計數。當報文的TTL值減少到0時,路由器向源系統發回ICMP超時信息。通過發送TTL為1的第一個回應報文並且在隨後的發送中每次將TTL值加1,直到目標響應或達到最大TTL值,Tracert可以確定路由。通過檢查中間路由器發發回的ICMP超時(imeExceeded)信息,可以確定路由器。注意,有些路由器“安靜”地丟棄生存時間(TLS)過期的報文並且對tracert無效。
參數
-d
指定不對計算機名解析地址。
-hmaximum_hops
指定查找目標的跳轉的最大數目。
-jcomputer-list
指定在computer-list中鬆散源路由。
-wtimeout
等待由timeout對每個應答指定的毫秒數。
target_name
目標計算機的名稱。

工作原理


Traceroute最簡單的基本用法是:traceroutehostname
Traceroute程序的設計是利用ICMP及IPheader的TTL(TimeToLive)欄位(field)。首先,traceroute送出一個TTL是1的IPdatagram(其實,每次送出的為3個40位元組的包,包括源地址,目的地址和包發出的時間標籤)到目的地,當路徑上的第一個路由器(router)收到這個datagram時,它將TTL減1。此時,TTL變為0了,所以該路由器會將此datagram丟掉,並送回一個「ICMPtimeexceeded」消息(包括發IP包的源地址,IP包的所有內容及路由器的IP地址),traceroute收到這個消息后,便知道這個路由器存在於這個路徑上,接著traceroute再送出另一個TTL是2的datagram,發現第2個路由器......traceroute每次將送出的datagram的TTL加1來發現另一個路由器,這個重複的動作一直持續到某個datagram抵達目的地。當datagram到達目的地后,該主機並不會送回ICMPtimeexceeded消息,因為它已是目的地了,那麼traceroute如何得知目的地到達了呢?
Traceroute在送出UDPdatagrams到目的地時,它所選擇送達的portnumber是一個一般應用程序都不會用的號碼(30000以上),所以當此UDPdatagram到達目的地后該主機會送回一個「ICMPportunreachable」的消息,而當traceroute收到這個消息時,便知道目的地已經到達了。所以traceroute在Server端也是沒有所謂的Daemon程式。
Traceroute提取發ICMPTTL到期消息設備的IP地址並作域名解析。每次,Traceroute都列印出一系列數據,包括所經過的路由設備的域名及IP地址,三個包每次來回所花時間。
Traceroute有一個固定的時間等待響應(ICMPTTL到期消息)。如果這個時間過了,它將列印出一系列的*號表明:在這個路徑上,這個設備不能在給定的時間內發出ICMPTTL到期消息的響應。然後,Traceroute給TTL記數器加1,繼續進行。
網關
一般使用Traceroute(或者是Tracert)是基於一台主機的,但是通常您只能知道以手邊的主機為源地址到網際網路路上任意一台在線的主機的路由連接質量以及數據傳輸效率的情況,而使用基於WEB的方式,只要一台主機安裝了特定的CGI程序,用戶就可以通過這台主機運行相關的程序,執行Traceroute的功能。這台主機我們把它叫做Traceroute網關。Traceroute網關可以幫助用戶了解網路的物理與邏輯連接的拓撲情況以及數據傳輸的效率。如果這種網關足夠多,我們就可以方便地了解到各主機之間連接的情況了。
功能
Traceroute最早是由VanJacobson在1988寫出的小程序。當時主要是解決他自己碰到的一些網路的問題。Traceroute是一個正確理解IP網路並了解路由原理的重要工具。他們對負責網路工程技術與系統管理的Webmaster是一個使用方便的程序。
對ISP而言,設立Traceroute網關,將使網路服務提供商幫助用戶建立並維持對服務商服務質量的信心。服務質量高的ISP可以通過設立Traceroute網關,使用戶了解其與網路連接以及數據傳輸的效率。當然,基礎設施差,服務質量低的ISP是比較害怕提供這種服務。因為,這樣用戶可以使用這一工具了解服務商網路連接情況。
在一台主機安裝了相關的Traceroute的CGI程序后,您可以輸入相應的目的主機的IP地址或者名字,就可以得到相關的數據。
命令參數
Traceroute的用法為:Traceroute[options][datasize]
[options]的內容有:
[-n]:顯示的地址是用數字錶示而不是符號
[-v]:長輸出
[-p]:UDP埠設置(預設為33434)
[-q]:設置TTL測試數目(預設為3)
[-t]:設置測包的服務類型
[datasize]:每次測試包的數據位元組長度(預設為38)

程序應用


Traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。前面說到,儘管ping工具也可以進行偵測,但是,因為ip頭的限制,ping不能完全的記錄下所經過的路由器。所以Traceroute正好就填補了這個缺憾。
Traceroute收到目的主機的IP后,首先給目的主機發送一個TTL=1的UDP數據包,而經過的第一個路由器收到這個數據包以後,就自動把TTL減1,而TTL變為0以後,路由器就把這個包給拋棄了,並同時產生一個主機不可達的ICMP數據報給主機。主機收到這個數據報以後再發一個TTL=2的UDP數據報給目的主機,然後刺激第二個路由器給主機發ICMP數據報。如此往複直到到達目的主機。這樣,traceroute就拿到了所有的路由器ip。從而避開了ip頭只能記錄有限路由IP的問題。