traceroute工作原理

<!-- /* Font Definitions */ @font-face {font-family:宋體; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋體"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋體; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

traceroute 是一個非常好用的用於跟蹤路由包的工具,最基本的用法是 traceroute xxx.xxx.xxx.xxx
這條命令會輸出從本機到指定ip 地址所經過的所有路由節點的ip ,以及一些時間等額外信息。
tranceroute
的實現原理,主要是依賴了ICMP(Internet Control Message Protocol) 協議,該協議 主要用於在網絡中傳遞控制信息,包括一些出錯信息等。協議定義了一些標準錯誤類型,其中有一項爲:
ICMP_TIME_EXCEEDED,
該類型包含兩個子類型:
ICMP_EXC_TTL       
超過TTL
ICMP_EXC_FRAGTIME  
超過片段重組時間

ICMP_EXC_TTL
traceroute 實現的根本基礎,原理如下:
假設A 主機使用traceroute 來跟蹤至E 主機的路由途徑,則A 會發送攜帶ICMP_ECHO (這是ping 命令的實現基礎),且TTL1IP
顯然,路由B 在收到該包時,由於TTL1 ,則拒絕轉發該包,併發送ICMP_EXC_TTL 代碼給源地址。當A 收到該反饋後,會繼續發送ICMP
包,並遞增TTL ,使其加1 ,這樣,則會找到路由表中的下一個路由躍點。以此方法,則可以獲得全部的路由節點。

當然,這種方法返回的路徑並不一定是完全正確,主要是因爲複雜網絡中的一些不可控因素或者動態路由的原因,使得結果不一定100
和實際情況吻合。

 

 

traceroute 工作原理(互聯網)

Traceroute 程序的設計是利用ICMPIP headerTTLTime To Live )欄位(field )。首先,traceroute 送出一個TTL1IP datagram (其實,每次送出的爲340 字節的包,包括源地址,目的地址和包發出的時間標籤)到目的地,當路徑上的第一個路由器(router )收到這個datagram 時,它將TTL1 。此時,TTL 變爲0 了,所以該路由器會將此datagram 丟掉,並送回一個「ICMP time exceeded 」消息(包括髮IP 包的源地址,IP 包的所有內容及路由器的IP 地址),traceroute 收到這個消息後,便知道這個路由器存在於這個路徑上,接着traceroute 再送出另一個TTL2 datagram ,發現第2 個路由器...... traceroute 每次將送出的datagramTTL 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 地址, 三個包每次來回所花時間。

   Traceroute 有一個固定的時間等待響應(ICMP TTL 到期消息) 。如果這個時間過了,它將打印出一系列的* 號表明:在這個路徑上,這個設備不能在給定的時間內發出ICMP TTL 到期消息的響應。然後,TracerouteTTL 記數器加1 ,繼續進行。

 

發佈了303 篇原創文章 · 獲贊 21 · 訪問量 188萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章