ICMP(Internet Control Message Protocol,網際網路訊息控制協定)
一個錯誤偵測與回報機制
運作在tcp/ip協定集之堆疊元件,屬於OSI layer 3和tcp/ip的internet layer
不具備傳送能力,需裝進ip封包內傳送,在ip表頭prot欄位的值為0x01表icmp
可參考RFC 793和RFC 2463
用途:
偵測遠端主機是否存在
建立及維護路由資料
重導資料傳送路徑
資料流量控制
ICMP常見指令
ping(packet internet groper):主要用來判斷目標主機是否存在
使用echo request給目地設備,若目地設備收到則會回應echo reply
ping 127.0.0.1可知道tcp/ip是否己經被安裝本機上
ping成功必要條件:1互相有到達對方路由,2echo封包沒被禁止,3沒有time out掉
trace:主要用來判斷目標主機會經過那些節點
各系統的trace指令會稍有不同 ex:微軟用tracert,cisco用traceroute
原理:traceroute封包送出去後,途中的每個節點都會回送一個type11 code0的icmp封包,到終點時會回送一個type3 code3的icmp封包
ps:
ping廣播位置時,可能的回應如下
#ping 192.168.1.255
Type escape sequence to abort.
Sending 2, 100-byte ICMP Echos to 192.168.1.255, timeout is 2 seconds:
Reply to request 0 from 192.168.1.2, 204 ms
Reply to request 0 from 192.168.1.1, 344 ms
Reply to request 1 from 192.168.1.2, 220 ms
Reply to request 1 from 192.168.1.1, 344 ms
表示有2個主機回應
ps:
使用ping出現無法達到目地而產生的訊息
常見的有以下:
destination unreachable:目的無法到達,常見
time exceeded:逾時,常見
network unreachable:路徑選擇或定址失敗
host unreachable:傳送失敗,ex:錯誤的設定
protocol unreachable:協定不支援
port unreachable:埠無法使用
……………………………………………………..
IP和ICMP的封裝關係
[ip header][icmp header][icmp info]
ICMP header封包格式
[type 8][code 8][checksum 16]
[other option]
為讓機器來識別不同的連線狀況,透過type(類別)0-36,與code(代碼)表示次類別
常用type如下表
Type | Code | Description |
---|---|---|
0 – Echo Reply 是一個回應信息 | 0 | Echo reply (used to ping) |
1 and 2 | Reserved | |
3 – Destination Unreachable 目的地無法到達,原因用code表示 | 0 | Destination network unreachable無法到達網路 |
1 | Destination host unreachable無法到達主機 | |
2 | Destination protocol unreachable無法到達協定 | |
3 | Destination port unreachable無法到達連接埠 | |
4 | Fragmentation required, and DF flag set需要切割與設定資料元傳送 | |
5 | Source route failed失敗的來源路徑 | |
6 | Destination network unknown未知的目的地網路 | |
7 | Destination host unknown未知的目的地主機 | |
8 | Source host isolated被孤立的來源主機 | |
9 | Network administratively prohibited資料網路管理上的禁止通訊 | |
10 | Host administratively prohibited資料主機管理上的禁止通訊 | |
11 | Network unreachable for TOS無法到達網路的服務類型 | |
12 | Host unreachable for TOS無法到達主機的服務類型 | |
13 | Communication administratively prohibited | |
4 – Source Quench 當router負載過時或網路壅塞,用來竭止來源繼續發送訊息,但可能會加重交通 | 0 | Source quench (congestion control) |
5 – Redirect Message 發現走錯方向,用來重新導向路由路徑 | 0 | Redirect Datagram for the Network |
1 | Redirect Datagram for the Host | |
2 | Redirect Datagram for the TOS & network | |
3 | Redirect Datagram for the TOS & host | |
6 | Alternate Host Address | |
7 | Reserved | |
8 – Echo Request 請求回應訊息 ex:ping | 0 | Echo request |
9 – Router Advertisement 路由器廣播,路由器發掘訊息,使用多點廣播 | 0 | Router Advertisement |
10 – Router Solicitation 徵求路由器訊息 | 0 | Router discovery/selection/solicitation |
11 – Time Exceeded 當資料封包在某些路由現象中逾時﹐告知來源該封包已被忽略忽略,可用來避免loop ex:trace | 0 | TTL expired in transit |
1 | Fragment reassembly time exceeded | |
12 – Parameter Problem: Bad IP header 表頭欄位含有不合法之值﹐或reassembly失敗,會回覆來源主機關於參數錯誤的訊息 | 0 | Pointer indicates the error |
1 | Missing a required option | |
2 | Bad length | |
13 – Timestamp 要求對方送出時間訊息,用以計算路由時間的差異,以滿足同步性協定的要求 | 0 | Timestamp |
14 – Timestamp Reply 此訊息純粹是回應 Timestamp Request 用的 | 0 | Timestamp reply |
15 – Information Request 在 RARP 協定應用之前,此訊息是用來在開機時取得網路信息 | 0 | Information Request |
16 – Information Reply 用以回應 Infromation Request 訊息 | 0 | Information Reply |
17 – Address Mask Request 這訊息是用來查詢子網路 mask 設定信息 | 0 | Address Mask Request |
18 – Address Mask Reply 回應子網路 mask 查詢訊息 | 0 | Address Mask Reply |
19 | Reserved for security | |
20 through 29 | Reserved for robustness experiment | |
30 – Traceroute | 0 | Information Request |
31 | Datagram Conversion Error | |
32 | Mobile Host Redirect | |
33 | Where-Are-You (originally meant for IPv6) | |
34 | Here-I-Am (originally meant for IPv6) | |
35 | Mobile Registration Request | |
36 | Mobile Registration Reply | |
37 | Domain Name Request | |
38 | Domain Name Reply | |
39 | SKIP Algorithm Discovery Protocol, Simple Key-Management for Internet Protocol | |
40 | Photuris, Security failures | |
41 | ICMP for experimental mobility protocols such as Seamoby [RFC4065] | |
42 through 255 | Reserved |