メインコンテンツまでスキップ

Appendix A: Creating Modified EUI-64 Format Interface Identifiers

附录A: 创建修改的EUI-64格式接口标识符

根据特定链路或节点的特性,有多种方法可以创建修改的EUI-64格式接口标识符。本附录描述了其中一些方法。


具有IEEE EUI-64标识符的链路或节点

将IEEE EUI-64标识符转换为接口标识符所需的唯一更改是反转"u"(通用/本地,universal/local)位。

全局唯一的IEEE EUI-64标识符示例:

|0              1|1              3|3              4|4              6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+

其中:

  • c: 分配的公司ID (company_id) 的位
  • 0: 通用/本地位的值,表示通用范围
  • g: 个体/组 (individual/group) 位
  • m: 制造商选择的扩展标识符的位

IPv6接口标识符的形式:

|0              1|1              3|3              4|4              6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+

唯一的变化是反转通用/本地位的值(从0变为1)。


具有IEEE 802 48位MAC的链路或节点

[EUI64]定义了一种从IEEE 48位MAC标识符创建IEEE EUI-64标识符的方法。这是在48位MAC的中间(在company_id和供应商提供的id之间)插入两个八位字节,十六进制值为0xFF和0xFE(参见附录末尾的注释)。

具有全局范围的48位IEEE MAC示例:

|0              1|1              3|3              4|
|0 5|6 1|2 7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+

其中:

  • c: 分配的公司ID的位
  • 0: 通用/本地位的值,表示全局范围
  • g: 个体/组位
  • m: 制造商选择的扩展标识符的位

接口标识符的形式:

|0              1|1              3|3              4|4              6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|cccccccc11111111|11111110mmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+

当IEEE 802 48位MAC地址可用时(在接口或节点上),由于其可用性和唯一性属性,实现可以使用它们来创建接口标识符。

转换步骤

  1. 取48位MAC地址
  2. 在中间插入 0xFF-FE(即在第3和第4个八位字节之间)
  3. 反转第一个八位字节的第7位(u位)

示例:

MAC地址:        00:1A:2B:3C:4D:5E
插入0xFF-FE: 00:1A:2B:FF:FE:3C:4D:5E
反转u位: 02:1A:2B:FF:FE:3C:4D:5E
接口ID: 021A:2BFF:FE3C:4D5E

具有其他类型标识符的链路

有许多类型的链路具有除IEEE EUI-64或IEEE 802 48位MAC之外的链路层接口标识符。示例包括LocalTalk和Arcnet。创建修改的EUI-64格式标识符的方法是获取链路标识符(例如,LocalTalk 8位节点标识符)并在左侧用零填充。

示例:

十六进制值为0x4F的LocalTalk 8位节点标识符会产生以下接口标识符:

|0              1|1              3|3              4|4              6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|0000000000000000|0000000000000000|0000000000000000|0000000001001111|
+----------------+----------------+----------------+----------------+

表示为: 0000:0000:0000:004F

注意,这会导致通用/本地位设置为"0"以表示本地范围。


没有标识符的链路

有许多链路没有任何类型的内置标识符。最常见的是串行链路 (Serial Links) 和配置的隧道 (Configured Tunnels)。必须选择在子网前缀内唯一的接口标识符。

方法1: 使用通用接口标识符

当链路上没有可用的内置标识符时,首选方法是使用来自另一个接口的通用接口标识符或分配给节点本身的标识符。使用此方法时,将同一节点连接到同一子网前缀的其他接口不得使用相同的标识符。

方法2: 创建本地范围接口标识符

如果没有可用于链路的通用接口标识符,则实现需要创建本地范围接口标识符。唯一的要求是它在子网前缀内是唯一的。有许多可能的方法来选择子网前缀唯一的接口标识符。这些包括:

  • 手动配置 (Manual Configuration)
  • 节点序列号 (Node Serial Number)
  • 其他节点特定令牌 (Other Node-Specific Token)

子网前缀唯一的接口标识符应以这样的方式生成:在节点重新启动后或从节点添加或删除接口时它不会改变。

适当算法的选择取决于链路和实现。形成接口标识符的详细信息在相应的"IPv6 over <link>"规范中定义。强烈建议将冲突检测算法作为任何自动算法的一部分实现。


重要注释

关于0xFF-FE的使用:

[EUI-64]实际上定义了0xFF和0xFF作为要插入的位,以从IEEE MAC-48标识符创建IEEE EUI-64标识符。当从IEEE EUI-48标识符开始时,使用0xFF和0xFE值。由于对IEEE MAC-48和EUI-48标识符之间差异的误解,在规范的早期版本中使用了不正确的值。

本文档有意继续使用0xFF和0xFE,因为:

  1. 它满足IPv6接口标识符的要求(即它们必须在链路上是唯一的)
  2. IEEE EUI-48和MAC-48标识符在语法上是等效的
  3. 它在实践中不会引起任何问题

接口标识符生成总结

链路类型方法U/L位
IEEE EUI-64反转u位1(通用)
IEEE 802 48位MAC插入FF-FE,反转u位1(通用)
其他标识符(如LocalTalk)左侧零填充0(本地)
无标识符手动/自动生成取决于方法

关键原则: 接口标识符必须在其子网前缀内是唯一的。