Featured image of post IPv6的地址结构

IPv6的地址结构

IPv6地址与接口标识符(Interface Identifier, IID)的构成原理,特别是如何由网卡的物理地址(EUI-48或EUI-64)生成IPv6接口标识符。

一、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
  1. 把MAC地址分为两部分:
前三字节:00-11-22
后三字节:33-44-55
  1. 在中间插入固定的16位FFFE
EUI-64:00-11-22-FF-FE-33-44-55
  1. 翻转第一个字节的第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 用于多播通信
Licensed under CC BY-NC-SA 4.0
发表了9篇文章 · 总计7.98k字
Built with Hugo
Theme Stack designed by Jimmy