由Van Jacobson編寫的Traceroute程序是一個能更深入探索TCP/IP協議的方便可用的工具。Traceroute程序可以讓我們看到IP數據報從一臺主機傳到另一臺主機所經過的路由。并且還可以讓我們使用IP源路由選項。
Traceroute程序原理
Traceroute程序使用ICMP報文和IP首部中的TTL(Time To Live)字段(生存周期)。TTL字段是由發送端初始設置一個8 bit字段。每個處理數據報的路由器都需要把TTL的值減1。
TTL字段的目的是防止數據報在選路時無休止地在網絡中流動。例如,當路由器癱瘓或者兩個路由器之間的連接丟失時,選路協議有時會去檢測丟失的路由并一直進行下去。在這段時間內,數據報可能在循環回路被終止。TTL字段就是在這些循環傳遞的數據報上加上一個生存上限。
當路由器接收到一個TTL為0或者1的IP數據報的時候,路由器就不再轉發這個數據了,而直接丟棄,并且發送一個ICMP“超時”信息給源主機。Traceroute程序的關鍵就是這個回顯的ICMP報文的IP報頭的信源地址就是這個路由器的IP地址。同時,如果到達了目的主機,我們并不能知道,于是,Traceroute還同時發送一個UDP信息給目的主機,并且選擇一個很大的值作為UDP的端口(大于30000),使主機的任何一個應用程序都不使用這個端口。所以,當達到目的主機的時候,UDP模塊就產生一個“端口不可到達”的錯誤,這樣就能判斷是否是到達目的地了。
IP源站選路選項
通常IP路由是動態的,即每個路由器都要判斷數據報下面該轉發到哪個路由器。應用程
序對此不進行控制,而且通常也并不關心路由。它采用類似Traceroute程序的工具來發現實際的路由。
源站選路(source routing)的思想是由發送者指定路由。它可以采用以下兩種形式:
• 嚴格的源路由選擇。發送端指明IP數據報所必須采用的確切路由。如果一個路由器發現源路由所指定的下一個路由器不在其直接連接的網絡上,那么它就返回一個“源站路由失敗”的ICMP差錯報文。
• 寬松的源站選路。發送端指明了一個數據報經過的IP地址清單,但是數據報在清單上指明的任意兩個地址之間可以通過其他路由器。
源站路由選項的格式:

圖1:IP首部源站路由選項的通用格式
這個格式與第7章中所示的記錄路由選項格式基本一致。不同之處是,對于源站選路,我們必須在發送IP數據報前填充IP地址清單;而對于記錄路由選項,我們需要為IP地址清
單分配并清空一些空間,并讓路由器填充該清單中的各項。同時,對于源站選路,只要為所
需要的IP地址數分配空間并進行初始化,通常其數量小于9。而對于記錄路由選項來說,必須盡可能地分配空間,以達到9個地址。
對于寬松的源站選路來說, code字段的值是0x83;而對于嚴格的源站選路,其值為0x89。
posted on 2008-06-12 22:46
水 閱讀(2488)
評論(2) 編輯 收藏 引用 所屬分類:
tcp/ip