ping運作方式

ping運作方式
使用 ping 命令的時候,實際上是送出一個 echo-request( type 8 ) 的 ICMP 封包,如果對方的機器能接收到這個請求,而且願意作出回應,則送回一個 echo-reply( type 0 ) 的 ICMP 封包,當這個回應能順利抵達的時候,那就完成一個 ping 的動作。如果這個 echo-request( type 8 ) 不能到達對方的機器,或是對方回應的 echo-reply( type 0 ) 不能順利送回來,那 ping 就失敗。

何謂TTL(Time To Live)
TTL 的用途在於路徑中的每一路由器在轉送該封包之前, 必須將封包上的 TTL 值至少減去 1, TTL 將成為有效的跳躍區段數目. 當封包上的 TTL 值變為 0 時,路由器會傳回一個 ICMP Time Exceeded 訊息至來源系統上。
ping改變TTL預設值的說明
以windows2003為例,我們可以下ping [–i]參數來改變TTL值,此參數在設定設備所謂封包資料的存活時間(TTL),意指設定本地端到待測目的端所能經過的最大節點數,ping在不加任何參數時TTL值通常設為128~255之間,如果將TTL值變小,例如ping -i 1 www.kimo.com.tw,路由器會傳回一個 ICMP Time Exceeded 訊息。


traceroute運作方式
traceroute利用IP封包中的TTL欄位來探索中繼路由器的存在,每當封包通過一個路由器,TTL值就會被遞減,若路由器發現TTL已經降為0卻還沒達到目的地,那就表示應該丟棄該封包,並傳回一個ICMP Time Exceeded訊息回到發訊的主機;而traceroute則藉此得知中繼路由器的IP位址。然而traceroute要如何知道封包是否抵達目標主機?它使用的方法是traceroute所送出的每一個UDP封包,都包含一個無效的通訊埠編號(30000 以上),由於路由器不會檢查通訊埠編號,只有目標主機才會檢查,因此,如果traceroute收到ICMP Port Unreachable訊息,它就知道那一定是目標主機所回應的。
Traceroute 有一個固定的時間等待響應(ICMP Time Exceeded訊息)。如果這個時間過了,它將印出一系列的*號表明:在這個路徑上,這個設備不能在給定的時間內發出ICMP ICMP Time Exceeded訊息。然後,Traceroute給TTL記數器加1,繼續進行。
舉例說明
1.        首先,tracert 命令會向目標位址送出 UDP 封包且將第一個送出的封包之 TTL 設為 1 。這樣,第一個路由器在處理這個封包的時候,減掉 1 ,並發現 TTL 為 0 ,於是就不處理這個封包,並同時送回一個 ICMP Time Exceeded 訊息。這樣,發送端就知道第一個路由器的IP位址。
2.        當接得到第一個 ICMP 返回的時候,程式會檢查返回主機是否就是目標主機,如果不是,則再送出TTL=2的封包(TTL 比上次增加 1 )。
3.        這樣,第一個路由器接到的封包之 TTL 就不是 0 ,那麼處理完畢後送給下一個節點,同時將 TTL 扣除 1 。這樣,當下一個站收到這個封包,再扣掉 TTL 為 0 ,也會送回 ICMP Time Exceeded訊息,這樣,程式就知道第二個路由器在哪裡了。
4.        然後重覆上一個動作,直到找到目標主機為止,或是追蹤到第30站仍然沒收到ICMP Port Unreachable訊息,traceroute便放棄追蹤。


ping與traceroute的比較
1.        ping是向遠處的主機傳送若干次的echo-request,並等候回答echo-reply,以測試目的主機可到達否。traceroute是逐步由近而遠,對一個一個router逐一以echo-request查詢,以確定是否可到達,直到某一個router無 法到達為止,可用來協助找出問題的所在。
2.        ping未使用到傳輸層(TCP或UDP),但是traceroute有使用到UDP。
3.        ping一秒傳送一個封包,無論它是否收到任何回覆。traceroute 傳送一個封包且等待其回覆或timeout時再傳送一個請求。
創作者介紹

秋八月

秋八月 發表在 痞客邦 PIXNET 留言(0) 人氣()