互聯網控制消息協議第六版
互聯網控制消息協議第六版(英語:Internet Control Message Protocol Version 6或ICMP for IPv6,縮寫:ICMPv6)是互聯網控制消息協議(ICMP)在IPv6協議下的新版本。它在 RFC 4443 中被定義,其協議號(IPv6的Next Header域)為58。
ICMPv6協議定義在OSI模型中的網絡層(Internet Layer),用於報告IPv6節點數據包處理過程中的錯誤消息和完成一些網絡診斷功能(如ping和traceroute等)。它是IPv6體系總體的的一個組成部分,其基本的協議[1]必須被所有IPv6實現和IPv6節點所完整支持。
除了ICMPv4原有的功能,ICMPv6還承擔了IPv4其他協議所實現的功能或IPv6所需的新功能,例如鄰居發現協議(同時取代了ARP/RARP,SEND作為其安全擴展)、多播管理(取代了IGMP)。
數據包格式
IANA(因特網地址授權委員會)定義ICMPv6的協議號為58。
其消息分為兩類,錯誤消息和信息消息。ICMPv6通過IPv6數據包傳送,並且IPv6的擴展頭需要被設置。
下文描述了ICMPv6使用的控制消息集的格式。
格式
ICMPv6包有類型(Type),代碼(Code),校驗和(Checksum)和消息體(Message Body)等幾個字段。類型域為8位,用來表示消息的類型,如果最高有效位是0(即值的範圍是0-127),則表示一個錯誤消息;如果是1,則該ICMPv6包是一個信息消息。代碼域同樣為8位,其內容取決於消息類型,用來區分某一類型的多條消息。校驗和用來檢測ICMP消息和IPv6包的錯誤。消息體的內容取決於消息類型。
位偏移 | 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 | 多播監聽器查詢(多播監聽器發現) | |
131 | 多播監聽器報告(多播監聽器發現) | |
132 | 多播監聽器硬蛋(多播監聽器發現) | |
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源地址和目的地址。當節點有多個單播地址,則要注意源地址的選擇。
消息源地址的確定
如果節點有多個單播地址,則通過下面的規則確定源地址。
- 如果消息是對發送到其中一個單播(unicast)地址消息的回應,則使用該地址作為源地址。
- 如果消息是對發送到其他地址消息的回應,如:
則源地址必須為該節點所屬的一個多播地址,且源地址的選擇應該與從該節點發出併到達同一目的地址的其他數據包使用相同的規則,即與其他IPv6協議的數據包使用相同的路由表。如果有多個路由可以到達ICMPv6包的目的地址,則可以任選其一。
傳送和處理規則
當 ICMPv6節點收到數據包時,它應按照消息的類型採取動作。
- 未知的ICMPv6錯誤消息交由上層協議處理。
- 未知的ICMPv6消息信息丟棄。
- 所有的錯誤消息必須足夠長但不超過IPv6最小的MTU。
- 禁止回應以下的消息或數據包:
- 必須限制ICMPv6錯誤消息的產生速率。
為避免網絡過負載,ICMPv6協議需要限制發送至同一地址的錯誤消息的數目。例如,如果一個節點持續轉發錯誤的包,則ICMP會通知第一個錯誤包,然後根據一個固定的最小周期或者最大的網絡負載,周期性提醒。禁止以ICMP錯誤消息回應錯誤消息包。