當我們想要測試兩台主機之間連通性時,常常會使用ping指令來驗證。但你知道該指令和icmp協定之間有什麼關聯嗎?
ICMP即是網際封包控制協議,是用來報告錯誤情況以及相關錯誤訊息的。 icmp資料報文是封裝在ip資料報的中,作為其資料部分。但是,和ip協定一樣,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影片教學》
###以上是網際通訊控制協定ICMP:網路時間的偵察兵的詳細內容。更多資訊請關注PHP中文網其他相關文章!