複製鏈接
請複製以下鏈接發送給好友

ICMPv6

鎖定
ICMPv6(Internet Control Message Protocol version 6),即互聯網控制信息協議版本六。ICMPv6為了與IPv6配套使用而開發的互聯網控制信息協議。與IPv4一樣,IPv6也需要使用ICMP,舊版本的ICMP不能滿足IPv6全部要求,因此開發了新版本的ICMP,稱為ICMPv6。

ICMPv6基本功能

ICMPv6的基本功能 ICMPv6的基本功能
互聯網控制信息協議是IP協議的一個重要組成部分。ICMPv6向源節點報告關於目的地址傳輸IPv6包的錯誤和信息,具有差錯報告、網絡診斷、鄰節點發現和多播實現等功能。在IPv6中,ICMPv6實現IPv4ICMPARP和IGMP的功能。
IANA(因特網地址授權委員會)定義ICMPv6的協議號為58。
ND和NI協議也是基於ICMPv6。
  1. 通告網絡錯誤。比如,某台主機或整個網絡由於某些故障不可達。如果有指向某個端口號的TCP或UDP包沒有指明接受端,這也由ICMP報告。
  2. 通告網絡擁塞。當路由器緩存太多包,由於傳輸速度無法達到它們的接收速度,將會生成“ ICMP 源結束”信息。對於發送者,這些信息將會導致傳輸速度降低。當然,更多的 ICMP 源結束信息的生成也將引起更多的網絡擁塞,所以使用起來較為保守。
  3. 協助解決故障。ICMP支持Echo功能,即在兩個主機間一個往返路徑上發送一個包。Ping是一種基於這種特性的通用網絡管理工具,它將傳輸一系列的包,測量平均往返次數並計算丟失百分比。
  4. 通告超時。如果一個IP包的TTL降低到零,路由器就會丟棄此包,這時會生成一個 ICMP 包通告這一事實。TraceRoute是一個工具,它通過發送小TTL值的包及監視ICMP超時通告可以顯示網絡路由

ICMPv6報文

ICMPv6封裝

ICMPv6報文的封裝 ICMPv6報文的封裝
ICMPv6報文封裝在IPv6中。
IPv6包結構
IPv6基本首部
擴展首部……
ICMPv6報文首部
ICMPv6報文體

ICMPv6格式

ICMPv6報文總體上被分為兩種類型:差錯報文和信息報文。差錯報文的識別是通過在消息類型字段值的高比特位中設置0。因此,差錯報文的報文類型從0到127;信息報文的類型從128到255。 [1] 
ICMPv6報文的基本格式
類型(1字節)
代碼(1字節)
校驗和(2字節)
ICMP報文體(可變長)
  • 類型:標識ICMPv6報文類型,它的值根據報文的內容來確定。
  • 代碼:用於確定ICMPv6進一步的信息,對同一類型的報文進行了更詳細的分類。
  • 校驗和:用於檢測ICMPv6的報文是否正確傳送。
  • 報文體:用於返回出錯的參數和記錄出錯報文的片段,幫助源節點判斷錯誤的原因或是其它參數。

ICMPv6報文源地址的測定

一個送出ICMPv6報文的節點在計算校驗和以前要在IPv6首部中決定源地址和目標IPv6地址。如果節點有多於一個的單目地址,它必須按以下的原則選定源地址:
  1. 如果報文是對發往該節點的某一單目地址進行響應的,那應答報文的源地址必須是這個單目地址。
  2. 如果報文是對發往該節點為組員的多播組或任意播組的報文進行響應的,那麼應答報文的源地址必須是一個屬於接收到多播或任意播包接口的單目地址。
  3. 如果報文是對發往一個並不屬於該節點地址的報文進行響應的,那麼源地址必須是屬於該節點且最有利於診斷錯誤的那個單目地址。比如,如果報文是對一個不能正常轉發包的行為進行響應的,源地址就是那個屬於轉發包失敗的接口的單目地址。
  4. 另外,在轉發報文到目的地時,必須使用節點的路由表來決定由哪個接口轉發報文。 [1] 

ICMPv6校驗和的計算

校驗和16bit,計算範圍包括兩部分。
  • ICMPv6報文。
  • IPv6偽首部(偽首部中下一首部字段的值為58)。
IPv6的偽首部
源地址(16字節)
目的地址(16字節)
有效載荷長度(4字節)
0(3字節)
下一首部(=58,1字節)
計算方法:
  • 校驗和字段被設置為0。
  • ICMPv6對校驗範圍內的數據以16bit為單位,做1的補碼的加法運算。
  • 在ICMPv6首部校驗和字段中,置入此16bit的和。

