一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

Linux愛好者 ? 來(lái)源:未知 ? 作者:易水寒 ? 2018-10-03 12:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們?cè)谟龅骄W(wǎng)絡(luò)不通的情況,大家都知道去 ping 一下,看一下網(wǎng)絡(luò)狀況。

那你知道「ping」命令后背的邏輯是什么嗎?知道它是如何實(shí)現(xiàn)的嗎?

一、「ping」命令的作用和原理?

簡(jiǎn)單來(lái)說(shuō),「ping」是用來(lái)探測(cè)本機(jī)與網(wǎng)絡(luò)中另一主機(jī)之間是否可達(dá)的命令,如果兩臺(tái)主機(jī)之間ping不通,則表明這兩臺(tái)主機(jī)不能建立起連接。ping是定位網(wǎng)絡(luò)通不通的一個(gè)重要手段。

ping 命令是基于 ICMP 協(xié)議來(lái)工作的,「 ICMP 」全稱為 Internet 控制報(bào)文協(xié)議( Internet Control Message Protocol)。ping 命令會(huì)發(fā)送一份ICMP回顯請(qǐng)求報(bào)文給目標(biāo)主機(jī),并等待目標(biāo)主機(jī)返回ICMP回顯應(yīng)答。因?yàn)镮CMP協(xié)議會(huì)要求目標(biāo)主機(jī)在收到消息之后,必須返回ICMP應(yīng)答消息給源主機(jī),如果源主機(jī)在一定時(shí)間內(nèi)收到了目標(biāo)主機(jī)的應(yīng)答,則表明兩臺(tái)主機(jī)之間網(wǎng)絡(luò)是可達(dá)的。

舉一個(gè)例子來(lái)描述「ping」命令的工作過(guò)程:

假設(shè)有兩個(gè)主機(jī),主機(jī)A(192.168.0.1)和主機(jī)B(192.168.0.2),現(xiàn)在我們要監(jiān)測(cè)主機(jī)A和主機(jī)B之間網(wǎng)絡(luò)是否可達(dá),那么我們?cè)谥鳈C(jī)A上輸入命令:ping 192.168.0.2

此時(shí),ping命令會(huì)在主機(jī)A上構(gòu)建一個(gè) ICMP的請(qǐng)求數(shù)據(jù)包(數(shù)據(jù)包里的內(nèi)容后面再詳述),然后 ICMP協(xié)議會(huì)將這個(gè)數(shù)據(jù)包以及目標(biāo)IP(192.168.0.2)等信息一同交給IP層協(xié)議。

IP層協(xié)議得到這些信息后,將源地址(即本機(jī)IP)、目標(biāo)地址(即目標(biāo)IP:192.168.0.2)、再加上一些其它的控制信息,構(gòu)建成一個(gè)IP數(shù)據(jù)包。

IP數(shù)據(jù)包構(gòu)建完成后,還不夠,還需要加上MAC地址,因此,還需要通過(guò)ARP映射表找出目標(biāo)IP所對(duì)應(yīng)的MAC地址。當(dāng)拿到了目標(biāo)主機(jī)的MAC地址和本機(jī)MAC后,一并交給數(shù)據(jù)鏈路層,組裝成一個(gè)數(shù)據(jù)幀,依據(jù)以太網(wǎng)的介質(zhì)訪問(wèn)規(guī)則,將它們傳送出出去。

當(dāng)主機(jī)B收到這個(gè)數(shù)據(jù)幀之后,會(huì)首先檢查它的目標(biāo)MAC地址是不是本機(jī),如果是就接收下來(lái)處理,接收之后會(huì)檢查這個(gè)數(shù)據(jù)幀,將數(shù)據(jù)幀中的IP數(shù)據(jù)包取出來(lái),交給本機(jī)的IP層協(xié)議,然后IP層協(xié)議檢查完之后,再將ICMP數(shù)據(jù)包取出來(lái)交給ICMP協(xié)議處理,當(dāng)這一步也處理完成之后,就會(huì)構(gòu)建一個(gè)ICMP應(yīng)答數(shù)據(jù)包,回發(fā)給主機(jī)A

