自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

當(dāng) Ping 命令后,背后發(fā)生了什么?

網(wǎng)絡(luò)
對(duì)于 ping命令,想必只要是程序員都知道吧?當(dāng)我們檢查網(wǎng)絡(luò)情況的時(shí)候,先使用的命令肯定是ping命令吧?

 01 概覽

[[274853]]

對(duì)于 ping命令,想必只要是程序員都知道吧?當(dāng)我們檢查網(wǎng)絡(luò)情況的時(shí)候,最先使用的命令肯定是ping命令吧?一般我們用ping查看網(wǎng)絡(luò)情況,主要是檢查兩個(gè)指標(biāo):

  • 第一個(gè)是看看是不是超時(shí)
  • 第二個(gè)看看是不是延遲太高

如果超時(shí)那么肯定是網(wǎng)絡(luò)有問題(禁 ping情況除外);如果延遲太高,網(wǎng)絡(luò)情況肯定也是很糟糕的。

那么對(duì)于 ping命令的原理,ping是如何檢查網(wǎng)絡(luò)的?大家之前有了解嗎?接下來我們來跟著ping命令走一圈,看看ping是如何工作的。

02 環(huán)境準(zhǔn)備和抓包

環(huán)境準(zhǔn)備

抓包工具:Wireshark 準(zhǔn)備兩臺(tái)電腦,進(jìn)行互 ping操作:

  1. A電腦(IP地址: 192.168.2.135/ MAC地址:98:22:EF:E8:A8:87)
  2. B電腦(IP地址: 192.168.2.179/ MAC地址:90:A4:DE:C2:DF:FE)

抓包操作

打開 Wireshark,選取指定的網(wǎng)卡進(jìn)行抓包,進(jìn)行 ping操作,在 A電腦上 ping B電腦的 IP

 

當(dāng) Ping 命令后,背后發(fā)生了什么?

 

抓包情況如下:

 

當(dāng) Ping 命令后,背后發(fā)生了什么?

 

這里先簡(jiǎn)單的介紹下Wireshark的控制面板,這個(gè)面板包含7個(gè)字段,分別是:

  • NO: 編號(hào)
  • Time: 包的時(shí)間戳
  • Source: 源地址
  • Destination: 目標(biāo)地址
  • Protocol: 協(xié)議
  • Length: 包長(zhǎng)度
  • Info: 數(shù)據(jù)包附加信息

03 深入解析

上圖中抓包編號(hào) 54-132顯示的就是整個(gè)ping命令的過程,我們知道ping命令不是依托于 TCP或者 UDP這種傳輸層協(xié)議的,而是依托于ICMP協(xié)議實(shí)現(xiàn)的, 那么什么是ICMP協(xié)議呢?這里簡(jiǎn)單介紹下:

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ù)格式

 

當(dāng) Ping 命令后,背后發(fā)生了什么?

 

根據(jù)上圖我們知道了 ICMP協(xié)議頭包含 4個(gè)字節(jié),頭部主要用來說明類型和校驗(yàn)ICMP報(bào)文。下圖是對(duì)應(yīng)的類型和代碼釋義列表,我們后面分析抓包的時(shí)候會(huì)用到。

當(dāng) Ping 命令后,背后發(fā)生了什么?

簡(jiǎn)單介紹完了 ICMP,那么抓包過程中出現(xiàn)的ARP協(xié)議是什么呢?我們同樣來簡(jiǎn)單解釋下:

ARP協(xié)議

我們知道,在一個(gè)局域網(wǎng)中,計(jì)算機(jī)通信實(shí)際上是依賴于 MAC地址進(jìn)行通信的,那么ARP(AddressResolutionProtocol)的作用就是根據(jù) IP地址查找出對(duì)應(yīng)的 MAC地址。

Ping過程解析

了解了上面的基礎(chǔ)概念后,我們來分析下抓包的數(shù)據(jù),其流程如下:

A 電腦( 192.168.2.135)發(fā)起ping請(qǐng)求,ping192.168.2.179

A 電腦廣播發(fā)起 ARP請(qǐng)求,查詢192.168.2.179的 MAC地址。

B 電腦應(yīng)答 ARP請(qǐng)求,向 A電腦發(fā)起單向應(yīng)答,告訴 A電腦自己的 MAC地址為90:A4:DE:C2:DF:FE

知道了 MAC地址后,開始進(jìn)行真正的 ping請(qǐng)求,由于 B電腦可以根據(jù)A電腦發(fā)送的請(qǐng)求知道 源 MAC地址,所以就可以根據(jù)源 MAC地址進(jìn)行響應(yīng)了。

上面的請(qǐng)求過程我畫成流程圖比較直觀一點(diǎn):

