1. 程式人生 > >Ping:ICMP協議的應用

Ping:ICMP協議的應用

       網際網路控制訊息協議(Internet Control Message Protocol,ICMP):是網際網路協議族的核心協議之一。它用於TCP/IP網路中傳送控制訊息,提供可能發生在通訊環境中的各種情況反饋,通過這些資訊,使管理者可以對所發生的情況作出判斷,然後採取適當地措施解決。ICMP依靠IP來完成它的任務,它是IP的主要部分。
       ICMP協議大致分為兩類,一種是查詢報文,一種是差錯報文。查詢報文的主要用途有ping查詢、子網掩碼查詢、時間戳查詢;差錯報文則產生在資料傳送發生錯誤的時候,如Traceroute查詢。

一、ping:查詢報文型別的使用

ping的傳送和接收過程。
在這裡插入圖片描述
       假設主機A的IP地址是192.168.1.1,主機B的IP地址是192.168.1.2,它們都在同一個子網。當你再主機A上執行"ping 192.168.1.2"後,會發生什麼呢?
       ping命令執行的時候,源主機首先會構建一個ICMP請求資料包,ICMP資料包內包含多個欄位。最重要的是兩個,第一個是型別欄位,對於請求資料包而言該欄位為8;另外一個是順序號,主要用於區分連續ping的時候發出的多個數據包。每發出一個請求資料包,順序號會自動加1.為了能夠計算往返時間RTT,它會在報文的資料部分插入傳送時間。
       然後,由ICMP協議將這個資料包連同地址192.168.1.2一起交給IP層。IP層將以192.168.1.2作為目的地址,本機IP地址作為源地址,加上一起其他控制訊息,構建一個IP資料包。
       接下來,加入MAC頭。如果在本地ARP對映表中查找出IP地址192.168.1.2所對應的MAC地址,則可以直接使用;如果沒有,則需要傳送ARP協議查詢MAC地址,獲得MAC地址後,由資料鏈路層構建一個數據幀,目的地址是IP層傳過來的MAC地址,源地址是本機的MAC地址;還要加上一些控制訊息,將他們傳送出去。
       主機B收到這個資料幀後,先檢查它的目的MAC地址,並和本機的MAC地址對比,如符合,則接受,否則丟棄。接收後檢查資料幀,將IP資料包從幀中提取出來,交給本機的IP層。同樣,IP層檢查後,將有用的資訊提取後交給ICMP協議。
       主機B會構建一個ICMP應答包,應答資料包的型別欄位為0,順序號為接收到的請求資料包中的順序號,然後再發送出去給主機A。
       在規定的時間內,源主機如果沒有接到ICMP的應答包,則說明目標主機不可達;如果接收到了ICMP應答包,則說明目標主機可達。此時,源主機會檢查,用當前時刻減去最初從源主機上發出的時刻,就是ICMP資料的延遲時間。
       當不在同一個局域網裡面。如果垮網段的話,還會涉及網管的轉發、路由器的轉發等等。但是對於ICMP的頭來說,是沒有什麼影響的。會影響的是根據目標IP地址,選擇路由的下一跳,還有每經過一個路由器到達一個新的區域網,需要換MAC頭裡面的MAC地址。
       ping使用了ICMP裡面的ECHO REQUEST和ECHO REPLY型別。

二、Traceroute:差錯報文型別的使用

1、Traceroute的第一個作用是故意設定特殊的TTL,來追蹤去往目的地時沿途經過的路由器
2、Traceroute第二個作用是故意設定不分片,從而確定路徑的MTU。