網際網路控制訊息協定第六版

互联网协议族的核心协议之一。主要用于IPv6网络,以指示网络操作中的错误或指示消息

網際網路控制訊息協定第六版(英語:Internet Control Message Protocol Version 6ICMP for IPv6,縮寫:ICMPv6)是網際網路控制訊息協定ICMP)在IPv6協定下的新版本。它在 RFC 4443 中被定義,其協定號(IPv6的Next Header域)為58。

ICMPv6協定定義在OSI模型中的網路層Internet Layer),用於報告IPv6節點封包處理過程中的錯誤訊息和完成一些網路診斷功能(如pingtraceroute等)。它是IPv6體系總體的的一個組成部分,其基本的協定[1]必須被所有IPv6實現和IPv6節點所完整支援。

除了ICMPv4原有的功能,ICMPv6還承擔了IPv4其他協定所實現的功能或IPv6所需的新功能,例如鄰居發現協定(同時取代了ARP/RARPSEND作為其安全擴充)、多播管理(取代了IGMP)。

封包格式

IANA(網際網路位址授權委員會)定義ICMPv6的協定號為58。

其訊息分為兩類,錯誤訊息和資訊訊息。ICMPv6通過IPv6封包傳送,並且IPv6的擴充頭需要被設定。

下文描述了ICMPv6使用的控制訊息集的格式。

格式

ICMPv6包有類型(Type),代碼(Code),校驗和(Checksum)和訊息體(Message Body)等幾個欄位。類型域為8位元,用來表示訊息的類型,如果最高有效位是0(即值的範圍是0-127),則表示一個錯誤訊息;如果是1,則該ICMPv6包是一個資訊訊息。代碼域同樣為8位元,其內容取決於訊息類型,用來區分某一類型的多條訊息。校驗和用來檢測ICMP訊息和IPv6包的錯誤。訊息體的內容取決於訊息類型。

ICMPv6 封包
位偏移 0–7 8–15 16–31
0 類型 代碼 校驗和
32 訊息體

訊息類型

類型 代表的意義 詳細描述
ICMPv6錯誤訊息
1 目的地不可達 通知源位址,不能傳送封包。
2 封包太大 通知源位址,封包太大無法轉發。
3 逾時 通知源位址,IPv6封包的「躍點限制」[2]已過期。
4 參數問題 通知源位址,在處理 IPv6報頭或 IPv6擴充報頭時發生錯誤
100 實驗
101 實驗
127 保留
ICMPv6資訊訊息
128 回顯請求 用來確定 IPv6節點在網路上是否可用。
129 回顯應答 對「回顯請求」的應答。
130 多播監聽器查詢(多播監聽器發現英語Multicast Listener Discovery
131 多播監聽器報告(多播監聽器發現英語Multicast Listener Discovery
132 多播監聽器硬蛋(多播監聽器發現英語Multicast Listener Discovery
133 路由器請求(鄰居發現協定 一個網路的節點向路由器請求所在網路的自動組態資訊
134 路由器公告(鄰居發現協定 對「路由器請求」的應答。
135 鄰居請求(鄰居發現協定 一個網路的節點向其他節點請其的網路組態資訊
136 鄰居公告(鄰居發現協定 對「鄰居請求」的應答
137 重新導向資訊(鄰居發現協定 路由器宣告路由的
138 路由器計數重設定
139 ICMP節點資訊查詢
140 ICMP節點資訊回應
141 倒轉的鄰居發現協定的請求資訊
142 倒轉的鄰居發現協定的公告資訊
200 實驗
201 實驗
255 保留

訊息的校驗和

ICMPv6 包的校驗和是一個 16 位的二補數,計算訊息類型域開始的整個 ICMPv6 訊息以及 IPv6 頭的偽頭標(pseudo-header)。計算校驗和時,校驗和預設為 0。偽頭標中的下一個頭標(Next Header)值為 58。(注意:ICMPv6 校驗和中的偽頭標的內容與 IPv4 中不同,見 IPv6)。

ICMPv6訊息傳送

ICMPv6通過IPv6封包傳送,當節點傳送或轉發ICMPv6訊息時,必須確定訊息的IPv6源位址和目的位址。當節點有多個單播位址,則要注意源位址的選擇。

訊息源位址的確定

如果節點有多個單播位址,則通過下面的規則確定源位址。

  1. 如果訊息是對傳送到其中一個單播(unicast)位址訊息的回應,則使用該位址作為源位址。
  2. 如果訊息是對傳送到其他位址訊息的回應,如:
    • 多播(multcast)組位址
    • 該節點實現的任播(anycast)位址
    • 其他節點的單播位址

則源位址必須為該節點所屬的一個多播位址,且源位址的選擇應該與從該節點發出併到達同一目的位址的其他封包使用相同的規則,即與其他IPv6協定的封包使用相同的路由表。如果有多個路由可以到達ICMPv6包的目的位址,則可以任選其一。

傳送和處理規則

當 ICMPv6節點收到封包時,它應按照訊息的類型採取動作。

  1. 未知的ICMPv6錯誤訊息交由上層協定處理。
  2. 未知的ICMPv6訊息資訊丟棄。
  3. 所有的錯誤訊息必須足夠長但不超過IPv6最小的MTU
  4. 禁止回應以下的訊息或封包:
    1. ICMPv6錯誤訊息
    2. ICMPv6重新導向訊息[3]
    3. 傳送到IPv6多播位址的封包。(有兩種例外情況。[4]
    4. 傳送到資料鏈路層廣播位址的封包。(例外情況同上[4]
    5. 源位址不確定的封包。
  5. 必須限制ICMPv6錯誤訊息的產生速率。

為避免網路過負載,ICMPv6協定需要限制傳送至同一位址的錯誤訊息的數目。例如,如果一個節點持續轉發錯誤的包,則ICMP會通知第一個錯誤包,然後根據一個固定的最小周期或者最大的網路負載,周期性提醒。禁止以ICMP錯誤訊息回應錯誤訊息包。

參見

參考

延伸閱讀

註腳

  1. ^ RFC 4443 中定義的訊息類型和處理動作
  2. ^ 相當於IPv4中的TTL,見IPv6
  3. ^ Narten, T., Nordmark, E., and W. Simpson, "Neighbor Discovery for IP Version 6 (IPv6)", RFC 2461, December 1998.
  4. ^ 4.0 4.1
    1. IPv6多播的「路徑MTU發現」時傳送「封包太大」錯誤訊息
    2. 報告未知的IPv6選項時傳送「參數問題」錯誤訊息