0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

你知道ping命令是如何工作的嗎?

dyquk4xk2p3d ? 來源:稀土掘金技術(shù)社區(qū) ? 2023-05-31 11:40 ? 次閱讀

前幾天一個讀者和我聊天,談起現(xiàn)在的面試,有時候面試官的問題問的真的非常的刁鉆,比如:有一次三面面試官問他:當(dāng)你運(yùn)行 ping xxx 的時候發(fā)生了什么?搞的他一臉懵逼。。。

其實(shí),像這類問題,是最能考查應(yīng)聘者的基礎(chǔ)理論扎不扎實(shí)的。所以,今天民工哥就帶大家一起深入探討一下這個問題。

話不多嘮,直接上干貨?。。。?!

你知道ping命令是如何工作的嗎?

我們用來測試一臺機(jī)器與另一臺機(jī)器的網(wǎng)絡(luò)連通性一般會使用ping命令,那么你知道ping命令是如何工作的嗎?ping命令是基于ICMP協(xié)議工作的。

介紹 ICMP 協(xié)議

因特網(wǎng)控制報文協(xié)議ICMP(Internet Control Message Protocol)是一個差錯報告機(jī)制,其主要用在IP機(jī)器與路由器之間傳遞控制信息,其一般用于報告主機(jī)是否可達(dá)、路由是否可用。

為什么需要 ICMP?

在網(wǎng)絡(luò)數(shù)據(jù)包的傳輸過程中,經(jīng)常會遇到各種各樣的問題,IP協(xié)議提供Best-Effort(盡力而為)的服務(wù),盡力而為的意思是當(dāng)網(wǎng)絡(luò)發(fā)生擁塞的時候,會立刻丟棄網(wǎng)絡(luò)數(shù)據(jù)包,一直到網(wǎng)絡(luò)擁塞現(xiàn)象減輕時。所以經(jīng)常有些數(shù)據(jù)包中途被丟棄,可能還有其他更多的問題,所以需要網(wǎng)絡(luò)數(shù)據(jù)包在出現(xiàn)問題時,機(jī)器向上層協(xié)議報告異常,以便進(jìn)行流量控制和差錯控制,使用ICMP就可以實(shí)現(xiàn)這一功能。

ICMP 的格式

aeb1ea06-fca4-11ed-90ce-dac502259ad0.png

上圖是ICMP的格式,IP數(shù)據(jù)報由IP頭和ICMP報文組成。ICMP報文由8位的類型、8位的代碼、16位的校驗(yàn)和ICMP都數(shù)據(jù)部分組成。

ICMP的數(shù)據(jù)部分根據(jù)類型和代碼不同而不同,如果是請求與響應(yīng)的數(shù)據(jù)包,那么數(shù)據(jù)部分由16位的標(biāo)識符、16位的序號以及數(shù)據(jù)組成。如果是差錯報文,那么數(shù)據(jù)部分由兩個16位的unused部分和IP頭、8字節(jié)的正文組成。

查詢報文

我們的ping命令就是查詢報文,如果一切順利,我們發(fā)送8.echo請求,然后會收到0.echo響應(yīng),這就證明兩機(jī)器之間是連通的。

但是這個數(shù)據(jù)包比原生的ICMP,多了兩個字段——標(biāo)識符、序號。

怎么理解呢?如果你搞過裝修,你應(yīng)該知道建材店之間組成的銷售聯(lián)盟,聯(lián)盟派出去兩撥人,一批是跑業(yè)務(wù)的,一批是做廣告的,都穿著同樣的廣告衫,需要一個標(biāo)識區(qū)分這兩批人。而派出去的人需要編號,如果到了吃午飯的時間,出去跑業(yè)務(wù)的20個人回來一小部分,說明情況不妙,如果全部回來,說明情況很好。

在選項(xiàng)數(shù)據(jù)中,ping 還會存放發(fā)送請求的時間值,來計(jì)算往返時間,說明路程的長短。

差錯報文

