ICMP簡介
ICMP全名為(INTERNET CONTROL MESSAGE PROTOCOL)網(wǎng)絡控制消息協(xié)議。
ICMP的協(xié)議號為1。
ICMP報文就像是IP報文的小弟,總頂著IP報文的名頭出來混。因為ICMP報文是在IP報文內(nèi)部的,如圖:
?

?
圖:IP數(shù)據(jù)報
ICMP類型
ICMP報文主要有兩大功能:查詢報文和差錯報文
目的不可達(Destination Unreachable Message)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
日常生活中,郵寄包裹會經(jīng)過多個傳遞環(huán)節(jié),任意一環(huán)如果無法傳下去,都會返回寄件人,并附上無法郵寄的原因。同理,當路由器收到一個無法傳遞下去的IP報文時,會發(fā)送ICMP目的不可達報文(Type為3)給IP報文的源發(fā)送方。報文中的Code就表示發(fā)送失敗的原因。
Code
0 = net unreachable;
1 = host unreachable;
2 = protocol unreachable;
3 = port unreachable;
4 = fragmentation needed and DF set;
5 = source route failed.
超時(Time Exceeded Message)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
網(wǎng)絡傳輸IP數(shù)據(jù)報的過程中,如果IP數(shù)據(jù)包的TTL值逐漸遞減為0時,需要丟棄數(shù)據(jù)報。這時,路由器需要向源發(fā)送方發(fā)送ICMP超時報文(Type為11),Code為0,表示傳輸過程中超時了。
一個IP數(shù)據(jù)報可能會因為過大而被分片,然后在目的主機側(cè)把所有的分片重組。如果主機遲遲沒有等到所有的分片報文,就會向源發(fā)送方發(fā)送一個ICMP超時報文,Code為1,表示分片重組超時了。
參數(shù)錯誤報文(Parameter Problem Message)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Pointer | unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
當路由器或主機處理數(shù)據(jù)報時,發(fā)現(xiàn)因為報文頭的參數(shù)錯誤而不得不丟棄報文時,需要向源發(fā)送方發(fā)送參數(shù)錯誤報文(Type為12)。當Code為0時,報文中的Pointer表示錯誤的字節(jié)位置。
源冷卻(Source Quench Message)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
路由器在處理報文時會有一個緩存隊列。如果超過最大緩存隊列,將無法處理,從而丟棄報文。并向源發(fā)送方發(fā)一個ICMP源冷卻報文(Type為4),告訴對方:“嘿,我這里客滿了,你遲點再來。”
重定向(Redirect Message)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Gateway Internet Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
想像一下,在公司中,有人來你的項目組問你某某某在哪兒。你一想,我們組沒有這人啊。你肯定就會說,我們組沒有這號人,你去其他組看看。當路由收到IP數(shù)據(jù)報,發(fā)現(xiàn)數(shù)據(jù)報的目的地址在路由表上沒有,它就會發(fā)ICMP重定向報文(Type為5)給源發(fā)送方,提醒它想要發(fā)送的地址不在,去其他地方找找吧。
請求回顯或回顯應答(Echo or Echo Reply Message)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+-
Type(8)是請求回顯報文(Echo);Type(0)是回顯應答報文(Echo Reply)。
請求回顯或回顯應答報文屬于查詢報文。Ping就是用這種報文進行查詢和回應。
時間戳或時間戳請求(Timestamp or Timestamp Reply Message)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Originate Timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Receive Timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Transmit Timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
時間戳報文是用來記錄收發(fā)以及傳輸時間的報文。Originate Timestamp記錄的是發(fā)送方發(fā)送報文的時刻;Receive Timestamp記錄的是接收方收到報文的時刻;Transmit Timestamp表示回顯這最后發(fā)送報文的時刻。
信息請求或信息響應
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
這種報文是用來找出一個主機所在的網(wǎng)絡個數(shù)(一個主機可能會在多個網(wǎng)絡中)。報文的IP消息頭的目的地址會填為全0,表示this,源地址會填為源IP所在的網(wǎng)絡IP。
總結(jié)

?
圖:ICMP知識點思維導圖
??
?
審核編輯:湯梓紅
?
評論