ICMPv6報文處理規則

  1. 當接收到ICMPv6差錯報告報文時,如果無法識別具體的類型,必須將它交給上層協議模塊進行處理。
  2. 當接收到ICMPv6信息報文時,如果無法識別具體的類型,必須將它丟棄。
  3. 所有的ICMPv6差錯報告報文,都應該在IPv6所要求的最小MTU允許範圍內,儘可能多地包括引發該ICMPv6差錯報文的IPv6分組片段,以便給IPv6分組的源節點提供儘可能多的診斷信息。
  4. 在需要將ICMPv6報文上傳給其上層協議模塊處理的情況下,上層協議的具體類型,應該從封裝該ICMPv6報文的IPv6分組的下一首部字段中獲取。但是,如果該IPv6分組攜帶有很多擴展首部,則可能會導致有關上層協議類型的信息沒有被包含在ICMPv6報文中。這時,只能將該差錯報告報文在IP層處理完後丟棄掉。
  5. 不能產生ICMPv6差錯報告報文的發送情況:1、一個ICMPv6差錯報告報文。這主要是為了避免無休止地產生ICMPv6報文而引起網絡擁塞。2、一個發往多播地址的IPv6分組。但有兩個例外:當使用IPv6多播地址進行路徑MTU探測時,可以發送“報文過長”差錯報告報文;允許使用參數錯誤報文報告:存在不可識別的TLV可選項。3、鏈路層的多播報文。對這類報文也具有與上面第二類情況相同的例外。4、鏈路層的廣播報文。對這類報文也具有與上面第二類情況相同的例外。5、IPv6分組的源地址無法唯一確定一個單獨節點時,這種情況也不能夠引起ICMPv6差錯報告報文的發送。例如,IPv6不明確地址等。
  6. 最後,為了限制在發送ICMPv6差錯報告報文時對網絡帶寬和轉發處理的消耗,一個IPv6節點必須限制其發送ICMPv6差錯報告報文的速率。但是,這樣可能會導致一個差錯報告報文的源節點因為沒有及時收到報文出錯的報告而不斷地重發該錯誤報文。目前有幾種提供限制ICMPv6速率的方法,例如:1、基於計時器的方法。將發往某個源節點或所有源節點的ICMPv6差錯報告報文的速率,限制在每T時間段內只發送一個差錯報告報文之內。2、基於帶寬的方法。將某個網絡接口發送的ICMPv6差錯報告報文所佔用的帶寬限制在這個接口所在鏈路帶寬的某個比例F上。 [1] 

ICMPv6相關協議

ICMPv6出了具備IPv4 ICMP的基本功能外,還包含以下兩個功能: [2] 
(1)組播收聽發現協議(MLD,Multicast Listener Discovery)
該協議完成子網內的組播成員管理。MLD協議定義了3條ICMPv6消息:
組播收聽查詢消息:組播路由器向子網內的組播收聽者發送此消息,以獲取組播收聽者的狀態。
組播收聽者報告消息:組播收聽者向組播路由器彙報當前狀態,包括離開某個組播組。
組播收聽者
(2)鄰居發現協議(Neighbor Discovery)
鄰居發現協議實現了IPv6種的地址解析協議(ARP)、ICMPv6路由器發現協議以及ICMPv6重定向消息的功能,用來管理同一鏈路上結點間的通信。
該協議定義五條ICMPv6消息:
路由器通告消息:該路由器以組播方式向所在鏈路發送,宣告其可用性及其相關的挽留過配置參數。該消息發送有兩種方式,一種是非請求、週期性的路由器通告;另一種是請求的路由器通告,即收到主機發出的路由器請求後作為應答發出。
路由器請求消息:該消息由主機向本地路由器發出,要求其立即發送路由器通告消息。
鄰居請求消息:結點發送鄰居請求消息來請求鄰居的鏈路層地址,以驗證它先前所獲得並保存在緩存中的鄰居鏈路層地址的可達性,或者驗證自己的地址在本地鏈路上是否唯一。
鄰居通告消息:結點在收到鄰居請求消息或鏈路層地址改變時,發送鄰居通告消息,向鄰結點通告自己的鏈路地址信息。
重定向消息:路由器發送重定向消息告訴主機重新定向它發送分組到目的結點的路徑。
參考資料