ICMP

 ICMP簡介

ICMP 網際控制報文協議---internet control message protocol
 
icmp一般被認爲是ip的一個組成部分。
 
icmp向源節點報告關於向目的地址傳輸IP數據包的錯誤和信息。
 
icmp報文通常被ip層或更高層的協議(TCP/UDP)使用。
 
===================================
 
報文格式:
 
 
 
類型字段有15個不同的值,以描述特定類型的icmp報文。某些icmp報文還用代碼字段的值來進一步描述不同的條件。
 
校驗和覆蓋整個icmp報文。icmp的校驗和是必須的。
 
 
 
差錯報文有時候需要經過特殊處理。在對ICMP差錯報文進行響應時,永遠不會生成另一份差錯報文。
 
當發送一份I C M P差錯報文時,報文始終包含I P的首部和產生I C M P差錯報文的I P數據報的前8個字節。這樣,接收I C M P差錯報文的模塊就會把它與某個特定的協議(根據I P數據報首部中的協議字段來判斷)和用戶進程(根據包含在I P數據報前8個字節中的T C P或U D P報文首部中的T C P或U D P端口號來判斷)聯繫起來。
 
下面各種情況都不會導致產生I C M P差錯報文:
1) ICMP差錯報文(但是,I C M P查詢報文可能會產生I C M P差錯報文)。
2) 目的地址是廣播地址或多播地址的I P數據報。
3) 作爲鏈路層廣播的數據報。
4) 不是I P分片的第一片
5) 源地址不是單個主機的數據報。這就是說,源地址不能爲零地址、環回地址、廣播地
址或多播地址。
這些規則是爲了防止過去允許I C M P差錯報文對廣播分組響應所帶來的廣播風暴。
 
============================
 
I C M P地址掩碼請求用於無盤系統在引導過程中獲取自己的子網掩碼。
 
ICMP 地址掩碼請求報文。
 
I C M P報文中的標識符和序列號字段由發送端任意選擇設定,這些值在應答中將被返回。這樣,發送端就可以把應答與請求進行匹配。用於確認特定的包。
 
============================================
 
icmp時間戳請求與應答
 
I C M P時間戳請求允許系統向另一個系統查詢當前的時間。返回的建議值是自午夜開始計算的毫秒數,協調的統一時間( Coordinated Universal Time, UTC)(早期的參考手冊認爲U T C是格林尼治時間)。這種I C M P報文的好處是它提供了毫秒級的分辨率。由於返回的時間是從午夜開始計算的,因此調用者必須通過其他方法獲知當時的日期,這是它的一個缺陷。
 
 
 
ICMP時間戳請求和應答報文。
 
請求端填寫發起時間戳,然後發送報文。應答系統收到請求報文時填寫接收時間戳,在發送應答時填寫發送時間戳。但是,實際上,大多數的實現把後面兩個字段都設成相同的值(提供三個字段的原因是可以讓發送方分別計算髮送請求的時間和發送應答的時間)
 
===================================================
 
ICMP端口不可達差錯
 
U D P的規則之一是,如果收到一份U D P數據報而目的端口與某個正在使用的進程不相符,那麼U D P返回一個I C M P不可達報文。
 
 
ICMP端口不可達差錯報文
 
I C M P的一個規則是, I C M P差錯報文必須包括生成該差錯報文的數據報I P首部(包含任何選項),還必須至少包括跟在該I P首部後面的前8個字節。在我們的例子中,跟在I P首部後面的前8個字節包含U D P的首部
 
UDP首部的內容是源、目的端口號,由於目的端口號不匹配,所以產生了ICMP端口不可達的差錯報文。接收ICMP差錯報文的系統可以根據源端口號與原來的某個特定用戶進程相關聯。
 
導致差錯的數據報中的I P首部要被送回的原因是因爲I P首部中包含了協議字段,使得I C M P可以知道如何解釋後面的8個字節。如果我們來查看T C P首部,可以發現源端口和目的端口被包含在T C P首部的前8個字節中。
 
 
 
ICMP不可達報文
 
在報文圖中,我們注意到有1 6種不同類型的I C M P不可達報文,代碼分別從0到1 5。I C M P端口不可達差錯代碼是3。另外,儘管圖指出了在I C M P報文中的第二個32 bit字必須爲0,但是當代碼爲4時(“需要分片但設置了不分片比特”),路徑M T U發現機制卻允許路由器把外出接口的MTU填在這個32 bit字的低16 bit中。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章