在一定的時(shí)間內(nèi),如果主機(jī)A收到了應(yīng)答包,則說(shuō)明它與主機(jī)B之間網(wǎng)絡(luò)可達(dá),如果沒(méi)有收到,則說(shuō)明網(wǎng)絡(luò)不可達(dá)。除了監(jiān)測(cè)是否可達(dá)以外,還可以利用應(yīng)答時(shí)間和發(fā)起時(shí)間之間的差值,計(jì)算出數(shù)據(jù)包的延遲耗時(shí)。

通過(guò)ping的流程可以發(fā)現(xiàn),ICMP協(xié)議是這個(gè)過(guò)程的基礎(chǔ),是非常重要的,因此下面就把ICMP協(xié)議再詳細(xì)解釋一下。

二、什么是「 ICMP 」?

我們知道,ping命令是基于ICMP協(xié)議來(lái)實(shí)現(xiàn)的。那么我們?cè)賮?lái)看下圖,就明白了ICMP協(xié)議又是通過(guò)IP協(xié)議來(lái)發(fā)送的,即ICMP報(bào)文是封裝在IP包中。

IP協(xié)議是一種無(wú)連接的,不可靠的數(shù)據(jù)包協(xié)議,它并不能保證數(shù)據(jù)一定被送達(dá),那么我們要保證數(shù)據(jù)送到就需要通過(guò)其它模塊來(lái)協(xié)助實(shí)現(xiàn),這里就引入的是ICMP協(xié)議。

當(dāng)傳送的IP數(shù)據(jù)包發(fā)送異常的時(shí)候,ICMP就會(huì)將異常信息封裝在包內(nèi),然后回傳給源主機(jī)。

將上圖再細(xì)拆一下可見:

繼續(xù)將ICMP協(xié)議模塊細(xì)拆:

由圖可知,ICMP數(shù)據(jù)包由8bit的類型字段和8bit的代碼字段以及16bit的校驗(yàn)字段再加上選項(xiàng)數(shù)據(jù)組成。

ICMP協(xié)議大致可分為兩類:

查詢報(bào)文類型

差錯(cuò)報(bào)文類型

查詢報(bào)文類型:

查詢報(bào)文主要應(yīng)用于:ping查詢、子網(wǎng)掩碼查詢、時(shí)間戳查詢等等。

上面講到的ping命令的流程其實(shí)就對(duì)應(yīng)ICMP協(xié)議查詢報(bào)文類型的一種使用。在主機(jī)A構(gòu)建ICMP請(qǐng)求數(shù)據(jù)包的時(shí)候,其ICMP的類型字段中使用的是 8 (回送請(qǐng)求),當(dāng)主機(jī)B構(gòu)建ICMP應(yīng)答包的時(shí)候,其ICMP類型字段就使用的是 0 (回送應(yīng)答),更多類型值參考上表。

對(duì) 查詢報(bào)文類型 的理解可參考一下文章最開始講的ping流程,這里就不做贅述。

差錯(cuò)報(bào)文類型:

差錯(cuò)報(bào)文主要產(chǎn)生于當(dāng)數(shù)據(jù)傳送發(fā)送錯(cuò)誤的時(shí)候。

它包括:目標(biāo)不可達(dá)(網(wǎng)絡(luò)不可達(dá)、主機(jī)不可達(dá)、協(xié)議不可達(dá)、端口不可達(dá)、禁止分片等)、超時(shí)、參數(shù)問(wèn)題、重定向(網(wǎng)絡(luò)重定向、主機(jī)重定向等)等等。

差錯(cuò)報(bào)文通常包含了引起錯(cuò)誤的IP數(shù)據(jù)包的第一個(gè)分片的IP首部,加上該分片數(shù)據(jù)部分的前8個(gè)字節(jié)。

當(dāng)傳送IP數(shù)據(jù)包發(fā)生錯(cuò)誤的時(shí)候(例如 主機(jī)不可達(dá)),ICMP協(xié)議就會(huì)把錯(cuò)誤信息封包,然后傳送回源主機(jī),那么源主機(jī)就知道該怎么處理了。

