ICMP協議基本格式

來自:http://hi.baidu.com/%BA%CE%E1%E7/blog/item/d0b3b14e914ae9e783025c01.html

ICMP是IP層的一個組成部分,它傳遞查詢報文和差錯報文,ICMP報文通常被IP層或更高層協議(TCP或UDP)使用,它是在IP數據包內被傳輸的,如圖1所示。

圖1:ICMP封裝在IP數據包內部

ICMP報文格式

    如圖2所示,所有報文的前4個字節都是一樣的,但是剩下的其他字節則互不相同。

圖2:ICMP報文格式

類型字段可以有15個不同的值,以描述特定類型的ICMP報文。某些ICMP報文還使用代

碼字段的值來進一步描述不同的條件。

檢驗和字段覆蓋整個ICMP報文。使用的算法與前面介紹的IP首部檢驗和算法相同。ICMP的檢驗和是必需的。

ICMP報文的類型

各種類型的ICMP報文如3所示,不同類型由報文中的類型字段和代碼字段來共同決定。

圖中的最後兩列表明ICMP報文是一份查詢報文還是一份差錯報文。因爲對ICMP差錯報

文有時需要作特殊處理,因此我們需要對它們進行區分。例如,在對ICMP差錯報文進行響應

時,永遠不會生成另一份ICMP差錯報文(如果沒有這個限制規則,可能會遇到一個差錯產生

另一個差錯的情況,而差錯再產生差錯,這樣會無休止地循環下去)。

圖3:ICMP報文類型

ICMP地址掩碼請求與應答

ICMP地址掩碼請求用於無盤系統在引導過程中獲取自己的子網掩碼。系統廣播它的ICMP請求報文(這一過程與無盤系統在引導過程中用RARP獲取IP地址是類似的)。無盤

系統獲取子網掩碼的另一個方法是BOOTP協議。ICMP地址掩碼請求和應答報文的格式如圖4所示。

圖4:ICMP地址掩碼請求與應答報文

ICMP報文中的標識符和序列號字段由發送端任意選擇設定,這些值在應答中將被返回。這樣,發送端就可以把應答與請求進行匹配。

ICMP時間戳請求與應答

ICMP時間戳請求允許系統向另一個系統查詢當前的時間。返回的建議值是自午夜開始計

算的毫秒數,協調的統一時間(Coordinated Universal Time, UTC)。

ICMP時間戳請求和應答報文格式如圖5所示。

圖5:ICMP時間戳請求和應答報文

請求端填寫發起時間戳,然後發送報文。應答系統收到請求報文時填寫接收時間戳,在發送應答時填寫發送時間戳。但是,實際上,大多數的實現把後面兩個字段都設成相同的值。

ICMP端口不可達差錯

上面介紹了ICMP兩種查詢報文—地址掩碼和時間戳查詢及應答。現在來分析一種ICMP差錯報文,即端口不可達報文,它是ICMP目的不可到達報文中的一種,以此來看一看ICMP差錯報文中所附加的信息。

我們使用採用UDP協議的TFTP服務(默認端口號69),在客戶端使用TFTP客戶程序connect服務端的非69端口,這樣就會發生端口不可達錯誤。完整的差錯報文如圖6所示:

圖6:“UDP端口不可達”返回的ICMP報文

ICMP的一個規則是, ICMP差錯報文必須包括生成該差錯報文的數據報IP首部(包含任何選項),還必須至少包括跟在該IP首部後面的前8個字節(包含源端口和目的端口)。在我們的例子中,跟在IP首部後面的前8個字節包含UDP的首部。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章