附录 A:创建修改的 EUI-64 格式接口标识符
根据特定链路或节点的特性,有多种方法可以创建修改的 EUI-64 格式接口标识符。本附录描述了其中一些方法。
带有 IEEE EUI-64 标识符的链接或节点
将 IEEE EUI-64 标识符转换为接口标识符所需的唯一更改是反转“u”(通用/本地)位。一个示例是以下形式的全球唯一 IEEE EUI-64 标识符:
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+
其中“c”是分配的 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 的中间(在 company_id 和供应商提供的 id 之间)插入两个八位字节,十六进制值为 0xFF 和 0xFE(参见附录末尾的注释)。一个例子是具有全局范围的 48 位 IEEE MAC:
|0 1|1 3|3 4|
|0 5|6 1|2 7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+
其中“c”是分配的 company_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。创建 Modified 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”规范中定义。强烈建议将碰撞检测算法作为任何自动算法的一部分来实现。
注意:[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 标识符在语法上是等效的,并且它不在实践中不会造成任何问题。