那是不是只有遇到錯(cuò)誤的時(shí)候才能使用 差錯(cuò)報(bào)文類型 呢?也不一定。

Traceroute 就是一個(gè)例外,Traceroute是用來(lái)偵測(cè)源主機(jī)到目標(biāo)主機(jī)之間所經(jīng)過(guò)路由情況的常用工具。Traceroute 的原理就是利用ICMP的規(guī)則,制造一些錯(cuò)誤的事件出來(lái),然后根據(jù)錯(cuò)誤的事件來(lái)評(píng)估網(wǎng)絡(luò)路由情況。

具體做法就是:

Traceroute會(huì)設(shè)置特殊的TTL值,來(lái)追蹤源主機(jī)和目標(biāo)主機(jī)之間的路由數(shù)。首先它給目標(biāo)主機(jī)發(fā)送一個(gè) TTL=1 的UDP數(shù)據(jù)包,那么這個(gè)數(shù)據(jù)包一旦在路上遇到一個(gè)路由器,TTL就變成了0(TTL規(guī)則是每經(jīng)過(guò)一個(gè)路由器都會(huì)減1),因?yàn)門TL=0了,所以路由器就會(huì)把這個(gè)數(shù)據(jù)包丟掉,然后產(chǎn)生一個(gè)錯(cuò)誤類型(超時(shí))的ICMP數(shù)據(jù)包回發(fā)給源主機(jī),也就是差錯(cuò)包。這個(gè)時(shí)候源主機(jī)就拿到了第一個(gè)路由節(jié)點(diǎn)的IP和相關(guān)信息了。

接著,源主機(jī)再給目標(biāo)主機(jī)發(fā)一個(gè) TTL=2 的UDP數(shù)據(jù)包,依舊上述流程走一遍,就知道第二個(gè)路由節(jié)點(diǎn)的IP和耗時(shí)情況等信息了。

如此反復(fù)進(jìn)行,Traceroute就可以拿到從主機(jī)A到主機(jī)B之間所有路由器的信息了。

但是有個(gè)問(wèn)題是,如果數(shù)據(jù)包到達(dá)了目標(biāo)主機(jī)的話,即使目標(biāo)主機(jī)接收到TTL值為1的IP數(shù)據(jù)包,它也是不會(huì)丟棄該數(shù)據(jù)包的,也不會(huì)產(chǎn)生一份超時(shí)的ICMP回發(fā)數(shù)據(jù)包的,因?yàn)閿?shù)據(jù)包已經(jīng)達(dá)到了目的地嘛。那我們應(yīng)該怎么認(rèn)定數(shù)據(jù)包是否達(dá)到了目標(biāo)主機(jī)呢?

Traceroute的方法是在源主機(jī)發(fā)送UDP數(shù)據(jù)包給目標(biāo)主機(jī)的時(shí)候,會(huì)設(shè)置一個(gè)不可能達(dá)到的目標(biāo)端口號(hào)(例如大于30000的端口號(hào)),那么當(dāng)這個(gè)數(shù)據(jù)包真的到達(dá)目標(biāo)主機(jī)的時(shí)候,目標(biāo)主機(jī)發(fā)現(xiàn)沒(méi)有對(duì)應(yīng)的端口號(hào),因此會(huì)產(chǎn)生一份“端口不可達(dá)”的錯(cuò)誤ICMP報(bào)文返回給源主機(jī)。

可見Traceroute的原理確實(shí)很取巧,很有趣。

以上,就是對(duì)ping的基本原理以及ICMP協(xié)議的基本講解了,歡迎大家一起交流。

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

    關(guān)注

    41

    文章

    5631

    瀏覽量

    175871
  • ICMP
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    15290
  • Ping
    +關(guān)注

    關(guān)注

    0

    文章

    69

    瀏覽量

    16441

