中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

當(dāng)你「ping 一下」的時候,你知道它背后的邏輯嗎?

2019-08-29    來源:IT運維網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

我們在遇到網(wǎng)絡(luò)不通的情況,大家都知道去 ping 一下,看一下網(wǎng)絡(luò)狀況。
 

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

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


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

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

舉一個例子來描述「ping」命令的工作過程:
 

  1. 假設(shè)有兩個主機,主機A(192.168.0.1)和主機B(192.168.0.2),現(xiàn)在我們要監(jiān)測主機A和主機B之間網(wǎng)絡(luò)是否可達,那么我們在主機A上輸入命令:ping 192.168.0.2
  2. 此時,ping命令會在主機A上構(gòu)建一個 ICMP的請求數(shù)據(jù)包(數(shù)據(jù)包里的內(nèi)容后面再詳述),然后 ICMP協(xié)議會將這個數(shù)據(jù)包以及目標IP(192.168.0.2)等信息一同交給IP層協(xié)議。
  3. IP層協(xié)議得到這些信息后,將源地址(即本機IP)、目標地址(即目標IP:192.168.0.2)、再加上一些其它的控制信息,構(gòu)建成一個IP數(shù)據(jù)包。
  4. IP數(shù)據(jù)包構(gòu)建完成后,還不夠,還需要加上MAC地址,因此,還需要通過ARP映射表找出目標IP所對應(yīng)的MAC地址。當(dāng)拿到了目標主機的MAC地址和本機MAC后,一并交給數(shù)據(jù)鏈路層,組裝成一個數(shù)據(jù)幀,依據(jù)以太網(wǎng)的介質(zhì)訪問規(guī)則,將它們傳送出出去。
  5. 當(dāng)主機B收到這個數(shù)據(jù)幀之后,會首先檢查它的目標MAC地址是不是本機,如果是就接收下來處理,接收之后會檢查這個數(shù)據(jù)幀,將數(shù)據(jù)幀中的IP數(shù)據(jù)包取出來,交給本機的IP層協(xié)議,然后IP層協(xié)議檢查完之后,再將ICMP數(shù)據(jù)包取出來交給ICMP協(xié)議處理,當(dāng)這一步也處理完成之后,就會構(gòu)建一個ICMP應(yīng)答數(shù)據(jù)包,回發(fā)給主機A
  6. 在一定的時間內(nèi),如果主機A收到了應(yīng)答包,則說明它與主機B之間網(wǎng)絡(luò)可達,如果沒有收到,則說明網(wǎng)絡(luò)不可達。除了監(jiān)測是否可達以外,還可以利用應(yīng)答時間和發(fā)起時間之間的差值,計算出數(shù)據(jù)包的延遲耗時。


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

二、什么是「 ICMP 」?


我們知道,ping命令是基于ICMP協(xié)議來實現(xiàn)的。那么我們再來看下圖,就明白了ICMP協(xié)議又是通過IP協(xié)議來發(fā)送的,即ICMP報文是封裝在IP包中。
 


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

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

將上圖再細拆一下可見:
 


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


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

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

  • 查詢報文類型
  • 差錯報文類型

 


 

  1. 查詢報文類型:


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

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

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

  1. 差錯報文類型:


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

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

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

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

那是不是只有遇到錯誤的時候才能使用 差錯報文類型 呢?也不一定。
 

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

具體做法就是:
 

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

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

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

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

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

可見Traceroute的原理確實很取巧,很有趣。
 

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

標簽: 運維 

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:為什么說云計算運維是新“貴”?

下一篇:MWC上海 浪潮攜手合作伙伴發(fā)布首款VCO(Virtual Central Office)整體解決方案并成立5G實驗室