我們可以了解下面幾種常見的ICMP差錯報文:

3-目的不可達(dá)

4-原點(diǎn)抑制消息

11-ICMP超時

5-重定向

3-目的不可達(dá)

當(dāng)類型3目的不可達(dá),有以下幾種常見代碼:

aeb8f882-fca4-11ed-90ce-dac502259ad0.png

出現(xiàn)目標(biāo)網(wǎng)絡(luò)不可達(dá)報文的情況是數(shù)據(jù)包到達(dá)路由器,但是路由表中沒有數(shù)據(jù)包中IP地址的網(wǎng)絡(luò)號。

目標(biāo)主機(jī)不可達(dá)報文是路由器中沒有找到目標(biāo)主機(jī)的信息,也有可能是目標(biāo)主機(jī)沒有連接到網(wǎng)絡(luò)。

目標(biāo)協(xié)議不可達(dá)報文情況當(dāng)你給目標(biāo)主機(jī)發(fā)送UDP報文時,目標(biāo)主機(jī)的防火墻禁止UDP協(xié)議數(shù)據(jù)包進(jìn)入,于是ICMP通知目標(biāo)協(xié)議不可達(dá)。

目標(biāo)端口不可達(dá)報文是你的數(shù)據(jù)包要進(jìn)入目標(biāo)主機(jī)的22端口,建立SSH連接,而目標(biāo)主機(jī)的22端口沒有開放,這時候ICMP就會返回目標(biāo)端口不可達(dá)報文給源主機(jī)。

要求分段并設(shè)置DF flag標(biāo)志報文的情況如下:源主機(jī)發(fā)送的IP數(shù)據(jù)包首部的分片禁止標(biāo)志位設(shè)置為1之后,路由器遇到超過MTU大小的數(shù)據(jù)包會直接拋棄,不會分片,然后ICMP給源主機(jī)發(fā)送要求分段并設(shè)置DF flag標(biāo)志報文

4-原點(diǎn)抑制消息

如果網(wǎng)絡(luò)中遇到擁塞,就能向源主機(jī)發(fā)送一個ICMP原點(diǎn)抑制消息,收到該消息的機(jī)器就會增大數(shù)據(jù)包的傳輸間隔。是為原點(diǎn)抑制。

11-ICMP超時

為了限制IP數(shù)據(jù)包在計(jì)算機(jī)網(wǎng)絡(luò)中的存在的時間,我們給數(shù)據(jù)包設(shè)計(jì)一個值TTL,能夠避免IP包在網(wǎng)絡(luò)中的無限循環(huán)和收發(fā),節(jié)省了網(wǎng)絡(luò)資源。

但是為了能使IP包的發(fā)送者能收到告警消息,ICMP開始大顯身手,路由器會發(fā)送一個 ICMP 超時消息給源主機(jī)。

5-重定向

如若路由器發(fā)現(xiàn)源主機(jī)不是使用最優(yōu)路徑發(fā)送數(shù)據(jù),路由器就會發(fā)送重定向消息給源主機(jī)。

ping 的發(fā)送和接收過程

我們使用ping命令去請求同一個子網(wǎng)的目的主機(jī)。

向目的主機(jī)發(fā)送回顯請求

首先,機(jī)器會構(gòu)建一個類型為8、代號為0的Echo請求報文。aeca9eb6-fca4-11ed-90ce-dac502259ad0.png

通過上圖,我們可以了解,ICMP的類型是8,代碼是0等數(shù)據(jù)。

目的服務(wù)器發(fā)送回顯應(yīng)答

aed6991e-fca4-11ed-90ce-dac502259ad0.png

通過比較,我們可以看到在ICMP報文層,Echo請求報文與Echo響應(yīng)報文除了Type、Code(看起來沒變化,其實(shí)含義已經(jīng)不同)發(fā)生變化,其他基本上都是一樣的。

aef87f84-fca4-11ed-90ce-dac502259ad0.png

源主機(jī)顯示相關(guān)信息

