當網路不通的情況下,通常會想到ping命令,ping一下,但是ping命令內部如何執行的,可能並不清楚,其實ping是基於icmp協議進行工作的。
一、icmp協議的格式
icmp是在rfc 792中定義的網際網路協議族之一。通常用於返回的錯誤資訊或是分析路由。icmp錯誤訊息總是包括了源資料並返回給傳送者。 icmp錯誤訊息的例子之一是ttl值過期。每個路由器在**資料報的時候都會把ip包頭中的ttl值減1。如果ttl值為0,「ttl在傳輸中過期」的訊息將會回報給源位址。 每個icmp訊息都是直接封裝在乙個ip資料報中的,因此,和udp一樣,icmp是不可靠的。
ping是基於icmp協議的,icmp全程internet control message protocol,就是網際網路控制報文協議,網路包在異常複雜的網路環境進行傳輸的時候,常常會遇到各種各樣的問題,當遇到問題的時候,總要傳出訊息來,報告情況,這樣才可以調整傳輸策略。
icmp報文是封裝在ip包裡面的,因為傳輸的時候,肯定需要源位址和目標位址,它本身非常簡單。icmp報文有很多種型別,最常用的型別是主動請求為8,主動應答為0。
1、查詢報文型別
常用的ping就是查詢報文,是一種主動請求,並且獲得主動應答的icmp協議,所以,ping包也是符合icmp協議的格式的,只不過他在後面增加了自己的格式。
對ping的主動請求,進行網路抓包,稱為icmp echo request,同理,主動請求的回覆,稱為icmp echo reply,比起原生的icmp,這裡面多了兩個字段,乙個是識別符號,乙個是序號,在選項資料中,ping還會存放傳送請求的時間值,來計算往返時間,說明路程的長短。
2、差錯報文型別
icmp差錯報文的幾個例子:終點不可達為3,源抑制為4,超時為11,重定向為5
(1)終點不可達
網路不可達、主機不可達、協議不可達、埠不可達、需要設定了分片但設定了不可分片
(2)源站抑制
讓源站放慢傳送速度
(3)時間超時
超過網路的生存時間還沒有到達
(4)路由重定向
也就是下次傳送給下乙個路由
二、ping:查詢報文的使用
ping的傳送和接受過程:
具體的執行過程:
假設主機a的ip位址是192.168.1.1,主機b的ip位址是192.168.1.2,他們都在同乙個子網。那麼當你在主機a上執行「ping 192.168.1.2」後,會發生什麼呢?
(1)ping命令執行的時候,源主機首先會構建乙個icmp請求資料報,icmp資料報內包含多個字段。最重要的是兩個,第乙個是型別字段,對於請求資料報而言該字段為8;另乙個是順序號,主要用於區分連續ping的時候發出的多個資料報。每發出乙個資料報,順序號會自動加1,為了能夠計算往返的時間rtt,它會在報文的資料部分插入傳送時間。
(3)接下來,需要加入mac頭,如果在本節arp對映表中查詢出ip位址192.168.1.2所對應的mac位址,由資料鏈路層構建乙個資料幀,目的位址是ip層傳過來的mac位址,源位址則是本機的mac 位址;還要加上一些控制資訊,依據乙太網的介質訪問規則,將它們傳送出去。
(4)主機b收到這個資料幀後,先檢查它的目的mac位址,並和本機的mac位址對比,如符合,則接收,否則就丟棄,接收後檢查該資料幀,將ip包從資料幀中取出來,交給本機的ip層,同樣,ip層檢查後,將有用的資訊提取出來後交給icmp協議。
(5)主機b會構建乙個icmp應答包,應答資料報的型別欄位為0,順序號為接收到的請求資料報中的順序號,然後再傳送給主機a
分析:
在規定的時間內,源主機如果沒有接收到icmp的應答包,則說明目標主機不可達。
如果接收到了icmp的應答包,則說明目標主機可達
此時,源主機會檢查,用當前時刻減去該資料報最初從源主機上發出的時刻,就是icmp資料報的時間延遲
擴充套件:
如果跨網斷的話,還會涉及到閘道器的**、路由器的**等等。但是對於icmp的頭來講,是沒什麼影響的,會影響的是根據目標ip位址,選擇路由的下一跳,還有每經過乙個路由器到達乙個新的區域網,需要換mac頭裡面的mac位址。
ICMP協議和ICMP協議
一 icmp協議 因為ip協議不提供可靠的傳輸服務,也不提供端到端或點到點的確認,如果出錯可以通過icmp報告來看,它是在ip模組中實現。tcp ip協議設計的icmp協議就是為了彌補ip協議的不足。它是tcp ip協議族的乙個子協議,用於在ip主機 路由器之間傳遞控制訊息。控制訊息指網路通不通 主...
ICMP協議與ping命令
在網路中ping是乙個十分強大的tcp ip工具。它的作用主要為 1 用來檢測網路的連通情況和分析網路速度 2 根據網域名稱得到伺服器ip 3 根據ping返回的ttl值來判斷對方所使用的作業系統及資料報經過路由器數量。我們通常會用它來直接ping ip位址,來測試網路的連通情況。ping 的原理是...
PING命令與ICMP協議
不管是開發中,還是電腦日常使用,常常遇到網路不通的問題。這時你就會習慣性的使用乙個命令ping,檢視問題出在 那它是如何工作的哪?icmp就是網際網路控制報文協議,網路包在複雜的網路環境傳輸時,常常遇到各種各樣的問題。當遇到問題的時候,總不能讓這個網路包死的不明不白,要傳出訊息來,報個情況,是怎麼死...