ICMP協(xié)議全解析
1. ICMP簡(jiǎn)介
ICMP全名為(INTERNET CONTROL MESSAGE PROTOCOL)網(wǎng)絡(luò)控制消息協(xié)議。
ICMP的協(xié)議號(hào)為1。
ICMP報(bào)文就像是IP報(bào)文的小弟,總頂著IP報(bào)文的名頭出來混。
因?yàn)镮CMP報(bào)文是在IP報(bào)文內(nèi)部的,如圖:
ICMP屬于TCP/IP協(xié)議族,工作在網(wǎng)絡(luò)層(第三層),用于在IP主機(jī)、路由器之間傳遞控制消息。
控制消息是指網(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)、路由是否可用等網(wǎng)絡(luò)本身的消息。這些控制消息雖然并不傳輸用戶數(shù)據(jù),但是對(duì)于用戶數(shù)據(jù)的傳遞起著重要的作用。
2. ICMP典型運(yùn)用—ping
ICMP的一個(gè)典型應(yīng)用是Ping。
Ping是檢測(cè)網(wǎng)絡(luò)連通性的常用工具,同時(shí)也能夠收集其他相關(guān)信息。
用戶可以在Ping命令中指定不同參數(shù),如ICMP報(bào)文長(zhǎng)度、發(fā)送的ICMP報(bào)文個(gè)數(shù)、等待回復(fù)響應(yīng)的超時(shí)時(shí)間等,設(shè)備根據(jù)配置的參數(shù)來構(gòu)造并發(fā)送ICMP報(bào)文,進(jìn)行Ping測(cè)試。
Ping常用的配置參數(shù)說明如下:
- -a source-ip-address指定發(fā)送ICMP ECHO-REQUEST報(bào)文的源IP地址。如果不指定源IP地址,將采用出接口的IP地址作為ICMP ECHO-REQUEST報(bào)文發(fā)送的源地址。
- -c count指定發(fā)送ICMP ECHO-REQUEST報(bào)文次數(shù)。缺省情況下發(fā)送5個(gè)ICMP ECHO-REQUEST報(bào)文。
- -h ttl-value指定TTL的值。缺省值是255。
- -t timeout指定發(fā)送完ICMP ECHO-REQUEST后,等待ICMP ECHO-REPLY的超時(shí)時(shí)間。
Ping命令的輸出信息中包括目的地址、ICMP報(bào)文長(zhǎng)度、序號(hào)、TTL值、以及往返時(shí)間。序號(hào)是包含在Echo回復(fù)消息(Type=0)中的可變參數(shù)字段,TTL和往返時(shí)間包含在消息的IP頭中。
3. ICMP典型運(yùn)用—Tracert
ICMP的另一個(gè)典型應(yīng)用是Tracert。
Tracert基于報(bào)文頭中的TTL值來逐跳跟蹤報(bào)文的轉(zhuǎn)發(fā)路徑。
為了跟蹤到達(dá)某特定目的地址的路徑,源端首先將報(bào)文的TTL值設(shè)置為1。
該報(bào)文到達(dá)第一個(gè)節(jié)點(diǎn)后,TTL超時(shí),于是該節(jié)點(diǎn)向源端發(fā)送TTL超時(shí)消息,消息中攜帶時(shí)間戳。
然后源端將報(bào)文的TTL值設(shè)置為2,報(bào)文到達(dá)第二個(gè)節(jié)點(diǎn)后超時(shí),該節(jié)點(diǎn)同樣返回TTL超時(shí)消息,以此類推,直到報(bào)文到達(dá)目的地。
這樣,源端根據(jù)返回的報(bào)文中的信息可以跟蹤到報(bào)文經(jīng)過的每一個(gè)節(jié)點(diǎn),并根據(jù)時(shí)間戳信息計(jì)算往返時(shí)間。
Tracert是檢測(cè)網(wǎng)絡(luò)丟包及時(shí)延的有效手段,同時(shí)可以幫助管理員發(fā)現(xiàn)網(wǎng)絡(luò)中的路由環(huán)路。
Tracert常用的配置參數(shù)說明如下:
- -a source-ip-address指定tracert報(bào)文的源地址。
- -f first-ttl指定初始TTL。缺省值是1。
- -m max-ttl指定最大TTL。缺省值是30。
- -name使能顯示每一跳的主機(jī)名。
- -p port指定目的主機(jī)的UDP端口號(hào)。
4. ICMP類型
ICMP報(bào)文主要有兩大功能:查詢報(bào)文和差錯(cuò)報(bào)文。
對(duì)于查詢報(bào)文,常用的ping命令,以及用于無盤系統(tǒng)啟動(dòng)獲取網(wǎng)絡(luò)子網(wǎng)掩碼查詢報(bào)文,以及時(shí)間戳報(bào)文,目標(biāo)主機(jī)收到返回相應(yīng)的格式的回應(yīng)包;
對(duì)于差錯(cuò)報(bào)文在一些情況下目標(biāo)主機(jī)不會(huì)返回對(duì)應(yīng)的數(shù)據(jù)包:
5. 目的不可達(dá)(Destination Unreachable Message)
日常生活中,郵寄包裹會(huì)經(jīng)過多個(gè)傳遞環(huán)節(jié),任意一環(huán)如果無法傳下去,都會(huì)返回寄件人,并附上無法郵寄的原因。
同理,當(dāng)路由器收到一個(gè)無法傳遞下去的IP報(bào)文時(shí),會(huì)發(fā)送ICMP目的不可達(dá)報(bào)文(Type為3)給IP報(bào)文的源發(fā)送方。
報(bào)文中的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.
6. 超時(shí)(Time Exceeded Message)
網(wǎng)絡(luò)傳輸IP數(shù)據(jù)報(bào)的過程中,如果IP數(shù)據(jù)包的TTL值逐漸遞減為0時(shí),需要丟棄數(shù)據(jù)報(bào)。
這時(shí),路由器需要向源發(fā)送方發(fā)送ICMP超時(shí)報(bào)文(Type為11),Code為0,表示傳輸過程中超時(shí)了。
一個(gè)IP數(shù)據(jù)報(bào)可能會(huì)因?yàn)檫^大而被分片,然后在目的主機(jī)側(cè)把所有的分片重組。
如果主機(jī)遲遲沒有等到所有的分片報(bào)文,就會(huì)向源發(fā)送方發(fā)送一個(gè)ICMP超時(shí)報(bào)文,Code為1,表示分片重組超時(shí)了。
7. 參數(shù)錯(cuò)誤報(bào)文(Parameter Problem Message)
當(dāng)路由器或主機(jī)處理數(shù)據(jù)報(bào)時(shí),發(fā)現(xiàn)因?yàn)閳?bào)文頭的參數(shù)錯(cuò)誤而不得不丟棄報(bào)文時(shí),需要向源發(fā)送方發(fā)送參數(shù)錯(cuò)誤報(bào)文(Type為12)。
當(dāng)Code為0時(shí),報(bào)文中的Pointer表示錯(cuò)誤的字節(jié)位置。
8. 源冷卻(Source Quench Message)
路由器在處理報(bào)文時(shí)會(huì)有一個(gè)緩存隊(duì)列。
如果超過最大緩存隊(duì)列,將無法處理,從而丟棄報(bào)文。
并向源發(fā)送方發(fā)一個(gè)ICMP源冷卻報(bào)文(Type為4),告訴對(duì)方:“嘿,我這里客滿了,你遲點(diǎn)再來。”
9. 重定向(Redirect Message)
想像一下,在公司中,有人來你的項(xiàng)目組問你某某某在哪兒。
你一想,我們組沒有這人啊。
你肯定就會(huì)說,我們組沒有這號(hào)人,你去其他組看看。
當(dāng)路由收到IP數(shù)據(jù)報(bào),發(fā)現(xiàn)數(shù)據(jù)報(bào)的目的地址在路由表上沒有,它就會(huì)發(fā)ICMP重定向報(bào)文(Type為5)給源發(fā)送方,提醒它想要發(fā)送的地址不在,去其他地方找找吧。
10. 請(qǐng)求回顯或回顯應(yīng)答(Echo or Echo Reply Message)
- Type(8)是請(qǐng)求回顯報(bào)文(Echo);
- Type(0)是回顯應(yīng)答報(bào)文(Echo Reply)。
- 請(qǐng)求回顯或回顯應(yīng)答報(bào)文屬于查詢報(bào)文。
- Ping就是用這種報(bào)文進(jìn)行查詢和回應(yīng)。
11. 時(shí)間戳或時(shí)間戳請(qǐng)求(Timestamp or Timestamp Reply Message)
時(shí)間戳報(bào)文是用來記錄收發(fā)以及傳輸時(shí)間的報(bào)文。
- Originate Timestamp記錄的是發(fā)送方發(fā)送報(bào)文的時(shí)刻;
- Receive Timestamp記錄的是接收方收到報(bào)文的時(shí)刻;
- Transmit Timestamp表示回顯這最后發(fā)送報(bào)文的時(shí)刻。
12. 信息請(qǐng)求或信息響應(yīng)
這種報(bào)文是用來找出一個(gè)主機(jī)所在的網(wǎng)絡(luò)個(gè)數(shù)(一個(gè)主機(jī)可能會(huì)在多個(gè)網(wǎng)絡(luò)中)。
報(bào)文的IP消息頭的目的地址會(huì)填為全0,表示this,源地址會(huì)填為源IP所在的網(wǎng)絡(luò)IP。
好了,今天的分享就到這了~