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

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

圖6
從這兩幀我們可以看到, 主機(jī)A首先發(fā)送TTL為1的回顯數(shù)據(jù)包,路徑上第一個(gè)路由器A(10.4.152.254)在轉(zhuǎn)發(fā)數(shù)據(jù)包之前將數(shù)據(jù)包上的TTL遞減 1,當(dāng)數(shù)據(jù)包上的TTL減為0時(shí),路由器丟棄該數(shù)據(jù)包,并將“ICMP Time Exceeded”(超時(shí))的消息發(fā)回源主機(jī)A,由此,發(fā)現(xiàn)路徑上的第一個(gè)路由器。
主機(jī)A為了獲得往返延遲時(shí)間的信息,在這一跳發(fā)送了三個(gè)TTL都為1、長(zhǎng)度、目標(biāo)地址相同的報(bào)文(幀1、幀3、幀5),路由器A依次丟棄這三個(gè)報(bào)文,并向主機(jī)A發(fā)送“超時(shí)”消息(幀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ā)送一個(gè)“ICMP Time Exceeded(超時(shí))”數(shù)據(jù)包。
我們看到,Tracert命令將 TTL 遞增1,主機(jī)A發(fā)送TTL值為2的回顯數(shù)據(jù)包,數(shù)據(jù)報(bào)由路由器A轉(zhuǎn)發(fā)至路由器B,由于該數(shù)據(jù)報(bào)的TTL值在第一跳時(shí)被減去了1,因此在到達(dá)路由器B后,TTL值為0。路由器B丟棄該數(shù)據(jù)包,并向主機(jī)A返回“ICMP Time Exceeded(超時(shí))”的報(bào)文,從而獲得路徑上的第二個(gè)路由器信息。同樣主機(jī)A在這里也發(fā)送了相同TTL值的3個(gè)報(bào)文,以獲得平均往返的延遲時(shí)間信息。
幀13 、幀15、幀17:主機(jī)A(10.4.152.16) 發(fā)送TTL值為3的3個(gè)回顯數(shù)據(jù)包。
幀14 、幀16、幀18:主機(jī)B(10.4.153.165)回復(fù)類型為0,代碼為0的3個(gè)ECHO包。
至此,由于主機(jī)A發(fā)出的數(shù)據(jù)包TTL值為3,發(fā)出的數(shù)據(jù)包經(jīng)過兩次轉(zhuǎn)發(fā)后,到達(dá)目的主機(jī)B,主機(jī)B返回ECHO應(yīng)答包,至此實(shí)現(xiàn)主機(jī)A至主機(jī)B的路由跟蹤。
通過以上對(duì)數(shù)據(jù)報(bào)的解析,我們看到Tracert命令通過控制IP報(bào)文的生存期(TTL),實(shí)現(xiàn)路由跟蹤提供路由器到目的地址的每一跳的信息。TTL等于1的ICMP回顯請(qǐng)求報(bào)文被首先發(fā)送,路徑上的第一個(gè)路由器將會(huì)丟棄該報(bào)文并且發(fā)送回ICMP超時(shí)錯(cuò)誤消息的報(bào)文。隨后,Tracert命令的每次發(fā)送過程都將 TTL遞增1,通過檢查中間路由器發(fā)送回的“ICMP Time Exceeded”消息來確定路由。這個(gè)過程將持續(xù)到目標(biāo)響應(yīng)或TTL達(dá)到最大值,從而最終確定故障點(diǎn)或完整的路由路徑。 |
|
【收藏】【打印】【進(jìn)入論壇】 |
|
|
|
|
|
|
|