af00f0b0-fca4-11ed-90ce-dac502259ad0.png
af10e16e-fca4-11ed-90ce-dac502259ad0.png

發(fā)送回顯請求數(shù)據(jù)包的時間,與接收到回顯應(yīng)答數(shù)據(jù)包的時間差,就能計(jì)算出數(shù)據(jù)包一去一回所需要的時間。

ICMP—Traceroute命令

Traceroute能夠利用ICMP的規(guī)則,故意制造一些產(chǎn)生錯誤的場景。

Traceroute 的第一個作用為故意設(shè)置特殊的 TTL,來追蹤去往目的地時沿途經(jīng)過的路由器。

思路很騷啊~我給你慢慢道來:

先設(shè)置TTL為1,數(shù)據(jù)包到第一個路由器就嗝屁,臨死前把第一個路由器的IP搞到手了。返回時間超時的ICMP差錯報文。

然后設(shè)置TTL為2,數(shù)據(jù)包到第二個路由器嗝屁,臨死前把第二個路由器的IP搞到手。

再設(shè)置TTL為3...

以此類推,直到到達(dá)目的主機(jī),如此就拿到了線路上所有路由器的IP。

那么Traceroute怎么知道自己發(fā)送的UDP包到達(dá)目的主機(jī)呢?

思路也很騷?。。。?/p>

它用不可能出現(xiàn)的值作為UDP的端口號,數(shù)據(jù)報達(dá)到目的主機(jī),就會返回ICMP 差錯報文,類型為端口不可達(dá)。

Traceroute 還有一個作用是故意設(shè)置不分片,從而確定路徑的 MTU。

這個很容易想到啊,一旦返回類型為“需要進(jìn)行分片但設(shè)置了不分片位”的ICMP差錯報文就減小分組長度,直到達(dá)到目的主機(jī),這不就測試出了整個路徑的MTU嗎?

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ICMP
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    14870
  • Ping
    +關(guān)注

    關(guān)注

    0

    文章

    68

    瀏覽量

    15889
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    658

    瀏覽量

    21928
  • 數(shù)據(jù)包
    +關(guān)注

    關(guān)注

    0

    文章

    238

    瀏覽量

    24248
  • 報文
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    4004

