這樣就能夠通過構造數據包,來間接檢查到 達一個主機時經過了哪些路由。一開始發送一個TTL為1的包,這樣到達第一個路由器的時候就已經超時了,第一個路由器就發通知說包超時,這樣就能夠記錄下 所經過的第一個路由器的IP。然后TTL加1,安全通過第一個路由器,而第二個路由器的的處理與第一個同樣,丟包,發通知說包超時了,這樣記錄下第二個路 由器IP,由此能夠一直進行下去,直到這個數據包到達目標主機,由此打印出全部經過的路由器。
在通信中,IP層僅僅負責數據的路由與傳 輸,并不處理數據包的內容。比如ICMP,或TCP,UDP,這些協議是依賴IP層的傳輸功能來傳送數據的。在通信兩方的主機中,收到這些協議的數據包 后,一般在通信的相應主機上,會有程序來處理這些數據。而直接的IP數據報是沒實用處的(win2000的驅動層能夠直接使用IP報而不須要加上其它協 議,可是通常是不會這樣用的)。因此traceroute程序發送一個UDP包來試探。對路由器來說,UDP數據報僅僅是IP數據報的一種,它并不關心 UDP數據報的詳細內容。直到這個包到達目的端的主機會,目的主機的內核會解析UDP數據報,并查找數據報中要求port是否已經有進程在使用。假設找到,則 通知進程有數據到達。而假設找不到,則發送一個"目的port不可達"的ICMP錯誤數據回到源主機。
這樣就能夠全然確定下來。 trcertroute建立一個UDP數據包,不斷改動TTL值并發送出去,假設收到"超時錯",表示剛剛到達的是路由器,而假設收到的是"port不可達"錯誤,表示剛剛到達的就是目的主機。這樣路由跟蹤完畢,程序結束。
有幾個細節 :
1.局域網的路由是相對穩定的,因此用traceroute打印出來的響應時間相差不大。而假設用來跟蹤廣域網的路由,因為廣域網的路由信息是動態變化的,并且并不能確定是發送路徑耗時還是返回路徑耗時較多,因此時間與路由信息僅僅能做為參考。
2.TTL 的選擇。假設把TTL設得足夠大,是不是一定能夠打印出全部路由,比方一個數據包經過300個路由器才到達目的端。當然在現有網絡環境下不太可能出現要經 過這么多路由的情況。而TTL信息在IP數據報中僅僅有一個字節,也就是最多能設定到255(256以后又又一次從0開始)。設定這個信息的目的,就是防止一 些僵而不化的數據報在網絡漫上無目的的游蕩而不消失。數據報每經過一個路由器,路由器就把TTL減1(或在該路由器被處理前經過的秒數),總有一個時候會 被減到1,然后路由器會把它丟棄。
3.traceroute的是以收到"port不可達"為標志來結束的。前提是發出的UDP數據報中要求 的port在目的主機上沒有進程在使用。而假設目的主機上正好有進程在使用這個port,接收這個包并按正常方式處理,這樣traceroute就收不到"port不 可達"的錯誤了。為了避免出現這樣的情況,UDP數據報的port非常高(書中的實現是初始值33435,以后每發送一次再加1,port號最大能夠到65535)。 普通程序一般不會使用這些高port。問題是假如真的存在這樣的情況時,traceroute會怎么處理?而好像Solaris系統可能會使用高port,這時又怎 么樣。
4. 在發送過程中,要經過很多的路由,到達目的主機前,可能還要經過網關,防火墻,以及其它比如IDS的過濾,發送包能不能到達目的主機還是個問題。而即使到 達了,發送的ICMP信息能不能返回也是個問題。由于沿途經過的關卡太多,遇上黑洞路由器,不轉發這些信息的話,那就一點辦法也沒有了。
書中還提到原來的traceroute里有一個選項,能夠指定數據包經過的路由器。假設是寬路由,則僅僅要經過指定的路由就可以。而假設是嚴路由,則必須按 指定的順序經過指定的路由器。由于這個選項可能導致某個固定的路由處理信息太多,在發布的源代碼里已經取消了。可是能夠找到補丁,還是能夠用起來的。從比較 的結果看,似乎指定路由器反而不如讓路由器採用默認路由處理得快。而對于嚴路由來說,要成功就要更難一些,由于并不一定你指定的路由器正好有條目到接下來 的路由器。
?
?
除了回顯請求外,還能夠利用icmp來實現時間請求。在icmp的數據包中能夠包括發送時間,目的主機收到后再附上自身當時時間才發回。這樣能夠做一個時間校驗,并能夠推斷源與目的之間的通訊速度。因為詳細的內容部分比較煩,類型太多,一下子記不住各個類型的意思。
一般用ping的時候僅僅是用了它的最簡單的功能:檢查主機能不能連到。事實上使用它所提供的其它選項,能夠實現很多細節上的控制,比如數據包長度,TTL,路由記錄,寬/嚴路由經過路由等。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
