Traceroute程式
Traceroute程式是一個能更深入探索TCP/IP協議的方便可用的工具。主要用途是讓我們看到IP資料包從一臺主機傳到另一臺主機所經過的路由,還可以讓我們使用IP源路由選項。
首先我先介紹個與Traceroute程式有同樣功能的方法:IP記錄路由選項;
IP記錄路由選項(RR):在ip資料包結構中,同樣記錄資料傳輸過程中所經過的路由ip地址;但是
1)並不是所有的路由器都支援記錄路由選項,因此該選項在某些路徑上不能使用(Traceroute程式不需要中間路由器具備任何特殊的或可選的功能)。
2)記錄路由一般是單向的選項。傳送端設定了該選項,那麼接收端不得不從收到的IP首部中提取出所有的資訊,然後全部返回給傳送端。如果把接收到的RR清單返回,但是這樣使得記錄下來的IP地址翻了一番(一來一回),這樣做會受到一些限制。
3)IP首部中留給選項的空間有限,不能存放當前大多數的路徑。在IP首部選項欄位中最多隻能存放9個IP地址。在原先的ARPANET中這是足夠的,但是對現在來說是遠遠不夠的。
所以一般我們都是採用Traceroute程式;
Tr aceroute程式使用ICMP報文和IP首部中的TTL欄位(生存週期)。每個處理資料包的路由器都需要把TTL的值減1或減去資料包在路由器中停留的秒數。由於大多數的路由器轉發資料包的時延都小於1秒鐘,因此TTL最終成為一個跳站的計數器,所經過的每個路由器都將其值減1。當路由器收到一份IP資料包,如果其TTL欄位是0或1,則路由器不轉發該資料包(接收到這種資料包的目的主機可以將它交給應用程式,這是因為不需要轉發該資料包。但是在通常情況下,系統不應該接收TTL欄位為0的資料包)。相反,路由器將該資料包丟棄,並給信源機發一份ICMP“超時”資訊。Traceroute程式的關鍵在於包含這份ICMP資訊的IP報文的信源地址是該路由器的IP地址。
最終我們來看一下Traceroute程式的操作過程;
1)它傳送一份TTL欄位為1的IP資料包給目的主機。處理這份資料包的第一個路由器將TTL值減1,丟棄該資料包,併發回一份超時ICMP報文。這樣就得到了該路徑中的第一個路由器的地址。
2)然後Traceroute程式傳送一份TTL值為2的資料包,這樣我們就可以得到第二個路由器的地址。
3)繼續這個過程直至該資料包到達目的主機。
*)但是目的主機哪怕接收到TTL值為1的IP資料包,也不會丟棄該資料包併產生一份超時ICMP報文,這是因為資料包已經到達其最終目的地。那麼我們該如何判斷是否已經到達目的主機了呢?
4)Traceroute程式傳送一份UDP資料包給目的主機,但它選擇一個不可能的值作為UDP埠號(大於30 000),使目的主機的任何一個應用程式都不可能使用該埠。因為,當該資料包到達時,將使目的主機的UDP模組產生一份“埠不可達”錯誤的ICMP報文。這樣,Traceroute程式所要做的就是區分接收到的ICMP報文是超時還是埠不可達,以判斷什麼時候結束。
Traceroute程式必須可以為傳送的資料包設定TTL欄位。並非所有與TCP/IP介面的程式都支援這項功能,同時並非所有的實現都支援這項能力,但目前大部分系統都支援這項功能,並可以執行Traceroute程式。這個程式介面通常要求使用者具有超級使用者許可權,這意味著它可能需要特殊的許可權以在你的主機上執行該程式。
該文章大部分段落取材於《TCP/IP詳解 卷1:協議》
相關文章
- tracert/traceroute原理
- [Bash] ping netstat & traceroute Command
- traceroute命令的用法例項分享
- Linux基礎命令---traceroute追蹤路由Linux路由
- 在 iOS 平臺實現Ping 和 tracerouteiOS
- Linux——程式建立、程式終止、程式等待、程式程式替換Linux
- 子程式、孤兒程式,殭屍程式, init程式
- 程式——父子程式共享
- python併發程式設計之程式1(守護程式,程式鎖,程式佇列)Python程式設計佇列
- Perl程式:殭屍程式和孤兒程式
- 小程式開發,小程式代理,小程式加盟,小程式創業創業
- 程式-程式-執行緒執行緒
- 小程式5:FTP程式FTP
- iPhone程式本地程式支援iPhone
- 智慧城市同城小程式程式 附帶前端程式前端
- 作業系統系列----程式與程式 程式的描述作業系統
- Python 中子程式與父程式Python
- 無程式碼程式設計程式設計
- 殭屍程式,孤兒程式
- [python] 多程式程式設計Python程式設計
- 程式等待和程式替換
- 《程式碼大全》程式碼生成
- Python多程式程式設計Python程式設計
- 小程式3:ATM小程式
- windows核心程式設計--程式Windows程式設計
- fork、父程式和子程式
- python程式碼打包exe程式Python
- Linux:程式模型和程式管理Linux模型
- linux 檢視程式 kill程式Linux
- Qt啟動子程式,子程式關閉時通知主程式,實現主程式對子程式的管理QT
- Linux系統程式設計——特殊程式之孤兒程式Linux程式設計
- 控制程式碼表篇——程式控制程式碼表
- 程式
- 小程式程式碼打包處理
- Python網路程式設計——程式Python程式設計
- Python編寫守護程式程式Python
- ‘程式語言‘ ’程式設計工具’程式設計
- 入門程式碼程式設計程式設計