原文標(biāo)題:面試官:運(yùn)行 ping xxx 的時候發(fā)生了什么?問倒一大片。。。

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    四個ping命令搞定網(wǎng)絡(luò)故障

    四個ping命令搞定網(wǎng)絡(luò)故障如果的電腦不能上網(wǎng)或者突然不能上網(wǎng)了怎么辦?請專業(yè)人員來維修還是自己瞎急一通呢,下面給大家介紹如何準(zhǔn)確地判斷電腦不能上網(wǎng)問題出在哪里?又如何能快捷地解決這故障?希望下文
    發(fā)表于 04-13 14:24

    巧用Ping和Traceroute命令排除網(wǎng)絡(luò)故障

    在分析Ping 和Traceroute 命令工作原理和影響因素的基礎(chǔ)上,詳細(xì)介紹了使用Ping 和Traceroute 命令檢查網(wǎng)絡(luò)連接性、
    發(fā)表于 08-11 08:25 ?35次下載

    三種不同的“防 Ping”技巧

    三種不同的“防 Ping”技巧 淺析三種不同的“防 Ping”方法   眾所周知,Ping命令是一個非常有用的網(wǎng)絡(luò)命令,大家常用它
    發(fā)表于 04-14 13:53 ?1100次閱讀

    ping命令的使用方法及功能

    ping是Windows、Unix和Linux系統(tǒng)下的一個命令。ping也屬于一個通信協(xié)議,是TCP/IP協(xié)議的一部分。利用“ping命令
    發(fā)表于 11-23 15:22 ?7.2w次閱讀
    <b class='flag-5'>ping</b><b class='flag-5'>命令</b>的使用方法及功能

    DOS-ping和ipconfig命令詳解下載

    DOS-ping和ipconfig命令詳解下載
    發(fā)表于 01-16 16:13 ?3次下載

    ping命令的使用大全(Windows下ping命令的使用)

    ping命令相信大家已經(jīng)再熟悉不過了,但是能把ping的功能發(fā)揮到最大的人卻并不是很多,下面就給大家講一些ping命令的運(yùn)用。
    的頭像 發(fā)表于 02-24 10:29 ?1.4w次閱讀

    ping命令入門詳解

    Ping是潛水艇人員的專用術(shù)語,表示回應(yīng)的聲納脈沖,在網(wǎng)絡(luò)中Ping 是一個十分好用的TCP/IP工具。它主要的功能是用來檢測網(wǎng)絡(luò)的連通情況和分析網(wǎng)絡(luò)速度。 Ping有好的善的一面也有惡的一面。先說
    發(fā)表于 10-06 14:09 ?3242次閱讀

    ping原理及應(yīng)用介紹

    Ping程序的實(shí)質(zhì)是利用了ICMP請求回顯和回顯應(yīng)答報文,但ARP請求和應(yīng)答報文也在其中起了非常重要的作用。 Ping的邏輯過程以從PC1 ping PC2(命令
    發(fā)表于 10-06 14:25 ?8215次閱讀

    ping值和網(wǎng)速有關(guān)系嗎?ping值多少算正常

    PING值--代表的電腦跟服務(wù)器的連接速度,即:客戶端數(shù)據(jù)傳送至服務(wù)器后再將命令反饋到客戶端所需的時長,單位為毫秒(ms),PING值越小速度越快。 主要還要看是用“光纖寬帶”還是
    發(fā)表于 10-06 15:27 ?11.8w次閱讀

    ping是什么?ping背后的邏輯是什么樣的?是如何實(shí)現(xiàn)的?

    我們在遇到網(wǎng)絡(luò)不通的情況,大家都知道ping 一下,看一下網(wǎng)絡(luò)狀況。那你知道ping命令后背的邏輯是什么嗎?
    的頭像 發(fā)表于 10-03 12:25 ?8331次閱讀

    知道linux常用查看硬件設(shè)備信息命令的方法是什么?

    知道linux常用查看硬件設(shè)備信息命令的方法是什么?
    發(fā)表于 05-13 11:04 ?3067次閱讀

    說說PING命令涉及端到端的理論

    任何靠 IT 行業(yè)討飯吃的人,無論在哪個范疇工作,都一定懂得 Ping 這個指令。差不多任何作業(yè)系統(tǒng)都具備 Ping命令,用來做簡單的 Troubleshooting。但究竟
    的頭像 發(fā)表于 01-01 17:26 ?3030次閱讀

    ping命令的作用和原理是什么?

    在測試和部署網(wǎng)絡(luò)通信應(yīng)用時,我們經(jīng)常會遇到網(wǎng)絡(luò)不通的問題。一般都會想到ping一下。那么ping命令的作用和原理到底是什么呢? ping 命令
    的頭像 發(fā)表于 03-18 17:21 ?9402次閱讀

    Ping命令的7個基礎(chǔ)用法

    IT行業(yè)中ping命令經(jīng)常被用到,今天整理了一下關(guān)于網(wǎng)絡(luò)基礎(chǔ)知識中的網(wǎng)絡(luò)命令ping命令在項(xiàng)目中是使用頻率最高的,一般我們用的都是它的基本功
    的頭像 發(fā)表于 10-12 09:16 ?3607次閱讀

    PING命令還能這么用?

    今天和你聊聊PING命令。 一般來說,網(wǎng)工們通常會用它來直接ping ip地址,來測試網(wǎng)絡(luò)的連通情況。 類似這種,ping ip地址或網(wǎng)關(guān),然后pi
    的頭像 發(fā)表于 05-18 16:43 ?941次閱讀
    <b class='flag-5'>PING</b><b class='flag-5'>命令</b>還能這么用?