《TCP/IP詳解卷1:協議》第6章 ICMP:Internet控制報文協議-讀書筆記

QingLiXueShi發表於2015-04-20

章節回顧:

《TCP/IP詳解卷1:協議》第1章 概述-讀書筆記

《TCP/IP詳解卷1:協議》第2章 鏈路層-讀書筆記

《TCP/IP詳解卷1:協議》第3章 IP:網際協議(1)-讀書筆記

《TCP/IP詳解卷1:協議》第3章 IP:網際協議(2)-讀書筆記

《TCP/IP詳解卷1:協議》第4章 ARP:地址解析協議-讀書筆記

《TCP/IP詳解卷1:協議》第5章 RARP:逆地址解析協議-讀書筆記

《TCP/IP詳解卷1:協議》第6章 ICMP:Internet控制報文協議-讀書筆記

《TCP/IP詳解卷1:協議》第11章 UDP:使用者資料包協議-讀書筆記

《TCP/IP詳解卷1:協議》第17、18章 TCP:傳輸控制協議(1)-讀書筆記

《TCP/IP詳解卷1:協議》第17、18章 TCP:傳輸控制協議(2)-讀書筆記

《TCP/IP詳解卷1:協議》第19章 TCP的互動資料流-讀書筆記

 

1、引言

ICMP被認為是IP層的一個組成部分,它傳遞差錯報文以及其他需要注意的資訊。ICMP報文通常被IP層或更高層協議(TCP或UDP)使用。一些ICMP報文把差錯報文返回給使用者程式。

ICMP報文是在IP資料包內部被傳輸的。如圖6-1所示:

ICMP報文的格式如圖6-2所示:

說明:

(1)所有報文的前4個位元組都是一樣的,剩下的其他位元組則互不相同。

(2)型別欄位可以有15個不同的值,以描述特定型別的ICMP報文。某些ICMP報文還使用程式碼欄位的值來進一步描述不同的條件。

(3)檢驗和欄位覆蓋整個ICMP報文。使用的演算法與IP首部檢驗和演算法相同。ICMP的檢驗和是必需的。

 

2、ICMP報文的型別

各種型別的ICMP報文如圖6-3所示:

說明:

(1)不同型別由報文中的型別欄位和程式碼欄位來共同決定。

(2)ICMP是一份查詢報文還是一份差錯報文。

(3)因為對ICMP差錯報文有時需要作特殊處理,因此需要對它們進行區分。例如,在對ICMP差錯報文進行響應時,永遠不會生成另一份ICMP差錯報文(如果沒有這個限制規則,可能會遇到一個差錯產生另一個差錯的情況,而差錯再產生差錯,這樣會無休止地迴圈下去)。

(4)當傳送一份ICMP差錯報文時,報文始終包含IP的首部和產生ICMP差錯報文的IP資料包的前8個位元組。這樣,接收ICMP差錯報文的模組就會把它與某個特定的協議(根據IP資料包首部中的協議欄位來判斷)和使用者程式(根據包含在IP資料包前8個位元組中的TCP或UDP報文首部中的TCP或UDP埠號來判斷)聯絡起來。

(5)下面各種情況都不會導致產生ICMP差錯報文:

1) ICMP差錯報文(ICMP查詢報文可能會產生ICMP差錯報文)。

2) 目的地址是廣播地址多播地址的IP資料包。

3) 作為鏈路層廣播的資料包。

4) 不是IP分片的第一片。

5) 源地址不是單個主機的資料包。即源地址不能為零地址、環回地址、廣播地址或多播地址。

這些規則是為了防止過去允許ICMP差錯報文對廣播分組響應所帶來的廣播風暴。

 

3、ICMP地址掩碼請求與應答

ICMP地址掩碼請求用於無盤系統在引導過程中獲取自己的子網掩碼。系統廣播它的ICMP請求報文,報文格式如圖6-4所示:

說明:

(1)識別符號和序列號欄位由傳送端任意選擇設定,這些值在應答中將被返回。這樣,傳送端就可以把應答與請求進行匹配。

(2)廣播的定義是指區域網上的所有主機,因此它必須包括髮送主機在內。當乙太網驅動程式識別出目的地址是廣播地址後,它就把分組送到網路上,同時傳一份拷貝到環回介面。

(3)通常,應答地址必須是單播地址,除非請求端的源IP地址是0.0.0.0。

 

4、ICMP時間戳請求與應答

ICMP時間戳請求允許系統向另一個系統查詢當前的時間。返回的建議值是自午夜開始計算的毫秒數,協調的統一時間(Coordinated Universal Time, UTC)。

說明:

(1)這種報文的好處是:提供了毫秒級的解析度,而利用其他方法從別的主機獲取的時間(如某些Unix系統提供的rdate命令)只能提供秒級的解析度。

(2)缺陷是:返回的時間是從午夜開始計算的,因此呼叫者必須通過其他方法獲知當時的日期。

ICMP時間戳請求和應答報文格式如圖6-6所示:

請求端填寫發起時間戳,然後傳送報文。應答系統收到請求報文時填寫接收時間戳,在傳送應答時填寫傳送時間戳。

 

5、ICMP埠不可達差錯

埠不可達報文是一種ICMP差錯報文,它是ICMP目的不可到達報文中的一種。ICMP不可達報文的一般格式如圖6-10所示。

說明:

(1)ICMP的一個規則是:ICMP差錯報文必須包括生成該差錯報文的資料包IP首部(包含任何選項),還必須至少包括跟在該IP首部後面的前8個位元組。

(2)導致差錯的資料包中的IP首部要被送回的原因是因為IP首部中包含了協議欄位,使得ICMP可以知道如何解釋後面的8個位元組。TCP和UDP首部的前8個位元組包括源埠和目的埠。

ICMP覆蓋的範圍很廣,從致命差錯到資訊差錯,即使在一個給定的系統實現中,對每個ICMP報文的處理都是不相同的。

相關文章