當(dāng) Ping 命令后,背后發(fā)生了什么?

觀察仔細(xì)的朋友可能已經(jīng)發(fā)現(xiàn),Ping 4次請(qǐng)求和響應(yīng)結(jié)束后,還有一次 B電腦對(duì) A電腦的 ARP請(qǐng)求,這是為什么呢?這里我猜測(cè)應(yīng)該是有 2個(gè)原因:

由于 ARP有緩存機(jī)制,為了防止ARP過期,結(jié)束后重新更新下ARP緩存,保證下次請(qǐng)求能去往正確的路徑,如果ARP過期就會(huì)導(dǎo)致出現(xiàn)一次錯(cuò)誤,從而影響測(cè)試準(zhǔn)確性。

由于 ping命令的響應(yīng)時(shí)間是根據(jù)請(qǐng)求包和響應(yīng)包的時(shí)間戳計(jì)算出來的,所以一次 ARP過程也是會(huì)消耗時(shí)間。這里提前緩存最新的ARP結(jié)果就是節(jié)省了下次ping的ARP時(shí)間。

為了驗(yàn)證我們的猜測(cè),我再進(jìn)行一次 ping操作,抓包看看是不是和我們猜測(cè)的一樣。此時(shí),計(jì)算機(jī)里面已經(jīng)有了ARP的緩存,我們執(zhí)行ARP-a看看緩存的arp列表:

當(dāng) Ping 命令后,背后發(fā)生了什么?

我們看看第二次 ping的抓包

當(dāng) Ping 命令后,背后發(fā)生了什么?

我們看到上圖中在真正 ping之前并沒有進(jìn)行一次ARP請(qǐng)求,這也就是說,直接拿了緩存中的ARP來執(zhí)行了,另外當(dāng) B計(jì)算機(jī)進(jìn)行響應(yīng)之前還是進(jìn)行了一次ARP請(qǐng)求,它還是要確認(rèn)下之前的ARP緩存是否為正確的。然后結(jié)束ping操作之后,同樣再發(fā)一次ARP請(qǐng)求,更新下自己的ARP緩存。這里和我們的猜想基本一致。

弄懂了 ping的流程之后我們來解析下之前解釋的ICMP數(shù)據(jù)結(jié)果是否和抓包的一致。我們來點(diǎn)擊一個(gè)ping request看看ICMP協(xié)議詳情

當(dāng) Ping 命令后,背后發(fā)生了什么?

圖中紅框內(nèi)就行 ICMP協(xié)議的詳情了,這里的Type=8,code=0, 校驗(yàn)是正確,且這是一個(gè)請(qǐng)求報(bào)文。我們?cè)冱c(diǎn)擊Responseframe:57,這里說明響應(yīng)報(bào)文在序號(hào)57。詳情如下:

當(dāng) Ping 命令后,背后發(fā)生了什么?

上圖的響應(yīng)報(bào)文, Type=0,code=0,這里知道就是響應(yīng)報(bào)文了,然后最后就是根據(jù)請(qǐng)求和響應(yīng)的時(shí)間戳計(jì)算出來的響應(yīng)延遲。3379.764ms-3376.890ms=2.874ms。

04 總結(jié)

我們分析了一次完整的 ping請(qǐng)求過程,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緩存。

 

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2019-11-12 14:41:41

Redis程序員Linux

2021-12-16 15:58:48

Linux內(nèi)存微軟

2018-03-16 15:31:50

2022-02-15 13:20:28

特斯拉電動(dòng)車

2023-11-02 08:00:00

ClickHouse數(shù)據(jù)庫(kù)

2016-10-15 10:33:14

阿里云降價(jià)云計(jì)算

2025-04-27 08:11:26

2011-03-31 09:20:45

URLDNSWeb應(yīng)用程序

2021-02-25 10:02:32

開機(jī)鍵Linux內(nèi)存

2020-08-17 12:47:07

Mozilla裁員瀏覽器

2023-01-14 16:11:27

瀏覽器URL回車

2024-05-06 10:53:22

瀏覽器TCPHTTPS

2010-02-07 09:00:29

AndroidLinux Kerne

2021-01-18 08:23:23

內(nèi)存時(shí)底層CPU

2021-04-11 10:40:16

Git軟件開發(fā)

2015-07-03 09:27:43

網(wǎng)絡(luò)閏秒

2020-09-01 11:40:01

HTTPJavaTCP

2023-08-29 16:26:20

Linux命令行

2019-09-16 17:16:29

Hadoop數(shù)據(jù)湖數(shù)據(jù)結(jié)構(gòu)

2022-06-03 08:12:52

InnoDB插入MySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)