环回地址上的 EUI-64

网络工程 ipv6 数据包追踪器 环回
2021-07-23 20:09:46

环回地址没有 MAC 地址。那么如何为环回接口分配一个 EUI-64 地址呢?我在数据包跟踪器上运行了一个示例,环回接口成功获取了链路本地地址和全局单播地址。用于 EUI 部分的 64 位中的 48 位使用了我在任何接口上都找不到的地址。数据包跟踪器中使用的拓扑如下图所示。

在此处输入图片说明

这是show ipv6 interface briefR3的输出

GigabitEthernet0/0/0       [up/up]
    FE80::2D0:D3FF:FE48:C01
    2001:ABCD:ABCD:0:2D0:D3FF:FE48:C01
GigabitEthernet0/0/1       [administratively down/down]
    unassigned
Loopback0                  [up/up]
    FE80::290:21FF:FE4D:70D2
    2001:AAAA:AAAA:AAAA:290:21FF:FE4D:70D2
1个回答

您实际上是指修改后的EUI-64 地址。EUI-64 地址是制造商分配给使用 64 位 MAC 地址的接口的地址。拥有 MAC 地址并不是 SLAAC 分配的地址的要求。大多数现代操作系统使用带有随机寻址的隐私扩展,而基于 MAC 寻址的原始 SLAAC 寻址大多已经过时。

即使最初的 SLAAC 寻址也不需要 MAC 地址,但 MAC 地址是一个方便的数字,在 LAN 上应该是唯一的。并非所有数据链路协议都使用 MAC 地址(只有 IEEE 协议使用)。有些,如 PPP,甚至不使用寻址。RFC 4291,IP 版本 6 寻址架构附录 A 解释了如何为原始 SLAAC 派生地址。请注意,它不需要 MAC 地址:

附录 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”规范中定义。强烈建议将碰撞检测算法作为任何自动算法的一部分来实现。

Note: [EUI-64] actually defines 0xFF and 0xFF as the bits to be
     inserted to create an IEEE EUI-64 identifier from an IEEE MAC-
     48 identifier.  The 0xFF and 0xFE values are used when starting
     with an IEEE EUI-48 identifier.  The incorrect value was used
     in earlier versions of the specification due to a
     misunderstanding about the differences between IEEE MAC-48 and
     EUI-48 identifiers.

     This document purposely continues the use of 0xFF and 0xFE
     because it meets the requirements for IPv6 interface
     identifiers (i.e., that they must be unique on the link), IEEE
     EUI-48 and MAC-48 identifiers are syntactically equivalent, and
     that it doesn't cause any problems in practice.