ICMP

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如下表

TypeCodeDescription
0 – Echo Reply
是一個回應信息
0Echo reply (used to ping)
1 and 2 Reserved
3 – Destination Unreachable
目的地無法到達,原因用code表示
0Destination network unreachable無法到達網路
1Destination host unreachable無法到達主機
2Destination protocol unreachable無法到達協定
3Destination port unreachable無法到達連接埠
4Fragmentation required, and DF flag set需要切割與設定資料元傳送
5Source route failed失敗的來源路徑
6Destination network unknown未知的目的地網路
7Destination host unknown未知的目的地主機
8Source host isolated被孤立的來源主機
9Network administratively prohibited資料網路管理上的禁止通訊
10Host administratively prohibited資料主機管理上的禁止通訊
11Network unreachable for TOS無法到達網路的服務類型
12Host unreachable for TOS無法到達主機的服務類型
13Communication administratively prohibited
4 – Source Quench
當router負載過時或網路壅塞,用來竭止來源繼續發送訊息,但可能會加重交通
0Source quench (congestion control)
5 – Redirect Message
發現走錯方向,用來重新導向路由路徑
0Redirect Datagram for the Network
1Redirect Datagram for the Host
2Redirect Datagram for the TOS & network
3Redirect Datagram for the TOS & host
6 Alternate Host Address
7 Reserved
8 – Echo Request
請求回應訊息 ex:ping
0Echo request
9 – Router Advertisement
路由器廣播,路由器發掘訊息,使用多點廣播
0Router Advertisement
10 – Router Solicitation
徵求路由器訊息
0Router discovery/selection/solicitation
11 – Time Exceeded
當資料封包在某些路由現象中逾時﹐告知來源該封包已被忽略忽略,可用來避免loop ex:trace
0TTL expired in transit
1Fragment reassembly time exceeded
12 – Parameter Problem: Bad IP header
表頭欄位含有不合法之值﹐或reassembly失敗,會回覆來源主機關於參數錯誤的訊息
0Pointer indicates the error
1Missing a required option
2Bad length
13 – Timestamp
要求對方送出時間訊息,用以計算路由時間的差異,以滿足同步性協定的要求
0Timestamp
14 – Timestamp Reply
此訊息純粹是回應 Timestamp Request 用的
0Timestamp reply
15 – Information Request
在 RARP 協定應用之前,此訊息是用來在開機時取得網路信息
0Information Request
16 – Information Reply
用以回應 Infromation Request 訊息
0Information Reply
17 – Address Mask Request
這訊息是用來查詢子網路 mask 設定信息
0Address Mask Request
18 – Address Mask Reply
回應子網路 mask 查詢訊息
0Address Mask Reply
19 Reserved for security
20 through 29 Reserved for robustness experiment
30 – Traceroute0Information 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