1. 概述
在 IPv4 和 IPv6 網絡共存的過渡期,NAT64(Network Address Translation 64)是一種關鍵技術,用于實現 IPv6-only 網絡與 IPv4-only 網絡的互操作。NAT64 前綴轉換通過將 IPv4 地址嵌入到 IPv6 地址中,允許 IPv6 單棧主機訪問 IPv4 網絡資源。這種機制在 IPv6 過渡的后期階段尤為重要,適用于 IPv6 占主導地位的網絡環境。
NAT64 前綴轉換的核心是將 IPv4 地址(32 位)嵌入到一個 IPv6 地址(128 位)中,使用特定的前綴和規則生成對應的 IPv6 地址。這種嵌入方式由 RFC 6052(“IPv6 Addressing of IPv4/IPv6 Translators”)定義,支持多種前綴長度(/32、/40、/48、/56、/64、/96),并允許靈活的地址表示形式。
2. NAT64 前綴概述
NAT64 前綴是用于構造 IPv4 節點在 IPv6 網絡中的地址的前綴,長度可以是 32、40、48、56、64 或 96 位。這些前綴分為兩種類型:
- 網絡特定前綴(NSP, Network-Specific Prefix):由組織分配,通常是組織 IPv6 前綴的一個子網,長度可以是上述任意值。
- 公認前綴(WKP, Well-Known Prefix):固定為 64:ff9b::/96,只能使用 96 位前綴格式。
NAT64 前綴生成的 IPv6 地址用于 IPv6 主機與 IPv4 主機通信,但網絡中的主機不會直接使用帶有 NAT64 前綴的 IPv6 地址。這些地址主要由 NAT64 設備(如網關)用于地址轉換和路由。
3. NAT64 前綴的地址格式
根據 RFC 6052,IPv4 嵌入的 IPv6 地址由以下部分組成:
- 前綴部分:長度為 32、40、48、56、64 或 96 位,表示網絡標識。
- IPv4 地址部分:32 位,直接嵌入到 IPv6 地址的特定位置。
- 保留位:在某些前綴長度下(例如 /32、/40、/48、/56),地址的第 64 位到 71 位(即第 5 段的第 0 位到第 7 位)必須設置為 0,作為保留位。
- 填充位:在某些前綴長度下,可能需要額外的填充位(通常為 0)來補齊 128 位。
RFC 6052 定義了不同前綴長度下 IPv4 地址的嵌入位置,具體格式如下(參考 RFC 6052 Figure 1):
注意事項
- 保留位要求:對于 /32、/40、/48、/56 前綴,第 64 位到 71 位必須設置為 0,以確保地址格式的標準化。
- /96 前綴的特殊性:只有 /96 前綴允許直接使用點分十進制的 IPv4 地址表示,其他前綴必須使用十六進制。
- 地址簡化規則:IPv6 地址可以省略前導零和連續的全零段(用 :: 表示,但只能使用一次)。例如,2001:db8:122:344:0:0:192.0.2.33 可簡化為 2001:db8:122:344::192.0.2.33。
- 應用場景:NAT64 前綴轉換常用于 IPv6 單棧網絡訪問 IPv4 資源,配合 DNS64 解析 IPv4 地址到 IPv6 地址。
4. IPv4 地址嵌入規則
根據前綴長度,IPv4 地址的 32 位被嵌入到 IPv6 地址的不同位置。以下是具體規則和示例(以 IPv4 地址 192.0.2.33 為例):
2、示例
IPv6 前綴 | IPv4 地址 | 嵌入 IPv4 地址的 IPv6 地址 |
---|---|---|
2001:db8::/32 | 192.0.2.33 | 2001:db8:c000:221:: |
2001:db8:100::/40 | 192.0.2.33 | 2001:db8:1c0:2:21:: |
2001:db8:122::/48 | 192.0.2.33 | 2001:db8:122:c000:2:2100:: |
2001:db8:122:300::/56 | 192.0.2.33 | 2001:db8:122:3c0:0:221:: |
2001:db8:122:344::/64 | 192.0.2.33 | 2001:db8:122:344:c0:2:2100:: |
2001:db8:122:344::/96 | 192.0.2.33 | 2001:db8:122:344::192.0.2.33 |
1. 前綴:2001:db8::/32
-
嵌入結果:2001:db8:c000:221::
-
完整形式:2001:0db8:c000:0221:0000:0000:0000:0000
-
簡寫規則:
-
每段前導零省略,例如 0db8 簡化為 db8,0221 簡化為 221。
-
最后四段連續全零段(0000:0000:0000:0000)用 :: 替換,且 :: 只能使用一次。
-
-
位分配:
-
0-31 位(前綴):2001:db8(32 位)。
-
32-63 位(IPv4 地址):c000:0221,對應 IPv4 地址 192.0.2.33(192.0 → c000,2.33 → 02:21)。
-
64-71 位(保留位):設置為 00(第 5 段高 8 位)。
-
72-127 位(填充位):全為 0(第 5 段低 8 位到第 8 段)。
-
-
IPv4 映射:192.0.2.33 的十六進制表示為 c0.00.02.21(192 → c0,0 → 00,2 → 02,33 → 21),嵌入到第 3 和第 4 段,形成 c000:0221。
2. 前綴:2001:db8:100::/40
-
嵌入結果:2001:db8:1c0:2:21::
-
完整形式:2001:0db8:01c0:0002:0021:0000:0000:0000
-
簡寫規則:
-
每段前導零省略,例如 0db8 簡化為 db8,01c0 簡化為 1c0,0002 簡化為 2,0021 簡化為 21。
-
最后三段連續全零段(0000:0000:0000)用 :: 替換。
-
-
位分配:
-
0-39 位(前綴):2001:db8:1(40 位,第 3 段高 8 位)。
-
40-71 位(IPv4 地址):c0:0002:0021,對應 IPv4 地址 192.0.2.33(192 → c0,0.2 → 0002,33 → 0021)。
-
72-79 位(保留位):設置為 00(第 5 段高 8 位)。
-
80-127 位(填充位):全為 0(第 5 段低 8 位到第 8 段)。
-
-
IPv4 映射:192.0.2.33 的 32 位被拆分為三部分(8 位 + 16 位 + 8 位),嵌入到第 3 段低 8 位(c0)、第 4 段(0002)、第 5 段高 8 位(0021),形成 1c0:2:21。
3. 前綴:2001:db8:122::/48
-
嵌入結果:2001:db8:122:c000:2:2100::
-
完整形式:2001:0db8:0122:c000:0002:2100:0000:0000
-
簡寫規則:
-
每段前導零省略,例如 0db8 簡化為 db8,0122 簡化為 122,0002 簡化為 2。
-
最后兩段連續全零段(0000:0000)用 :: 替換。
-
-
位分配:
-
0-47 位(前綴):2001:db8:122(48 位)。
-
48-79 位(IPv4 地址):c000:0002:2100,對應 IPv4 地址 192.0.2.33(192.0 → c000,2 → 0002,33 → 2100)。
-
80-87 位(保留位):設置為 00(第 6 段高 8 位)。
-
88-127 位(填充位):全為 0(第 6 段低 8 位到第 8 段)。
-
-
IPv4 映射:192.0.2.33 的 32 位被拆分為三部分(16 位 + 8 位 + 8 位),嵌入到第 4 段(c000)、第 5 段(0002)、第 6 段高 8 位(2100),形成 c000:2:2100。
4. 前綴:2001:db8:122:300::/56
-
嵌入結果:2001:db8:122:3c0:0:221::
-
完整形式:2001:0db8:0122:03c0:0000:0221:0000:0000
-
簡寫規則:
-
每段前導零省略,例如 0db8 簡化為 db8,0122 簡化為 122,03c0 簡化為 3c0,0221 簡化為 221。
-
最后兩段連續全零段(0000:0000)用 :: 替換。
-
-
位分配:
-
0-55 位(前綴):2001:db8:122:3(56 位,第 4 段高 8 位)。
-
56-87 位(IPv4 地址):c0:0000:0221,對應 IPv4 地址 192.0.2.33(192 → c0,0 → 0000,2.33 → 0221)。
-
88-95 位(保留位):設置為 00(第 6 段高 8 位)。
-
96-127 位(填充位):全為 0(第 6 段低 8 位到第 8 段)。
-
-
IPv4 映射:192.0.2.33 的 32 位被拆分為三部分(8 位 + 16 位 + 8 位),嵌入到第 4 段低 8 位(c0)、第 5 段(0000)、第 6 段高 8 位(0221),形成 3c0:0:221。
5. 前綴:2001:db8:122:344::/64
-
嵌入結果:2001:db8:122:344:c0:2:2100::
-
完整形式:2001:0db8:0122:0344:00c0:0002:2100:0000
-
簡寫規則:
-
每段前導零省略,例如 0db8 簡化為 db8,0122 簡化為 122,0344 簡化為 344,00c0 簡化為 c0,0002 簡化為 2。
-
最后一段全零(0000)用 :: 替換。
-
-
位分配:
-
0-63 位(前綴):2001:db8:122:344(64 位)。
-
64-95 位(IPv4 地址):00c0:0002:2100,對應 IPv4 地址 192.0.2.33(192 → 00c0,0.2 → 0002,33 → 2100)。
-
96-127 位(填充位):全為 0(第 7 段低 8 位到第 8 段)。
-
-
IPv4 映射:192.0.2.33 的 32 位被拆分為三部分(8 位 + 8 位 + 16 位),嵌入到第 5 段(00c0)、第 6 段高 8 位(0002)、第 6 段低 8 位和第 7 段高 8 位(2100),形成 c0:2:2100。
6. 前綴:2001:db8:122:344::/96
-
嵌入結果:2001:db8:122:344::192.0.2.33
-
完整形式:2001:0db8:0122:0344:0000:0000:c000:0221
-
簡寫規則:
-
每段前導零省略,例如 0db8 簡化為 db8,0122 簡化為 122,0344 簡化為 344。
-
第 5 和第 6 段連續全零(0000:0000)用 :: 替換。
-
根據 RFC 6052 第 2.4 節,最后 32 位(第 7 和第 8 段)直接使用 IPv4 地址的點分十進制形式 192.0.2.33,而非十六進制 c000:0221。
-
-
位分配:
-
0-95 位(前綴):2001:db8:122:344:0:0(96 位)。
-
96-127 位(IPv4 地址):c000:0221,對應 IPv4 地址 192.0.2.33(192.0 → c000,2.33 → 0221),但表示為 192.0.2.33。
-
-
IPv4 映射:192.0.2.33 的 32 位直接占用第 7 和第 8 段(c000:0221),但 RFC 6052 允許使用點分十進制形式 192.0.2.33,形成 x:x:x:x:x:x:d.d.d.d 格式,提高可讀性。
特殊說明:/96 前綴的點分十進制表示
對于 /96 前綴,IPv4 地址的 32 位直接占用 IPv6 地址的最后 32 位(第 7 和第 8 段)。RFC 6052 第 2.4 節明確規定,IPv4 地址可以以點分十進制形式表示(d.d.d.d),形成 x:x:x:x:x:x:d.d.d.d 的格式。這種表示方式:
- 提高可讀性:直接使用 IPv4 的點分十進制形式(如 192.0.2.33)比十六進制(如 c000:0221)更直觀。
- 簡化轉換:在 NAT64 場景中,設備可以直接解析點分十進制部分,減少地址轉換的復雜性。
- 適用場景:常用于 NAT64 和 DNS64 環境,方便 IPv6 主機訪問 IPv4 資源。
公認前綴(WKP):
- WKP 為 64:ff9b::/96,固定使用 /96 前綴。
- 示例:IPv4 地址 192.0.2.33 嵌入 WKP 后為 64:ff9b::192.0.2.33。