原文標(biāo)題:當(dāng)你「ping 一下」的時(shí)候,你知道它背后的邏輯嗎?

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    三種不同的“防 Ping”技巧

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

    Ping程序的C語(yǔ)言編程

      大部分人用ping命令只是作為查看另一個(gè)系統(tǒng)的網(wǎng)絡(luò)連接是否正常的一種簡(jiǎn)單方法。在這篇文章中,作者將介紹如何用C語(yǔ)言編寫一個(gè)模擬ping命令功能的程序。   ping
    發(fā)表于 08-18 15:36 ?1189次閱讀

    如何實(shí)現(xiàn)Ping操作_Delphi教程

    Delphi教程如何實(shí)現(xiàn)Ping操作,很好的Delphi學(xué)習(xí)資料。
    發(fā)表于 03-16 14:59 ?5次下載

    ping命令的使用方法及功能

    ping是Windows、Unix和Linux系統(tǒng)下的一個(gè)命令。ping也屬于一個(gè)通信協(xié)議,是TCP/IP協(xié)議的一部分。利用“ping”命令可以檢查網(wǎng)絡(luò)是否連通,可以很好地幫助我們分析和判定網(wǎng)絡(luò)故障。應(yīng)用格式:
    發(fā)表于 11-23 15:22 ?7.3w次閱讀
    <b class='flag-5'>ping</b>命令的使用方法及功能

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

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

    ping命令入門詳解

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

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

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

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

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

    說(shuō)說(shuō)PING命令涉及端到端的理論

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

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

    在測(cè)試和部署網(wǎng)絡(luò)通信應(yīng)用時(shí),我們經(jīng)常會(huì)遇到網(wǎng)絡(luò)不通的問(wèn)題。一般都會(huì)想到ping一下。那么ping命令的作用和原理到底是什么呢? ping 命令是基于 ICMP 協(xié)議來(lái)工作的,要明白ping
    的頭像 發(fā)表于 03-18 17:21 ?1w次閱讀

    嵌入式linux實(shí)現(xiàn)ping域名

    1.前言? ? 編寫這篇文章主要目的如何實(shí)現(xiàn)ping外網(wǎng)域名,前提情況是可以ping外網(wǎng)IP(這里不詳細(xì)說(shuō)明網(wǎng)絡(luò)IP等的配置)2.問(wèn)題重現(xiàn)? ? 首先使用電腦ping www.baid
    發(fā)表于 11-01 17:38 ?11次下載
    嵌入式linux<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>ping</b>域名

    ping和tcp協(xié)議走的網(wǎng)絡(luò)路徑是一的嗎

    一般對(duì)于狀況良好的網(wǎng)絡(luò)來(lái)說(shuō),你能看到它對(duì)應(yīng)的loss丟包率為0%,也就是所謂的能ping通。如果看到丟包率100%,也就是ping不通。
    的頭像 發(fā)表于 09-02 09:34 ?1388次閱讀

    ping和tcp協(xié)議走的網(wǎng)絡(luò)路徑是一的嗎?

    一般對(duì)于狀況良好的網(wǎng)絡(luò)來(lái)說(shuō),你能看到它對(duì)應(yīng)的loss丟包率為0%,也就是所謂的能ping通。如果看到丟包率100%,也就是ping不通。
    的頭像 發(fā)表于 11-03 09:06 ?1441次閱讀

    PING命令還能這么用?

    今天和你聊聊PING命令。 一般來(lái)說(shuō),網(wǎng)工們通常會(huì)用它來(lái)直接ping ip地址,來(lái)測(cè)試網(wǎng)絡(luò)的連通情況。 類似這種,ping ip地址或網(wǎng)關(guān),然后ping通后會(huì)顯示出以上數(shù)據(jù)。 再通過(guò)
    的頭像 發(fā)表于 05-18 16:43 ?1502次閱讀
    <b class='flag-5'>PING</b>命令還能這么用?

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

    我們用來(lái)測(cè)試一臺(tái)機(jī)器與另一臺(tái)機(jī)器的網(wǎng)絡(luò)連通性一般會(huì)使用ping命令,那么你知道ping命令是如何工作的嗎?ping命令是基于ICMP協(xié)議工作的。
    的頭像 發(fā)表于 05-31 11:40 ?1434次閱讀
    你知道<b class='flag-5'>ping</b>命令是如何工作的嗎?