ICMP:Internet控制報文協議

1. 引言

ICMP常常被認爲是IP層的一個組成部分。它傳遞差錯報文以及其餘須要注意的信息。ICMP報文一般被IP層或更高層協議(TCP/UDP)使用。一些ICMP報文把差錯報文返回給用戶進程。
ICMP報文是在IP數據報內部傳輸的,如圖:blog

ICMP報文的格式如圖:進程

(1)類型字段能夠有15個不一樣的值,以描述特定類型的ICMP報文;請求

(2)某些ICMP報文還使用代碼字段的值來進一步描述不一樣的條件;im

(3)檢驗和字段覆蓋整個ICMP報文,ICMP的檢驗和是必需的;時間戳

2. ICMP報文的類型

2.1 分類

各類類型的ICMP報文,如圖,不一樣類型由報文中的類型字段和代碼字段來共同決定。數據

ICMP報文能夠大致分爲查詢報文和差錯報文。由於對ICMP差錯報文有時須要做特殊處理,所以咱們須要對它們進行區分。例如,對ICMP差錯報文進行響應時,永遠不會生成另外一份ICMP差錯報文。協議

下面各類狀況都不會致使產生ICMP差錯報文:
(1)ICMP差錯報文(可是,ICMP查詢報文可能會產生ICMP差錯報文)
(2)目的地址是廣播地址的IP數據報
(3)做爲鏈路層廣播的數據報
(4)不是IP分組的第一片
(5)源地址不是單個主機的數據報,這就是說,源地址不能爲零地址、環回地址、廣播地址或多播地址
這些規則是爲了防止過去容許ICMP差錯報文對廣播分組響應所帶來的廣播風暴。查詢

2.2 ICMP地址掩碼請求與應答

ICMP地址掩碼請求用於無盤系統在引導過程當中獲取本身的子網掩碼。系統廣播它的ICMP請求報文。ICMP地址研發請求和應答報文的格式如圖。db

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

2.3 ICMP時間戳請求與應答

ICMP時間戳請求容許系統向另外一個系統查詢當前的時間,返回的建議值是自午夜開始計算的毫秒數,協調的統一時間。
ICMP時間戳請求和應答報文格式如圖:

請求端填寫發送時間戳,而後發送報文;

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

2.4 ICMP端口不可達差錯 

端口不可達報文,是ICMP目的不可到達報文中的一種。
UDP的規則之一是,若是收到一份UDP數據報而目的端口與某個正在使用的進程不相符,那麼UDP返回一個ICMP不可達報文。
UDP端口不可達返回的ICMP報文以下:

ICMP的一個規則是,ICMP差錯報文必須包括生成該差錯報文的數據報IP首部(包含任何選項),還必須至少包括跟在該IP首部後面的前8個字節。
致使差錯的數據報中的IP首部要被送回的緣由是由於IP首部中包含了協議字段,使得ICMP能夠知道如何解釋後面的8個字節。
如圖ICMP不可達報文:

相關文章
相關標籤/搜索