一、IPv6地址的特点与范围
相比于IPv4,IPv6地址有以下几个显著不同:
- 地址长度从32位增加到了128位,地址空间极大。
- IPv6引入了更为灵活的地址类型和范围,如:
- 链路本地地址(Link-local):仅在同一链路中有效;
- 站点本地地址(Site-local)(后来被弃用);
- 全球单播地址(Global Unicast):可在Internet中使用;
- 组播地址(Multicast):用于多点通信;
- 没有广播地址(IPv4中的广播在IPv6中由组播替代);
⚠️ 注意 IPv6中已经废弃了IPv4中的“广播地址”,改用组播来实现相同的功能(参考RFC4291)。
二、接口标志符(IID)概念
IPv6地址通常由两部分组成:
| 网络前缀(前64位) | 接口标志符(后64位) |
其中接口标识符(Interface Identifier, IID) 唯一标识同一网络中的一台主机或一个接口。也就是说,在一个子网中(同一前缀)中,每台设备的IID必须唯一。
三、EUI-48与EUI-64标识符
EUI(Extended Unique Identifier, 扩展唯一标识符)是IEEE定义的硬件地址格式标准。
- EUI-48: 就是我们常说的MAC地址(48位 = 6字节)
- 例如:
00-11-22-33-44-55
- 例如:
- EUI-64: 是扩展版的64位版本,用于IPv6 IID的生成。
在IEEE中,EUI地址由两部分组成:
OUI(组织唯一标识符,24位) | 扩展标识符(24或40位) |
四、从EUI-48 (MAC) 转化为EUI-64的步骤
IPv6 接口标识符通常由设备MAC地址派生而来,但需要经过一个特定的转换过程: 现在假设我们有一个MAC地址:
EUI-48:00-11-22-33-44-55
- 把MAC地址分为两部分:
前三字节:00-11-22
后三字节:33-44-55
- 在中间插入固定的16位FFFE
EUI-64:00-11-22-FF-FE-33-44-55
- 翻转第一个字节的第7位(u位)
- u位表示地址是本地管理(Local)还是全局唯一(Universal)。
- 如果原来是0(全局唯一),则改成1;
- 如果原来是1(本地),则改成0。 列如:
原:00(00000000)
翻转后:02(00000010)
最终结果:
EUI-64:02-11-22-FF-FE-33-44-55
这个64位标识符就可以作为IPv6地址的后半部分(IID)。
五、IPv6地址示例
例如,某主机的链路本地地址:
前缀:FE80::/64
IID:02-11-22-FF-FE-33-44-55
完整的IPv6地址为:
FE80::211:22FF:FE33:4455
六、EUI位说明
在IEEE的定义中,EUI中有两个重要的控制位:
| 位名 | 位置 | 含义 |
|---|---|---|
| u位(Unversal / Local) | 第一字节第7位 | 0表示全局唯一地址,1表示本地管理地址 |
| g位 (Group / Individual) | 第一字节第8位 | 0表示单播地址,1表示组播地址 |
当IPv6使用MAC地址派生IID时,需要把u位取反,以避免与原MAC地址重复。
七、IPv6地址的组成结构
所有的IPv6地址(无论是全局单播、唯一本地、链路地址) 都是“网络前缀 + 接口标识符”的形式。 区别在于:
| 地址类型 | 网络前缀 | 示例 | 说明 |
|---|---|---|---|
| 链路本地地址 | FE80::/10 | FE80::211:22FFFE33:44:55 | 仅在本链路中有效,用于邻居发现等 |
| 唯一本地地址(ULA) | FC00::/7 | FD12:3456:789A::1 | 类似于IPv4私有地址,企业内网使用 |
| 全局单播地址 | 2000::/3 | 2001:0DB8::1 | 可在互联网中使用 |
| 组播地址 | FF00::/8 | FF02::1 | 用于多播通信 |