網絡:簡述使用ping查看網絡情況的過程

一、概覽

當我們檢查網絡情況的時候,最先使用的命令肯定是 ping 命令。一般我們用 ping 查看網絡情況,主要是檢查兩個指標,第一個是看看是不是超時,第二個看看是不是延遲太高。如果超時那麼肯定是網絡有問題啦(禁 ping 情況除外),如果延遲太高,網絡情況肯定也是很糟糕的。那麼對於 ping 命令的原理,以及ping 是如何檢查網絡的?大家之前有了解嗎?接下來簡述 ping 是如何工作的。

二、環境準備和抓包

2.1 環境準備

  1. 抓包工具:本文使用 Wireshark。
  2. 準備兩臺電腦,進行 ping 的操作。
    A 電腦:192.168.1.135 ,MAC 地址:98:22:EF:E8:A8:87
    B 電腦:192.168.2.179 ,MAC 地址:90:A4:DE:C2:DF:FE

2.2 抓包操作

打開 Wireshark,選取指定的網卡進行抓包,進行 ping 操作,在 A 電腦上 ping B 電腦的 ip。
在這裏插入圖片描述
抓包情況如下:
在這裏插入圖片描述

先簡單的介紹下 Wireshark 的控制面板,這個面板包含 7 個字段,分別是:
(1)NO:編號
(2)Time:包的時間戳
(3)Source:源地址
(4)Destination:目標地址
(5)Protocol:協議
(6)Length:包長度
(7)Info:數據包附加信息

三、深入解析

上圖中抓包編號 54-132 顯示的就是整個 ping 命令的過程,我們知道 ping 命令不是依託於 TCP 或者 UDP 這種傳輸層協議的,而是依託於 ICMP 協議實現的,先簡單介紹下ICMP協議:

3.1 ICMP 協議的產生背景

[RFC792] 中說明了 ICMP 產生的原因:由於互聯網之間通訊會涉及很多網關和主機,爲了能夠報告數據錯誤,所以產生了 ICMP 協議。也就是說 ICMP 協議就是爲了更高效的轉發 IP 數據報和提高交付成功的機會。

3.2 ICMP 協議的數據格式

在這裏插入圖片描述
ICMP 協議頭包含 4 個字節,頭部主要用來說明類型和校驗 ICMP 報文。下圖是對應的類型和代碼釋義列表,我們後面分析抓包的時候會用到。
在這裏插入圖片描述

簡單介紹完了 ICMP,那麼抓包過程中出現的 ARP 協議是什麼呢?我們同樣來簡單解釋下:

3.3 ARP 協議

在一個局域網中,計算機通信實際上是依賴於 MAC 地址進行通信的,那麼 ARP(Address Resolution Protocol)的作用就是根據 IP 地址查找出對應 ip 地址的 MAC 地址。

3.4 Ping 過程解析

瞭解了上面的基礎概念後,我們來分析下抓包的數據。圖 b 的流程如下:

(1)A 電腦(192.168.2.135)發起 ping 請求,ping 192.168.2.179。
(2)A 電腦廣播發起 ARP 請求,查詢 192.168.2.179 的 MAC 地址。
(3)B 電腦應答 ARP 請求,向 A 電腦發起單向應答,告訴 A 電腦自己的 MAC 地址爲 90:A4:DE:C2:DF:FE。

知道了 MAC 地址後,開始進行真正的 ping 請求,由於 B 電腦可以根據 A 電腦發送的請求知道源 MAC 地址,所有就可以根據源 MAC 地址進行響應了。

上面的請求過程畫成流程圖比較直觀一點:
在這裏插入圖片描述

觀察仔細的朋友可能已經發現,Ping4 次請求和響應結束後,還有一次 B 電腦對 A 電腦的 ARP 請求,這是爲什麼呢?我們猜測應該是有 2 個原因:

  1. 由於 ARP 有緩存機制,爲了防止 ARP 過期,結束後重新更新下 ARP 緩存,保證下次請求能去往正確的路徑,如果 ARP 過期就會導致出現一次錯誤,從而影響測試準確性。
  2. 由於 ping 命令的響應時間是根據請求包和響應包的時間戳計算出來的,所以一次 ARP 過程也是會消耗時間。這裏提前緩存最新的 ARP 結果就是節省了下次 ping 的 arp 時間。

爲了驗證我們的猜測,我再進行一次 ping 操作,抓包看看是不是和我們猜測的一樣。此時,計算機裏面已經有了 ARP 的緩存,我們執行 ARP -a 看看緩存的 arp 列表:
在這裏插入圖片描述
我們看看第二次 ping 的抓包:
在這裏插入圖片描述
我們看到上圖中在真正 ping 之前並沒有進行一次 ARP 請求,這也就是說,直接拿了緩存中的 arp 來執行了,另外當 B 計算機進行響應之前還是進行了一次 ARP 請求,它還是要確認下之前的 ARP 緩存是否爲正確的。然後結束 ping 操作之後,同樣在發一次 ARP 請求,更新下自己的 ARP 緩存。這裏和我們的猜想基本一致。

弄懂了 ping 的流程之後我們來解析下之前解釋的 ICMP 數據結果是否和抓包的一致。我們來點擊一個 ping request 看看 ICMP 協議詳情:
在這裏插入圖片描述
圖中紅框內就行 ICMP 協議的詳情了,這裏的 Type=8, code=0, 校驗是正確。我們對比就知道了這是一個請求報文。我們再點擊 Response frame:57,這裏說明響應報文在序號 57。詳情如下:
在這裏插入圖片描述

上圖的響應報文,Type=0, code=0。這裏知道就是響應報文了,然後最後就是根據請求和響應的時間戳計算出來的響應延遲。3379.764 ms-3376.890 ms=2.874 ms。

四、總結

通過分析一次完整的 ping 請求過程,我們明白了ping 命令是依託於 ICMP 協議的,ICMP 協議的存在就是爲了更高效的轉發 IP 數據報和提高交付成功的機會。

ping 命令除了依託於 ICMP,在局域網下還要藉助於 ARP 協議,ARP 協議能根據 IP 地址查出計算機 MAC 地址。ARP 是有緩存的,爲了保證 ARP 的準確性,計算機會更新 ARP 緩存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章