在标准以太网中传输规范 MAC 地址的 LSB 优先方法有什么特别的优势吗?

网络工程 以太网 MAC地址
2021-07-22 08:28:12

当 MAC 地址被发送出去时,组地址指示符是以太网帧的第一位,但当存储在内存中时,它形成 MAC 地址最左边字节的 LSB。例如-

             In memory,      12       34       56       78       9A       BC
               canonical:   00010010 00110100 01010110 01111000 10011010 10111100

                            1st bit appearing on LAN (group address indicator)
                            |
               On LAN:      01001000 00101100 01101010 00011110 01011001 00111101

这个设计决定需要交换地址中的字节的位,然后才将其发送到 LAN 上的原因是什么?它是否具有历史意义,因为它在设计协议时有意义吗?这种设计是否有某些特定的优势?

还有一些与我的问题相关的事情,我认为我必须提到的是,并非所有 LAN 采用​​者的情况都是如此。(这里提到:RFC 2469

2个回答

首先发送 LSB(小端)或 MSB(大端)没有真正的优势。只要每个人都遵循相同的约定,就可以进行交流。最后要注意的是,其他通信协议(例如 RS-232(串行))也使用 Little-endian,总的来说,我认为这样做更为常见。

请记住,计算机完全基于位运行。您看到的任何其他内容都只是转换为更“人性化”的方式来处理这些位。

如果您要使用 Big-endian,那么在内存中存储相同 48 位地址的最简单方法如下:

0100 1000 0010 1100 0110 1010 0001 1110 0101 1001 0011 1101

如果这些位实际上除了位之外还有其他意义,那么您最终会得到以下十六进制内容:

4 8 2 C 6 A 1 E 5 9 3 D

所以你的小端地址十六进制表示是 12-34-56-78-9A-BC,但大端网络中的地址是 48-2C-6A-1E-59-3D(如果我做的都是对的......自从我不得不将小端寻址转换为大端寻址以来已经有一段时间了)。完全相同的地址,只是存储/传输位的不同方式。

离开人迹罕至的道路,所以请随时停止阅读......

这会导致与 TCP/IP 的一些非常有趣的交互。由于以太网(小端)出现在令牌环(大端)之前,ARP 是围绕小端寻址设计的。当您在以太网和令牌环之间桥接流量时,网桥必须支持 IP(为了识别 ARP 数据包)并适当地重新排序 ARP 地址字段中的位。这是一个不太理想的解决方案,因为它强制在 L2 上使用 L3 功能,但它确实解决了问题。

当 FDDI(Big-endian)出现得更晚时,TCP/IP 设计者想避免这个问题,并在 FDDI 上设计了 ARP 以使用 Little-endian 作为地址字段。这避免了在将以太网桥接到 FDDI 时必须修改 ARP 数据包的标头和有效载荷。然而,这也意味着将令牌环连接到 FDDI 的桥需要重新排序地址字段中的位。将令牌环桥接到 FDDI 比将以太网桥接到 FDDI 少得多。

AppleTalk 等其他协议也受到类似的影响,但通常没有提供解决方案,因为它们不像 TCP/IP 那样流行。因此,如果您要将以太网桥接到令牌环,这将破坏 AppleTalk。

计算机不处理单个位。在几乎所有当前的计算机上,最小的可寻址内存单元是 8 位字节。我们的更高级别的通信协议也将字节作为其基本数据单位。类似地,计算机中的内部总线不会一次一位地移动数据,而是以 8、16、32、64 位或更多位为一组。

在设计串行通信协议时,协议设计者必须决定先发送哪个位。实际的选择在很大程度上是任意的,它对实现的复杂性没有真正的区别,因为字节中的位并没有真正的自然顺序。