icmp是ip層協議。
icmp經常被認為是ip層的乙個組成部分。它傳遞差錯報文以及其他需要注意的資訊。一些icmp報文把差錯報文返回給使用者程序。
icmp報文是在ip資料報內部被傳輸的,如圖6 - 1所示
可以看出首部是8個位元組
所有報文的前4個位元組都是一樣的,但是剩下的其他位元組則互不相同
型別字段可以有15個不同的值,以描述特定型別的icmp報文。某些icmp報文還使用**欄位的值來進一步描述不同的條件。
檢驗和字段覆蓋整個icmp報文。使用的演算法與ip首部檢驗和演算法相同。icmp的檢驗和是必需的。
分為兩類:icmp差錯報告報文和icmp詢問報文
具體型別分類
如果最後一列標明是「核心」,那麼icmp就由核心來處理。如果最後一列指明是「使用者程序」,那麼報文就被傳送到所有在核心中登記的使用者程序,以讀取收到的icmp報文。如果不存在任何這樣的使用者程序,那麼報文就悄悄地被丟棄(這些使用者程序還會收到所有其他型別的icmp報文的拷貝,雖然它們應該由核心來處理,當然使用者程序只有在核心處理以後才能收到這些報文)。有一些報文完全被忽略。最後,如果最後一列標明的是引號內的一串字元,那麼它就是對應的unix差錯。
其中型別8,**0:表示回顯請求(ping請求)。
型別0,**0:表示回顯應答(ping應答)
型別11,**0:超時
1>終點不可達:終點不可達分為:網路不可達,主機不可達,協議不可達,埠不可達,需要分片但df位元已置為1,以及源路由失敗等六種情況,其**字段分別置為0至5。當出現以上六種情況時就向源站傳送終點不可達報文。
說明:埠不可達:udp的規則之一是:如果收到udp資料報而且目的埠與某個正在使用的程序不相符,那麼udp返回乙個icmp不可達報文。
2>源站抑制:當路由器或主機由於擁塞而丟棄資料報時,就向源站傳送源站抑制報文,使源站知道應當將資料報的傳送速率放慢。
3>時間超過:當路由器收到生存時間為零的資料報時,除丟棄該資料報外,還要向源站傳送時間超過報文。當目的站在預先規定的時間內不能收到乙個資料報的全部資料報片時,就將已收到的資料報片都丟棄,並向源站傳送時間超過報文。
4>引數問題:當路由器或目的主機收到的資料報的首部中的字段的值不正確時,就丟棄該資料報,並向源站傳送引數問題報文。
5>改變路由(重定向)路由器將改變路由報文傳送給主機,讓主機知道下次應將資料報傳送給另外的路由器。
以下幾種情況都不會導致產生icmp差錯報文
1>icmp差錯報文(但是,icmp查詢報文可能會產生icmp差錯報文)
2>目的位址是廣播位址或多播位址的ip資料報
3>作為鏈路層廣播的資料報
4>不是ip分片的第一片
5>源位址不是單個主機的資料報。即源位址不能為零位址、環迴位址、廣播位址或多播位址。
這些規則是為了防止過去允許icmp差錯報文對廣播分組響應所帶來的廣播風暴。
所有的icmp差錯報告報文中的資料字段都具有同樣的格式。將收到的需要進行差錯報告ip資料報的首部和資料字段的前8個位元組提取出來,作為icmp報文的資料字段。再加上響應的icmp差錯報告報文的前8個位元組,就構成了icmp差錯報告報文。提取收到的資料報的資料字段的前8個位元組是為了得到運輸層的埠號(對於tcp和udp)以及運輸層報文的傳送序號(對於tcp)。
可以看出一般是56個位元組
回送請求和回答
時間戳請求和回答
掩碼位址請求和回答
路由器詢問和通過
1> icmp回送請求報文是由主機或路由器向乙個特定的目的主機發出的詢問。收到此報文的機器必須給源主機傳送icmp回送應答報文。這種詢問報文用來測試目的站是否可達以及了解其有關狀態。
2> icmp時間戳請求允許系統向另乙個系統查詢當前的時間。該icmp報文的好處是它提供了毫秒級的解析度,而利用其他方法從別的主機獲取的時間只能提供秒級的解析度。請求端填寫發起時間,然後傳送報文。應答系統收到請求報文時填寫接收時間戳,在傳送應答時填寫傳送時間戳。大多數的實現是把後面兩個欄位都設成相同的值。
3> 主機使用icmp位址掩碼請求報文可向子網掩碼伺服器得到某個介面的位址掩碼。系統廣播它的icmp請求報文。icmp報文中的識別符號和序列號字段由傳送端任意選擇設定,這些值在應答中將被返回,這樣,傳送端就可以把應答與請求進行匹配。
4> 主機使用icmp路由器詢問和通過報文可了解連線在本網路上的路由器是否正常工作。主機將路由器詢問報文進行廣播(或多播)。收到詢問報文的乙個或幾個路由器就使用路由器通過報文廣播其路由選擇資訊
icmp的乙個重要應用就是分組網間探測ping,用來測試兩個主機之間的連通性。
ping使用了icmp回送請求和回送回答報文
ping是應用層直接使用網路層icmp的乙個例子,它沒有通過運輸層tcp或者udp
pc機一共傳送四個icmp回送請求報文,如果伺服器收到就會相應,它就發回icmp回送回答報文。(有時候有些主機為了防止惡意攻擊,就不會理睬從外界傳送來的這種報文)
這是unix中的命令,windows中是tracert
查詢到達目的主機所經過的路由器的ip位址,以及到達每乙個路由器的往返時間。
過程:源主機向目的主機傳送一連串的ip資料報,資料報中封裝的是無法交付的udp使用者資料報。
第乙個資料報p1的生存時間ttl為1,當p1到達第乙個路由器時,r1就把p1丟棄了,並向源主機傳送乙個icmp時間超過差錯報告報文。
接著傳送第二個資料報p2,ttl為2,第二個路由器會丟棄資料報並返回乙個icmp時間超過報文,這樣一直下去。
當最後乙個資料報到達目的主機時,ttl為1,但資料報封裝的是無法交付的運輸層udp資料報,因此目的主機向源主機傳送icmp終點不可達差錯報告報文
不一定經過越多的路由器花費的時間越長,這個跟網際網路的擁塞程度有關。
網路控制報文協議(ICMP)
ping也屬於乙個通訊協議,是tcp ip協議的一部分。利用 ping 命令可以檢查網路是否連通,可以很好地幫助我們分析和判定網路故障。應用格式 ping空格ip位址。tracert 跟蹤路由 是路由跟蹤實用程式,用於確定 ip資料報訪問目標所採取的路徑。tracert 命令使用用 ip 生存時間 ...
網路層(網際控制報文協議ICMP)
icmp是 internet control message protocol internet控制報文協議。它是tcp ip協議族的乙個子協議,用於在ip主機 路由器之間傳遞控制訊息。控制訊息是指網路通不通 主機是否可達 路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使...
TCP IP 一 網路協議
網路協議就是 一套 通用規則,用來幫助定義複雜資料傳輸的過程。資料傳輸從一台計算機上的應用程式開始,通過計算機網路硬體,經過 傳輸介質到正確目的地,然後上傳到目的地計算機網路硬體,最後 到達負責接收的應用程式。tcp ip 協議定義了網路通訊過程,更重要的是,定義了資料單元 的格式和內容,以便接收計...