ICMP一般被認爲是IP層的組成部分。它用來傳送差錯報文以及一些須要注意的信息,一般被IP層、TCP層、UDP層使用,偶爾也被用戶層使用算法
ICMP報文是放在IP數據報中進行傳輸3d
報文格式以下:code
類型+代碼惟一肯定了ICMP報文的描述blog
這幾種狀況不會產生ICMP差錯報文:接口
ICMP地址掩碼請求用於無盤系統獲取本身的子網掩碼,與RARP請求獲取IP相似ip
請求和應答的報文格式:ci
其中標識符和序列號是發送端自定義,這些信息會隨應答一塊兒返回。發送端用這兩個信息能夠將請求和應答匹配起來qt
經過icmpaddrmask程序向目標地址發送ICMP地址掩碼請求,其中140.252.13.63爲子網內的廣播地址map
其中svr4返回的地址是錯誤的請求
向本機發送請求
其中響應的子網掩碼是收到請求的接口的子網掩碼,其中兩個IP地址最後都是本機的環回接口處理,因此子網掩碼就是127.0.0.1的
ICMP時間戳請求返回值是自午夜開始計算的毫秒數,利用ICMP時間戳請求,能夠校訂本機時間
請求與應答報文格式爲:
大部分系統後二者的值是同樣的
向主機bsdi發送ICMP時間戳請求
其中有幾點值得注意:
difference = 接收時間戳 - 發起時間戳
sun主機須要調整本機時間 = 發起時間戳 + difference - rtt/2
當目的端口沒有提供訪問服務,就會報ICMP端口不可達差錯
ICMP不可達報文格式:
ICMP端口不可達差錯代碼爲3
當發送UDP數據報,但目的端口不存在,目的主機返回的報文格式:
針對ICMP報文,4.4BSD系統的處理方式: