解讀路由器實用程序Tracert命令之?dāng)?shù)據(jù)報解析
數(shù)據(jù)報(被捕獲的)中,我們可以看到Tracert命令是如何使用IP生存時間(TTL)字段和ICMP錯誤消息,確定一個主機(jī)到網(wǎng)絡(luò)上其他主機(jī)的路由。IP包頭的TTL(Time to Live)字段,是由發(fā)送端初始設(shè)置的一個8bit字段,它指出數(shù)據(jù)包的有效時間,即生存周期。每個處理數(shù)據(jù)報的路由器都需要把TTL值減1或減去數(shù)據(jù)報在路由器中的停留秒數(shù)。
由于大多數(shù)的路由器轉(zhuǎn)發(fā)數(shù)據(jù)報的時延都小于1秒鐘,因此TTL最終成為一個跳站的計數(shù)器,按照ICMP協(xié)議的有關(guān)規(guī)定,當(dāng)路由器收到一份數(shù)據(jù)報,如果其TTL字段是0或1,則路由器丟棄該數(shù)據(jù)報,并給源主機(jī)發(fā)送一份ICMP“超時”信息。Tracert命令正是據(jù)此發(fā)現(xiàn)路由器、確定路由的。
下面我們來對數(shù)據(jù)包逐幀解析,體會Tracert命令的工作過程。
幀1:主機(jī)A(10.4.152.16)向主機(jī)B(10.4.153.165)發(fā)送一個信息類型為8,代碼為0的ECHO請求包。IP包頭的TTL值為1,如圖5所示。

圖5
幀2:由于目的主機(jī)在另一個網(wǎng)段,因此數(shù)據(jù)包被發(fā)往本地網(wǎng)關(guān)路由器A(10.4.152.254),路由器A收到主機(jī)A發(fā)來的的ECHO請求包后,返回了一個一個類型為11,代碼為0的ICMP包?;貜?fù)“超時”(Time to live exceeded in transit),如圖6所示。

圖6
從這兩幀我們可以看到, 主機(jī)A首先發(fā)送TTL為1的回顯數(shù)據(jù)包,路徑上第一個路由器A(10.4.152.254)在轉(zhuǎn)發(fā)數(shù)據(jù)包之前將數(shù)據(jù)包上的TTL遞減 1,當(dāng)數(shù)據(jù)包上的TTL減為0時,路由器丟棄該數(shù)據(jù)包,并將“ICMP Time Exceeded”(超時)的消息發(fā)回源主機(jī)A,由此,發(fā)現(xiàn)路徑上的第一個路由器。
主機(jī)A為了獲得往返延遲時間的信息,在這一跳發(fā)送了三個TTL都為1、長度、目標(biāo)地址相同的報文(幀1、幀3、幀5),路由器A依次丟棄這三個報文,并向主機(jī)A發(fā)送“超時”消息(幀2、幀4、幀6)。
幀7:主機(jī)A(10.4.152.16)向目標(biāo)主機(jī)B(10.4.153.165)發(fā)送TTL值為2的回顯數(shù)據(jù)包。
幀8:路由器B(10.4.147.82)路由器B向源主機(jī)(主機(jī)A)發(fā)送一個“ICMP Time Exceeded(超時)”數(shù)據(jù)包。
我們看到,Tracert命令將 TTL 遞增1,主機(jī)A發(fā)送TTL值為2的回顯數(shù)據(jù)包,數(shù)據(jù)報由路由器A轉(zhuǎn)發(fā)至路由器B,由于該數(shù)據(jù)報的TTL值在第一跳時被減去了1,因此在到達(dá)路由器B后,TTL值為0。路由器B丟棄該數(shù)據(jù)包,并向主機(jī)A返回“ICMP Time Exceeded(超時)”的報文,從而獲得路徑上的第二個路由器信息。同樣主機(jī)A在這里也發(fā)送了相同TTL值的3個報文,以獲得平均往返的延遲時間信息。
幀13 、幀15、幀17:主機(jī)A(10.4.152.16) 發(fā)送TTL值為3的3個回顯數(shù)據(jù)包。
幀14 、幀16、幀18:主機(jī)B(10.4.153.165)回復(fù)類型為0,代碼為0的3個ECHO包。
至此,由于主機(jī)A發(fā)出的數(shù)據(jù)包TTL值為3,發(fā)出的數(shù)據(jù)包經(jīng)過兩次轉(zhuǎn)發(fā)后,到達(dá)目的主機(jī)B,主機(jī)B返回ECHO應(yīng)答包,至此實現(xiàn)主機(jī)A至主機(jī)B的路由跟蹤。
通過以上對數(shù)據(jù)報的解析,我們看到Tracert命令通過控制IP報文的生存期(TTL),實現(xiàn)路由跟蹤提供路由器到目的地址的每一跳的信息。TTL等于1的ICMP回顯請求報文被首先發(fā)送,路徑上的第一個路由器將會丟棄該報文并且發(fā)送回ICMP超時錯誤消息的報文。隨后,Tracert命令的每次發(fā)送過程都將 TTL遞增1,通過檢查中間路由器發(fā)送回的“ICMP Time Exceeded”消息來確定路由。這個過程將持續(xù)到目標(biāo)響應(yīng)或TTL達(dá)到最大值,從而最終確定故障點或完整的路由路徑。
路由器實用程序Tracert命令的數(shù)據(jù)包的捕獲的模塊就為大家介紹完了,希望大家通過以上的闡述能夠有所收獲,更多精彩的內(nèi)容請看:解讀路由器實用程序Tracert命令之?dāng)?shù)據(jù)包的捕獲
【編輯推薦】


2010-08-04 10:26:24
2011-05-27 15:24:28




