一般來說,用 ping查看網(wǎng)絡(luò)情況,主要是檢查兩個(gè)指標(biāo):
第一個(gè)是看看是不是超時(shí)
第二個(gè)看看是不是延遲太高
如果超時(shí)那么肯定是網(wǎng)絡(luò)有問題(禁 ping情況除外),如果延遲太高,網(wǎng)絡(luò)情況肯定也是很糟糕的。
ping是如何檢查網(wǎng)絡(luò)的?
ping背后的原理到底是啥樣的?
這篇文章就帶著你,來跟著 ping命令走一圈,看看 ping是如何工作的
環(huán)境準(zhǔn)備和抓包
環(huán)境準(zhǔn)備
抓包工具:Wireshark 準(zhǔn)備兩臺(tái)電腦,進(jìn)行互 ping操作:
A電腦(IP地址:192.168.2.135 / MAC地址:98EFA8:87)
B電腦(IP地址:192.168.2.179 / MAC地址:90DEDF:FE)
抓包操作
打開 Wireshark,選取指定的網(wǎng)卡進(jìn)行抓包,進(jìn)行 ping操作,在 A電腦上 ping B電腦的 IP。
抓包情況如下:
這里先簡單的介紹下Wireshark的控制面板,這個(gè)面板包含7個(gè)字段,分別是:
NO: 編號(hào)
Time: 包的時(shí)間戳
Source: 源地址
Destination: 目標(biāo)地址
Protocol: 協(xié)議
Length: 包長度
Info: 數(shù)據(jù)包附加信息
深入解析
上圖中抓包編號(hào) 54-132 顯示的就是整個(gè) ping命令的過程,我們知道 ping命令不是依托于 TCP或者 UDP這種傳輸層協(xié)議的,而是依托于 ICMP協(xié)議實(shí)現(xiàn)的, 那么什么是 ICMP 協(xié)議呢?這里簡單介紹下:
ICMP協(xié)議的產(chǎn)生背景
[RFC792]中說明了 ICMP產(chǎn)生的原因:
由于互聯(lián)網(wǎng)之間通訊會(huì)涉及很多網(wǎng)關(guān)和主機(jī),為了能夠報(bào)告數(shù)據(jù)錯(cuò)誤,所以產(chǎn)生了 ICMP協(xié)議。也就是說 ICMP 協(xié)議就是為了更高效的轉(zhuǎn)發(fā) IP數(shù)據(jù)報(bào)和提高交付成功的機(jī)會(huì)。
ICMP協(xié)議的數(shù)據(jù)格式
根據(jù)上圖,你會(huì)知道 ICMP協(xié)議頭包含 4個(gè)字節(jié),頭部主要用來說明類型和校驗(yàn) ICMP報(bào)文。
下圖是對應(yīng)的類型和代碼釋義列表,后面分析抓包的時(shí)候會(huì)用到。
簡單介紹完了 ICMP,那么抓包過程中出現(xiàn)的 ARP協(xié)議是什么呢?同樣來簡單解釋下:
ARP協(xié)議
我們知道,在一個(gè)局域網(wǎng)中,計(jì)算機(jī)通信實(shí)際上是依賴于 MAC地址進(jìn)行通信的,那么 ARP( AddressResolutionProtocol)的作用就是根據(jù) IP地址查找出對應(yīng)的 MAC地址。
Ping過程解析
了解了上面的基礎(chǔ)概念后,我們來分析下抓包的數(shù)據(jù),其流程如下:
A 電腦( 192.168.2.135)發(fā)起 ping請求, ping192.168.2.179
A 電腦廣播發(fā)起 ARP請求,查詢 192.168.2.179的 MAC地址
B 電腦應(yīng)答 ARP請求,向 A電腦發(fā)起單向應(yīng)答,告訴 A電腦自己的 MAC地址為 90DEDF:FE
知道了 MAC地址后,開始進(jìn)行真正的 ping請求,由于 B電腦可以根據(jù)A電腦發(fā)送的請求知道 源 MAC地址,所以就可以根據(jù)源 MAC地址進(jìn)行響應(yīng)了
上面的請求過程我畫成流程圖比較直觀一點(diǎn):
觀察仔細(xì)的朋友,可能已經(jīng)發(fā)現(xiàn),Ping 4次請求和響應(yīng)結(jié)束后,還有一次 B電腦對 A電腦的 ARP請求,這是為什么?
這里我猜測應(yīng)該是有 2個(gè)原因:
由于 ARP有緩存機(jī)制,為了防止 ARP過期,結(jié)束后重新更新下 ARP緩存,保證下次請求能去往正確的路徑,如果 ARP過期就會(huì)導(dǎo)致出現(xiàn)一次錯(cuò)誤,從而影響測試準(zhǔn)確性。
由于 ping命令的響應(yīng)時(shí)間是根據(jù)請求包和響應(yīng)包的時(shí)間戳計(jì)算出來的,所以一次 ARP過程也是會(huì)消耗時(shí)間。這里提前緩存最新的 ARP結(jié)果就是節(jié)省了下次 ping的 ARP時(shí)間。
為了驗(yàn)證猜測,我再進(jìn)行一次 ping操作,抓包看看是不是和猜測的一樣。此時(shí),計(jì)算機(jī)里面已經(jīng)有了ARP的緩存,執(zhí)行 ARP-a 看看緩存的arp列表:
看看第二次 ping的抓包:
可以看到,上圖中在真正 ping之前并沒有進(jìn)行一次 ARP請求。
這也就是說,直接拿了緩存中的 ARP來執(zhí)行了,另外當(dāng) B計(jì)算機(jī)進(jìn)行響應(yīng)之前還是進(jìn)行了一次 ARP請求,它還是要確認(rèn)下之前的 ARP緩存是否為正確的。
結(jié)束ping操作之后,同樣再發(fā)一次 ARP請求,更新下自己的 ARP緩存,這里和我們的猜想基本一致。
弄懂了ping的流程之后我們來解析下之前解釋的 ICMP數(shù)據(jù)結(jié)果是否和抓包的一致。
我們來點(diǎn)擊一個(gè) ping request看看 ICMP協(xié)議詳情:
圖中紅框內(nèi)就行 ICMP協(xié)議的詳情了,這里的 Type=8,code=0, 校驗(yàn)是正確,且這是一個(gè)請求報(bào)文。
我們再點(diǎn)擊Responseframe:57,這里說明響應(yīng)報(bào)文在序號(hào) 57。詳情如下:
上圖的響應(yīng)報(bào)文, Type=0,code=0,這里知道就是響應(yīng)報(bào)文了,然后最后就是根據(jù)請求和響應(yīng)的時(shí)間戳計(jì)算出來的響應(yīng)延遲。3379.764ms-3376.890ms=2.874ms。
總結(jié)
你看,上面的文章其實(shí)是分析了一次完整的 ping請求過程。
ping命令是依托于 ICMP協(xié)議的, ICMP協(xié)議的存在就是為了更高效的轉(zhuǎn)發(fā) IP數(shù)據(jù)報(bào)和提高交付成功的機(jī)會(huì)。
ping命令除了依托于 ICMP,在局域網(wǎng)下還要借助于 ARP協(xié)議, ARP協(xié)議能根據(jù) IP地址反查出計(jì)算機(jī)的 MAC地址。
另外 ARP是有緩存的,為了保證 ARP的準(zhǔn)確性,計(jì)算機(jī)會(huì)更新ARP緩存。
-
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
54文章
11163瀏覽量
103423 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7576瀏覽量
88909 -
Ping
+關(guān)注
關(guān)注
0文章
69瀏覽量
15994
原文標(biāo)題:當(dāng)黑客在用 Ping 時(shí),Ping 在偷摸做啥事兒?
文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論