Appendix A. Creating Modified EUI-64 Format Interface Identifiers (创建修改的EUI-64格式接口标识符)
Appendix A: Creating Modified EUI-64 Format Interface Identifiers (创建修改的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" 是个体/组位, "m" 是制造商选择的扩展标识符的位。IPv6接口标识符的形式为:
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+
唯一的变化是反转通用/本地位的值。
具有IEEE 802 48位MAC的链路或节点
[EUI64] 定义了一种从IEEE 48位MAC标识符创建IEEE EUI-64标识符的方法。这是在48位MAC的中间 (在公司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地址可用时 (在接口或节点上), 由于其可用性和唯一性特性, 实现可以使用它们来创建接口标识符。
具有其他类型标识符的链路
有许多类型的链路具有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|
+----------------+----------------+----------------+----------------+
请注意, 这会导致通用/本地位设置为 "0", 表示本地范围。
没有标识符的链路
有许多链路没有任何类型的内置标识符。其中最常见的是串行链路和配置的隧道。必须选择在子网前缀内唯一的接口标识符。
当链路上没有可用的内置标识符时, 首选方法是使用来自另一个接口的通用接口标识符或分配给节点本身的标识符。使用这种方法时, 将同一节点连接到同一子网前缀的其他接口不得使用相同的标识符。
如果链路上没有可用的通用接口标识符, 则实现需要创建本地范围接口标识符。唯一的要求是它在子网前缀内是唯一的。有许多可能的方法来选择子网前缀唯一的接口标识符。这些包括以下内容:
- 手动配置 (Manual Configuration)
- 节点序列号 (Node Serial Number)
- 其他节点特定令牌 (Other Node-Specific Token)
应该以在节点重启后或从节点添加或删除接口后不会改变的方式生成子网前缀唯一的接口标识符。
适当算法的选择取决于链路和实现。形成接口标识符的详细信息在适当的 "IPv6 over <link>" 规范中定义。强烈建议将碰撞检测算法作为任何自动算法的一部分实现。
注释: [EUI-64] 实际上定义了0xFF和0xFF作为要插入的位, 以从IEEE MAC-48标识符创建IEEE EUI-64标识符。从IEEE EUI-48标识符开始时使用0xFF和0xFE值。由于对IEEE MAC-48和EUI-48标识符之间差异的误解, 在规范的早期版本中使用了不正确的值。
本文档有意继续使用0xFF和0xFE, 因为它满足IPv6接口标识符的要求 (即, 它们必须在链路上是唯一的), IEEE EUI-48和MAC-48标识符在语法上是等效的, 并且在实践中不会造成任何问题。