ping的工作原理&ICMP協議


  ping命令用於判斷與對方網絡是否暢通,ping 是基於ICMP協議工作的。

ICMP協議(互聯網控制報文協議):

ICMP報文:

  ICMP主要的功能:確認 IP 包是否成功送達目標地址;報告發送過程中 IP 包被廢棄的原因;改善網絡設置等。

  ICMP 的通知消息會使用IP進行發送,收到該 ICMP 包的主機分解 ICMP 的首部和數據,得知發生問題的原因。

ICMP報文類型:

查詢報文類型:

  回送消息(回送應答和回送請求)用於進行通信的主機或路由器之間,判斷所發送的數據包是否已經成功到達對端ping 命令就是利用回送消息實現的。

 

差錯報文類型:

  目標不可達消息:

    網絡不可達:IP 地址分為網絡號和主機號,當路由器中的路由器表匹配不到接收方 IP 的網絡號,通過 ICMP 協議以網絡不可達(Network Unreachable)的原因告知主機。

    主機不可達:當路由表中沒有該主機的信息,或者該主機沒有連接到網絡,那么會通過 ICMP 協議以主機不可達(Host Unreachable)的原因告知主機。

    協議不可達:當主機使用 TCP 協議訪問對端主機時,能找到對端的主機了,可是對端主機的防火牆已經禁止 TCP 協議訪問,那么會通過 ICMP 協議以協議不可達的原因告知主機。

 

    端口不可達:當主機訪問對端主機 8080 端口時,這次能找到對端主機了,防火牆也沒有限制,可是發現對端主機沒有進程監聽 8080 端口,那么會通過 ICMP 協議以端口不可達的原因告知主機。

 

    需要進行分片但是設置了不可分片:發送端主機發送 IP 數據報時,將 IP 首部的分片禁止標志位設置為1。根據這個標志位,途中的路由器遇到超過 MTU 大小的數據包時,不會進行分片,而是直接拋棄。通過 ICMP 協議以需要進行分片但是設置了不可分片告知發送端主機。

 

  原點抑制消息:   

    當路由器向低速線路發送數據時,其發送隊列的緩存變為零而無法發送出去時,可以向 IP 包的源地址發送一個 ICMP 原點抑制消息,收到這個消息的主機知道了在整個線路的某一處發生了擁堵的情況,從而增大 IP 包的傳輸間隔,減少網絡擁堵的情況。

    ICMP原點抑制消息的目的就是為了緩和這種擁堵情況

 

  重定向消息:

    如果路由器發現發送端主機使用了「不是最優」的路徑發送數據,那么它會返回一個 ICMP 重定向消息給這個主機,在這個消息中包含了最合適的路由信息和源數據。這主要發生在路由器持有更好的路由信息的情況下。路由器會通過這樣的 ICMP 消息告知發送端,讓它下次發給另外一個路由器。

 

  超時消息:

    IP 包中有一個字段叫做 TTL (Time To Live,生存周期),它的值隨着每經過一次路由器就會減 1,直到減到 0 時該 IP 包會被丟棄,此時,IP 路由器將會發送一個 ICMP 超時消息給發送端主機,並通知該包已被丟棄。設置 IP 包生存周期的主要目的,是為了在路由控制遇到問題發生循環狀況時,避免 IP 包無休止地在網絡上被轉發

 

 

ping的工作過程(同網段):

  ping 命令執行的時候,源主機首先會構建一個 ICMP 回送請求數據包發送給目的主機。ICMP 數據包內包含多個字段,最重要的是兩個:

  • 第一個是類型,對於回送請求消息而言該字段為 8

  • 另外一個是序號,主要用於區分連續 ping 的時候發出的多個數據包。每發出一個請求數據包,序號會自動加 1

  此外,為了能夠計算往返時間 RTT,它會在報文的數據部分插入發送時間。由 ICMP 協議將這個數據包連同IP地址一起交給 IP 層。

  目的主機收到IP數據包以后,將有用的信息提取后交給 ICMP 協議。同時,構建一個 ICMP 回送應答數據包發送出去給主源機 。

  在規定的時候間內,源主機如果沒有接到 ICMP 的應答包,則說明目標主機不可達;如果接收到了 ICMP 回送響應消息,則說明目標主機可達。此時,源主機會檢查,用當前時刻減去該數據包從源主機上發出的時刻,就是 ICMP 數據包的時間延遲。

 

原文鏈接 https://mp.weixin.qq.com/s/leE2DgDOl5z90hG2gG1Urw

 

 

 

 

 

 

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM