網際網路控制訊息協定第六版
網際網路控制訊息協定第六版(英語: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錯誤訊息回應錯誤訊息包。
參見
- 網際網路控制訊息協定(ICMP)
- IPv6