对 EUI-64 和以太网帧头的混淆

Confusion over EUI-64, and Ethernet frame header

以太网帧头定义为:

struct ethernet_header {
  uint8_t dest_address[6];
  uint8_t source_address[6];
  uint16_t length_or_ethertype;
};

我的理解是 6 字节 MAC 地址格式现在正式称为 EUI-48。我还读到还有另一种格式,称为 EUI-64,它描述了一个 8 字节的 MAC 地址。

但是我对 EUI-64 的目的很困惑。从表面上看,EUI-64 的明显原因是当我们在地球上拥有超过 2^48 个独特设备时处理地址耗尽。但是,我可以在谷歌上找到关于 EUI-64 的所有可用信息似乎只谈论它与 IPv6 的关系。也就是说,EUI-64 提供了一种将 48 位 MAC 地址映射到 IPv6 地址的方法。

但是,除了IPv6,EUI-64还有别的用途吗? EUI-64 的发明纯粹是为了解决与 IPv6 相关的问题,还是为了应对 48 位 MAC 地址的最终耗尽而发明的?

我假设 EUI-64 主要设计用于处理 48 位 MAC 地址的最终耗尽 - 这意味着将创建许多具有 64 位 MAC 地址的新硬件设备(或扩展唯一标识符,使用正式的正确术语。)但如果是这种情况,任何现有的网络设备(例如路由器和交换机)将如何区分具有 48 位源的数据包和目标地址,以及具有 64 位源地址和目标地址的数据包?

由于以太网头的前两个字段是 2 个 48 位 source/destination 地址,我们不能只用 64 位 source/destination 地址替换这些字段,因为任何软件检查数据包不知道如何区分,因为在地址之前没有 "type" 或 "version" 字段。 (例如,IP 报头方便地将 4 位版本字段作为报头的前 4 位,因此我们可以轻松区分 IPv4 和 IPv6)。

所以我的问题:

  1. EUI-64是为了解决48位MAC地址耗尽,还是 仅意味着将 MAC 地址映射到 IPv6 地址?

  2. 如果 EUI-64 是为了解决最终的 48 位地址耗尽,如何 网络软件可以区分以太网数据包吗 包含 48 位与 64 位 MAC 地址?

由于 EUI-48 是在 24 位 OUI 块中分配的,地址 space 是 运行 低位。不过,它现在并将继续用于非常流行的以太网和 WiFi 网络。

EUI-64 是 EUI-48 的超集,适用于 "new" 应用程序。目前,它用于 Firewire、ZigBee,并以 EUI-48 派生的形式用于 IPv6。