1、ICMP簡介
ICMP全名為(INTERNET CONTROL MESSAGE PROTOCOL)網絡控制消息協定。
ICMP的協定号為1。
ICMP封包就像是IP封包的小弟,總頂着IP封包的名頭出來混。
因為ICMP封包是在IP封包内部的,如圖:

ICMP屬于TCP/IP協定族,工作在網絡層(第三層),用于在IP主機、路由器之間傳遞控制消息。
控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸使用者資料,但是對于使用者資料的傳遞起着重要的作用。
2、ICMP典型運用—ping
ICMP的一個典型應用是Ping。
Ping是檢測網絡連通性的常用工具,同時也能夠收集其他相關資訊。
使用者可以在Ping指令中指定不同參數,如ICMP封包長度、發送的ICMP封包個數、等待回複響應的逾時時間等,裝置根據配置的參數來構造并發送ICMP封包,進行Ping測試。
Ping常用的配置參數說明如下:
1. -a source-ip-address指定發送ICMP ECHO-REQUEST封包的源IP位址。如果不指定源IP位址,将采用出接口的IP位址作為ICMP ECHO-REQUEST封包發送的源位址。
2. -c count指定發送ICMP ECHO-REQUEST封包次數。預設情況下發送5個ICMP ECHO-REQUEST封包。
3. -h ttl-value指定TTL的值。預設值是255。
4. -t timeout指定發送完ICMP ECHO-REQUEST後,等待ICMP ECHO-REPLY的逾時時間。
Ping指令的輸出資訊中包括目的位址、ICMP封包長度、序号、TTL值、以及往返時間。序号是包含在Echo回複消息(Type=0)中的可變參數字段,TTL和往返時間包含在消息的IP頭中。
3、ICMP典型運用—Tracert
ICMP的另一個典型應用是Tracert。
Tracert基于封包頭中的TTL值來逐跳跟蹤封包的轉發路徑。
為了跟蹤到達某特定目的位址的路徑,源端首先将封包的TTL值設定為1。
該封包到達第一個節點後,TTL逾時,于是該節點向源端發送TTL逾時消息,消息中攜帶時間戳。
然後源端将封包的TTL值設定為2,封包到達第二個節點後逾時,該節點同樣傳回TTL逾時消息,以此類推,直到封包到達目的地。
這樣,源端根據傳回的封包中的資訊可以跟蹤到封包經過的每一個節點,并根據時間戳資訊計算往返時間。
Tracert是檢測網絡丢包及時延的有效手段,同時可以幫助管理者發現網絡中的路由環路。
Tracert常用的配置參數說明如下:
1. -a source-ip-address指定tracert封包的源位址。
2. -f first-ttl指定初始TTL。預設值是1。
3. -m max-ttl指定最大TTL。預設值是30。
4. -name使能顯示每一跳的主機名。
5. -p port指定目的主機的UDP端口号。
4、ICMP類型
ICMP封包主要有兩大功能:查詢封包和差錯封包。
對于查詢封包,常用的ping指令,以及用于無盤系統啟動擷取網絡子網路遮罩查詢封包,以及時間戳封包,目标主機收到傳回相應的格式的回應包;
對于差錯封包在一些情況下目标主機不會傳回對應的資料包:
5、目的不可達(Destination Unreachable Message)
日常生活中,郵寄包裹會經過多個傳遞環節,任意一環如果無法傳下去,都會傳回寄件人,并附上無法郵寄的原因。
同理,當路由器收到一個無法傳遞下去的IP封包時,會發送ICMP目的不可達封包(Type為3)給IP封包的源發送方。
封包中的Code就表示發送失敗的原因。
Code
0 = net unreachable;
1 = host unreachable;
2 = protocol unreachable;
3 = port unreachable;
4 = fragmentation needed and DF set;
5 = source route failed.
6、逾時(Time Exceeded Message)
網絡傳輸IP資料報的過程中,如果IP資料包的TTL值逐漸遞減為0時,需要丢棄資料報。
這時,路由器需要向源發送方發送ICMP逾時封包(Type為11),Code為0,表示傳輸過程中逾時了。
一個IP資料報可能會因為過大而被分片,然後在目的主機側把所有的分片重組。
如果主機遲遲沒有等到所有的分片封包,就會向源發送方發送一個ICMP逾時封包,Code為1,表示分片重組逾時了。
7、參數錯誤封包(Parameter Problem Message)
當路由器或主機處理資料報時,發現因為封包頭的參數錯誤而不得不丢棄封包時,需要向源發送方發送參數錯誤封包(Type為12)。
當Code為0時,封包中的Pointer表示錯誤的位元組位置。
8、源冷卻(Source Quench Message)
路由器在處理封包時會有一個緩存隊列。
如果超過最大緩存隊列,将無法處理,進而丢棄封包。
并向源發送方發一個ICMP源冷卻封包(Type為4),告訴對方:“嘿,我這裡客滿了,你遲點再來。”
9、重定向(Redirect Message)
想像一下,在公司中,有人來你的項目組問你某某某在哪兒。
你一想,我們組沒有這人啊。
你肯定就會說,我們組沒有這号人,你去其他組看看。
當路由收到IP資料報,發現資料報的目的位址在路由表上沒有,它就會發ICMP重定向封包(Type為5)給源發送方,提醒它想要發送的位址不在,去其他地方找找吧。
10、請求回顯或回應答覆(Echo or Echo Reply Message)
Type(8)是請求回顯封包(Echo);
Type(0)是回應答覆封包(Echo Reply)。
請求回顯或回應答覆封包屬于查詢封包。
Ping就是用這種封包進行查詢和回應。
11、時間戳或時間戳請求(Timestamp or Timestamp Reply Message)
時間戳封包是用來記錄收發以及傳輸時間的封包。
Originate Timestamp記錄的是發送方發送封包的時刻;
Receive Timestamp記錄的是接收方收到封包的時刻;
Transmit Timestamp表示回顯這最後發送封包的時刻。
12、資訊請求或資訊響應
這種封包是用來找出一個主機所在的網絡個數(一個主機可能會在多個網絡中)。
封包的IP消息頭的目的位址會填為全0,表示this,源位址會填為源IP所在的網絡IP。
好了,今天的分享就到這了~
也可以加我的微信一起交流學習?
為了友善廣大網絡愛好學習者一起學(聚)習(衆)交(搞)流(基),特開設QQ群-思科華為資料庫④群:797202429(①②③群已滿),裡面已經上傳大量網絡學習資料,歡迎廣大網絡工程師進群學習!
掃我入群?
我就知道愛學習的你“在看”