IPv6 - 地址类型
IPv6 - 地址类型与格式
Section titled “IPv6 - 地址类型与格式”十六进制数制
Section titled “十六进制数制”IPv6 地址使用十六进制表示,这是一种 16 进制的数制。它使用数字 0-9 和字母 A-F(代表 10-15)。每个十六进制数字对应 4 位 (bit) 二进制。例如,十六进制的 ‘F’ 在二进制中是 ‘1111’,十六进制的 ‘2B’ 在二进制中是 ‘0010 1011’。
快速转换参考:二进制 ‘0000’ 是十六进制 ‘0’,‘0001’ 是 ‘1’,…,‘1001’ 是 ‘9’,‘1010’ 是 ‘A’,‘1011’ 是 ‘B’,‘1100’ 是 ‘C’,‘1101’ 是 ‘D’,‘1110’ 是 ‘E’,‘1111’ 是 ‘F’。
一个 IPv6 地址长 128 位,而 IPv4 地址长 32 位。它由八组四个十六进制数字(每组 16 位)组成,各组之间用冒号分隔。
例如,一个 128 位的 IPv6 地址(二进制):
0010000000000001 0000110110111000 0000000000000000 0001000100010001 0000000000000000 0000000000000000 0010111100111011 0000001010101010
转换为十六进制,则为:
2001:0DB8:0000:1111:0000:0000:2F3B:02AA
为了使 IPv6 地址更易于管理,可以应用两条缩写规则:
规则 1:省略每组 16 位数字中的前导零。例如,‘0DB8’ 可以写成 ‘DB8’,‘0000’ 可以写成 ‘0’。
Applying Rule 1 to the example: 2001:DB8:0:1111:0:0:2F3B:2AA
规则 2:一个由连续的 16 位全零组组成的序列可以用双冒号 ’::’ 替换。这在一个地址中只能使用一次,以避免歧义。
Applying Rule 2 to the example (the two ‘0:0’ groups): 2001:DB8:0:1111::2F3B:2AA
如果有多个连续的零块,只能使用 ’::’ 压缩其中一块。例如,2001:0:0:0:ABCD:0:0:EF 不能压缩成 2001::ABCD::EF。它可以是 2001::ABCD:0:0:EF 或 2001:0:0:0:ABCD::EF。通常,压缩最长的连续零块。
在大多数 IPv6 单播地址中,后 64 位构成接口 ID (IID),它在子网 (subnet) 上唯一标识一个接口。前 64 位通常表示网络前缀。
生成 IID 的一种方法是使用修改的 EUI-64 (Extended Unique Identifier) 格式。这涉及取一个 48 位的 MAC 地址,将其分成两个 24 位的部分,在中间插入 ‘FFFE’(16 位),然后反转第 7 位(通用/本地 (U/L) 位)。例如,如果 MAC 地址是 00-1A-2B-3C-4D-5E:
- 分割: 001A2B 和 3C4D5E。
- 插入 FFFE: 001A2BFFFE3C4D5E。
- 反转第 7 位: 第一个字节是 ‘00’(二进制 00000000)。第 7 位是 0。反转后变成 1。所以,‘00’ 变成 ‘02’(二进制 00000010)。
- 结果 IID: 021A:2BFF:FE3C:4D5E。
然而,由于 EUI-64 存在隐私问题(因为它嵌入了固定的 MAC 地址),现代操作系统通常使用隐私扩展 (Privacy Extensions - RFC 4941)。这些扩展生成临时的、随机的 IID,它们会随时间变化,从而更难跟踪设备。
全局单播地址 (GUA)
Section titled “全局单播地址 (GUA)”GUA 是全球唯一且可在互联网上路由的地址,类似于公共 IPv4 地址。目前大多数 GUA 从 2000::/3 范围分配(意味着前三位是 ‘001’)。
典型的 GUA 结构是:全局路由前缀 (Global Routing Prefix) (48 位) | 子网 ID (Subnet ID) (16 位) | 接口 ID (Interface ID) (64 位)。
- 全局路由前缀:通常由 ISP 分配给组织。例如,2001:0DB8:ACAD::/48。
- 子网 ID:组织用于创建内部子网。例如,使用这 16 位,组织可以创建多达 65,536 个子网(例如,2001:0DB8:ACAD:0001::/64、2001:0DB8:ACAD:0002::/64 等)。
- 接口 ID:最后 64 位,用于标识该子网上的特定主机。
链路本地地址
Section titled “链路本地地址”这些地址仅用于单个网络链路(例如,以太网段)上的通信。它们不能被路由到本地链路之外。链路本地地址对于 NDP 功能(如地址解析和路由器发现)至关重要。
它们总是以 FE80::/10 前缀开头。通常,FE80 之后的 54 位(直到第 64 位)被设置为零,这使得特定链路上的前缀实际上是 FE80::/64。剩余的 64 位是接口 ID。
示例:FE80::021A:2BFF:FE3C:4D5E(其中 IID 是 EUI-64 派生或随机生成的)。
唯一本地地址 (ULA)
Section titled “唯一本地地址 (ULA)”ULA (RFC 4193) 旨在用于站点或一组站点内部的本地使用。它们是全球唯一的(如果生成正确,具有很高概率),但不打算在公共互联网上路由。它们在概念上类似于 IPv4 私有地址(例如,10.0.0.0/8)。
ULA 的前缀是 FC00::/7。第 8 位(L 位)对于本地分配的 ULA 设置为 ‘1’,使得前缀成为 FD00::/8。结构是:FD (8 位) | 全局 ID (Global ID) (40 位) | 子网 ID (Subnet ID) (16 位) | 接口 ID (Interface ID) (64 位)。
- FD: 指示本地分配的 ULA。
- 全局 ID:一个 40 位伪随机生成的值,用于确保在使用 ULA 的站点合并时具有唯一性。不应随意选择。
- 子网 ID:16 位,用于站点内部的子网划分。
- 接口 ID:64 位,用于主机。
示例:FDe3:a45b:9876:0001::1234(其中 e3a45b9876 是 40 位全局 ID)。
IPv6 单播地址的范围:
Section titled “IPv6 单播地址的范围:”链路本地地址仅限于单个链路。唯一本地地址通常在组织或一组合作站点内部路由,但不跨越全球互联网。全局单播地址在全球范围内路由。理解这些范围对于网络设计和故障排除至关重要。