ICMPv6

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

基本功能,報文,封裝,格式,報文源地址的測定,校驗和的計算,報文處理規則,相關協定,

基本功能

網際網路控制信息協定是IP協定的一個重要組成部分。ICMPv6向源節點報告關於目的地址傳輸IPv6包的錯誤和信息,具有差錯報告、網路診斷、鄰節點發現和多播實現等功能。在IPv6中,ICMPv6實現IPv4ICMPARPIGMP的功能。
ICMPv6的基本功能ICMPv6的基本功能
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報文封裝在IPv6中。
ICMPv6報文的封裝ICMPv6報文的封裝
IPv6包結構
IPv6基本首部
擴展首部……
ICMPv6報文首部
ICMPv6報文體

格式

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

報文源地址的測定

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

校驗和的計算

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

報文處理規則

  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上。

相關協定

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

相關詞條

熱門詞條

聯絡我們