一、ICMP報文格式服務器
ICMP協議屬於網絡層,是TCP/IP協議族的一個子協議,ICMP報文被封裝在IP報文中。網絡中傳遞的ICMP包示意以下,:
網絡
幀頭 | IP報頭 | Data(ICMP包) | FCS | |||
Type | Code | Checksum | data |
|||
8位 | 8位 | 16位 | 按須要 |
Type:消息類型。
ide
Code:消息類型的具體參數。工具
Checksum:校驗字段,用於檢查消息是否完整;在ICMP重定向消息中用於指定網關IP地址;在Echo Reply消息中這個字段包含標識符和序號。測試
data:數據字段,根據不一樣使用需求,內容不同。優化
二、ICMP消息格式ui
Typespa |
Code | 描述 | 備註 |
0 | 0 | Echo Reply | 回顯應答(ping應答) |
3 |
0 | Network Unreachable | 網絡不可達 |
3 | 1 | Host Unreachable | 主機不可達orm |
3 | 2 | Protocol Unreachable | 協議不可達(不支持該協議號) |
3 | 3 | Port Unreachable | 端口不可達(主機沒有開放該端口) |
3 | 4 | Fragmentation needed but no frag.bit set | 須要進行分片但設置不分片比特 |
3 | 5 | Source routing failed | 源站選路失敗 |
3 | 6 | Destination network unknown | 目的網絡未知 |
3 | 7 | Destination host unknown | 目的主機未知 |
3 | 8 | Source host isolated (obsolete) | 源主機被隔離(做廢不用) |
3 | 9 | Destination network administratively prohibited | 目的網絡被強制禁止 |
3 | 10 | Destination host administratively prohibited | 目的主機被強制禁止 |
3 | 11 | Network unreachable for TOS | 因爲服務類型TOS,網絡不可達 |
3 | 12 | Host unreachable for TOS | 因爲服務類型TOS,主機不可達 |
3 | 13 | Communication administratively prohibited by filtering | 因爲過濾,通訊被強制禁止 |
3 | 14 | Host precedence violation | 主機越權 |
3 | 15 | Precedence cutoff in effect | 優先停止生效 |
4 |
0 | Source quench | 源端被關閉(基本流控制) |
5 | 0 | Redirect for network | 對網絡重定向 |
5 | 1 | Redirect for host | 對主機重定向 |
5 | 2 | Redirect for TOS and network | 對服務類型和網絡重定向 |
5 | 3 | Redirect for TOS and host | 對服務類型和主機重定向 |
8 | 0 | Echo Request | 回顯請求(Ping請求) |
9 | 0 | Router advertisement | 路由器通告 |
10 | 0 | Route solicitation | 路由器請求 |
11 | 0 | TTL equals 0 during transit | 傳輸期間生存時間爲0 |
11 | 1 | TTL equals 0 during reassembly | 在數據報組裝期間生存時間爲0 |
12 | 0 | IP header bad (catchall error) | 壞的IP首部(包括各類差錯) |
12 | 1 | Required options missing | 缺乏必需的選項 |
13 | 0 | Timestamp request (obsolete) | 時間戳請求(做廢不用) |
14 | 0 | Timestamp reply (obsolete) | 時間戳應答(做廢不用) |
15 | 0 | Information request (obsolete) | 信息請求(做廢不用) |
16 | 0 | Information reply (obsolete) | 信息應答(做廢不用) |
17 | 0 | Address mask request | 地址掩碼請求 |
18 | 0 | Address mask reply | 地址掩碼應答 |
三、ICMP功能接口
ICMP用於在主機、路由器之間傳遞控制消息,包括錯誤報告、交換受限控制和狀態信息等。一般的應用場景是主機向遠端發送數據而路由找不到遠端,因而向主機發送一個ICMP報文告知其錯誤狀況,咱們稱之爲差錯報文,須要注意ICMP的惟一功能是報告問題而不是糾正錯誤。另外一種狀況是主機向路由或遠端發送一個ICMP請求報文,並獲取ICMP回覆報文以獲取當前網絡狀況等信息,這種稱之爲詢問報文。
ICMP差錯報文共5種:
終點不可達 | 包括網絡不可達、主機不可達、協議不可達、端口不可達、須要分片但DF比特已置爲一、源路由失敗六種狀況,當出現上述六種狀況時就向源站發送終點不可達報文。 |
|
源站抑制 | 當路由器或主機因爲擁塞而丟棄數據時,就向源站發送源站抑制報文使源站知道應當將數據報文的發送速率放緩。 |
|
超時 | 當路由器收到生存時間爲0的數據,或目的站在預先規定的時間內沒有收到一個數據報的所有數據報片斷均斷定爲超時,則丟棄數據並向源站發送超時報文。 |
|
參數問題 | 路由器或目的站收到的數據報首部的字段存在值不正確則丟棄該數據,並向源站發送參數問題報文。 | |
重定向 |
當路由器檢測到源站使用非優化路由時就會向該主機發送一個ICMP重定向報文,請求主機改變路由。 |
爲避免ICMP差錯報文對廣播分組響應所帶來的廣播風暴,如下五種狀況都不會致使ICMP差錯報文的產生:
1)路由器或主機在收到異常的ICMP差錯報文時不會產生新的差錯報文。
2)目的地址是廣播地址或多播地址的IP數據報。
3)做爲鏈路層廣播的數據報。
4)不是IP分片的第一片,避免每一個分片都產生一個新的差錯報文。
5)源地址不是單個主機的數據報。
ICMP詢問報文有四種:
回送請求和回答 | ICMP回送請求報文是主機或路由器向一個特定目的端發出的詢問,收到報文的目的端必須發送ICMP回送應答報文給源端。目前在於測試目的端是否可達並瞭解其有關狀態。 |
時間戳請求和回答 | 源端能夠發送一個ICMP時間戳請求報文向另外一個系統查詢當前的時間,該報文的好處是可提供毫秒級的時間分辨率。 |
掩碼地址請求和回答 | 主機使用ICMP掩碼地址請求報文可向子網掩碼服務器獲得某個接口的掩碼地址。 |
路由詢問和經過 | 主機將路由器詢問報文進行廣播或多播,收到詢問的路由器就使用路由器經過報文廣播其路由選擇信息。經過這種方式主機可瞭解鏈接在本網絡上的路由器是否正常工做。 |
四、ICMP應用
Ping:
Ping是檢測網絡連通性的經常使用工具,同時也能收集其餘相關信息。用戶能夠在Ping命令中指定不一樣參數,經常使用配置參數說明以下:
-a source-ip-address | 指定ICMP報文的源IP地址 |
-c count | 指定發送報文的次數,缺省發送5個 |
-h ttl-valuse | 指定TTL的值,缺省是255 |
-t timeout | 指定等待應當報文的超時時間 |
Tracert:
源主機想知道訪問目的主機的路徑,它向第一個路由器發送一個TTL值爲1的ICMP包且使用一個目的主機沒法識別的端口,第一個路由器A收到該包後先將TTL值減1發現此時TTL=0因而再也不轉發並返回一個ICMP包給源主機,其中就包含了路由器A的地址。主機A收到路由器A的應答知道了路由器A的地址,便再次發送一個TTL值爲2的ICMP包,路由器A收到該包後會向下轉發則路由器B會收到該包,因爲TTL=0則路由器B會返回一個ICMP包給源主機。經過這種方法層層傳遞到目的主機,目的主機發現該包端口太大沒法識別因而向源主機回覆一個目的不可達的ICMP包,源主機收到這個回覆的包就知道本身發送的包已到達目的主機。則整個路徑的IP就被源主機獲悉。
【須要分片但DF比特已置爲1】路由器收到一份須要分片的數據報,而其IP首部中的DF字段被置爲1,代表不須要分片,此時路由應向源主機發送一個ICMP差錯報文。