1. ICMP是“Internet Control Message Ptotocol”的縮寫。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。
控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。在網絡中經常會使用到ICMP協議。例如經常用於檢查網絡不通的ping命令,這個ping的過程實際上就是ICMP協議工作的過程。還有跟蹤路由的trancert命令也是基於ICMP協議的。
2. ping.exe的原理:向指定的IP地址發送一定長度的數據包,按照約定,若指定IP地址存在的話,會返回同樣大小的數據包,當然,若在特定時間內沒有返回,就是“超時”,會被認為指定的IP地址不存在。由於ping使用的是ICMP協議,有些防火牆軟件會屏蔽ICMP協議,所以有時候ping的結果只能作為參考,ping不通並不一定說明對方IP不存在。
3. ping命令執行過程詳解:
機器A ping 機器B
同一網段
1.ping通知系統建立一個固定格式的ICMP請求數據包
2.ICMP協議打包這個數據包和機器B的IP地址轉交給IP協議層(一組后台運行的進程,與ICMP類似)
3.IP層協議將以機器B的IP地址為目的地址,本機IP地址為源地址,加上一些其他的控制信息,構建一個IP數據包
4.獲取機器B的MAC地址
-
IP層協議通過機器B的IP地址和自己的子網掩碼,發現它跟自己屬同一網絡,就直接在本網絡查找這台機器的MAC。
-
若兩台機器之前有過通信,在機器A的ARP緩存表應該有B機IP與其MAC的映射關系;若沒有,則發送ARP請求廣播,得到機器B的MAC地址,一並交給數據鏈路層
- 數據鏈路層構建一個數據幀,目的地址是IP層傳過來的MAC地址,源地址是本機的MAC地址,再附加一些控制信息,依據以太網的介質訪問規則,將他們傳送出去
-
機器B收到這個數據幀后,先檢查目的地址,和本機MAC地址對比
-
符合,接收。接收后檢查該數據幀,將IP數據包從幀中提取出來,交給本機的IP協議層協議。IP層檢查后,將有用的信息提取交給ICMP協議,后者處理后,馬上構建一個ICMP應答包,發送給主機A,其過程和主機A發送ICMP請求包到主機B類似(這時候主機B已經知道了主機A的MAC地址,不需再發ARP請求);不符合,丟棄。
-
不同網段
-
1.ping通知系統建立一個固定格式的ICMP請求數據包
-
2.ICMP協議打包這個數據包和機器B的IP地址轉交給IP協議層(一組后台運行的進程,與ICMP類似)
-
3.IP層協議將以機器B的IP地址為目的地址,本機IP地址為源地址,加上一些其他的控制信息,構建一個IP數據包
-
4.獲取主機B的MAC地址
IP協議通過計算發現主機B與自己不在同一網段內,就直接交給路由處理,就是將路由的MAC取過來,至於怎么得到路由的MAC地址,和之前一樣,先在ARP緩存表中尋找,找不到可以利用廣播。路由得到這個數據幀之后,再跟主機B聯系,若找不到,就向主機A返回一個超時信息。
4. ping的結果:
1.Request timed out:對方與自己不在同一網段內,通過路由也無法到達;對方已關機,或者網絡上沒有這個地址;對方存在,不過設置了ICMP數據包過濾;錯誤設置IP地址
2.Destination host Unreachable:自己未設定默認路由,對方跟自己不在同已網段。
3.Bad ip address:沒有連接到DNS服務器,無法解析IP,也可能是IP不存在
4.Source quench received:對方或中途服務器繁忙而無法應答
5.Ping 127.0.0.1:如果ping不通,則表明本地址TCP/IP協議不能正常工作