網際報文控制協議ICMP:網絡時間的偵察兵

當我們想測試兩臺主機之間連通性時,經常會使用ping命令來驗證。但你知道該命令和icmp協議之間有什么關聯嗎?

ICMP即網際報文控制協議,是用來報告差錯情況以及相關錯誤信息的。icmp數據報文是封裝在ip數據報的中,作為其數據部分。但是,和ip協議一樣,icmp也屬于網絡層的協議。下圖是icmp報文格式圖:

網際報文控制協議ICMP:網絡時間的偵察兵

ICMP報文種類

ICMP報文總的分為兩大類,分別為差錯報告報文以及詢問報文。

差錯報告報文主要有以下幾種:

終點不可達(類型值為3):當主機或路由器不能交付數據時,就向源點發送該報文。

超時(類型值為11):當IP數據報中TTL值為0時,或在指定時間內沒有成功交付,那么就向源點發送超時報文。

參數問題(類型值為12):當收到的數據報首部中有不正確的字段時,就丟棄你該數據包,并向源點發送參數問題報文。

重定向(類型值為5):當路由器收到報文時,知道該目的地址應該從別的路由器轉發會更高效,那么當它轉發完這次分組后,也對源點發送重定向報文。那么下次同樣的目的地址的數據報,就會從另一個路由器走了。

接著,我們再來看詢問報文,主要就一類:回應請求報文(類型值為8)和回答報文(類型值為0),收到回應請求報文的主機必須返回回答報文。

ICMP的一個應用:ping命令

在了解了ICMP的一些知識后,我們來看看一個應用ICMP的實例——ping命令。不僅linux系統上有該命令,windows系統也有該命令

ping?baidu.com  正在?Ping?baidu.com?[220.181.38.148]?具有?32?字節的數據: 來自?220.181.38.148?的回復:?字節=32?時間=32ms?TTL=52 來自?220.181.38.148?的回復:?字節=32?時間=29ms?TTL=52 來自?220.181.38.148?的回復:?字節=32?時間=27ms?TTL=52 來自?220.181.38.148?的回復:?字節=32?時間=35ms?TTL=52 220.181.38.148?的?Ping?統計信息: ????數據包:?已發送?=?4,已接收?=?4,丟失?=?0?(0%?丟失), 往返行程的估計時間(以毫秒為單位): ????最短?=?27ms,最長?=?35ms,平均?=?30ms

我們來看看ping命令的工作流程:首先,我主機生成四個ICMP報文,這四個ICMP報文都是回應請求報文,并將這四個ICMP報文發送給百度服務器。如果百度服務器能夠接受到這四個ICMP報文,那么它也會發送四個ICMP回答報文給我主機。所以,我主機就可以根據返回的ICMP數據報數量以及返回的時間,來計算丟包率以及往返時間了。

推薦:《linux視頻教程

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享