MAC 地址为什么不需要全球唯一

来源:真没什么逻辑
作者:Draveness
mac 地址(Media access control address)是分配给网络接口控制器(Network interface controller, NIC)的唯一标识符,它会在网络段中充当网络地址使用[^1],所有具有网卡的主机都有单独的 MAC 地址,该地址总共包含 48 位,占 6 字节的空间,可以表示 281,474,976,710,656 个网络设备,一个正常的 MAC 地址如下所示的格式表示,每个字节都会使用两位 16 进制的数字:
6e:77:0f:b8:8b:6b因为 MAC 地址需要保证唯一,所以 IEEE 会根据设备的制造商分配地址段,48 位 MAC 地址的前 24 位是设备制造商的标识符[^2],也就是组织唯一标识符(Organizationally Unique Identifier,OUI),后面的 24 位是序列号;如果每个设备制造商都能保证在同一个命名空间中的全部 MAC 地址唯一,那么全世界所有的 MAC 地址就可以保证唯一 。
MAC 地址为什么不需要全球唯一

文章插图
图 1 - MAC 地址
MAC 地址可以使用两种不同的格式表示,分别是 48 位的 EUI-48 和 64 位的 EUI-64[^3],本文会使用 EUI-48 格式的 MAC 地址,EUI-64 主要用于 IPv6 协议,我们在这篇文章就不展开讨论了 。在通常情况下,MAC 地址会使用 24 位表示组织的序列号,但是因为很多组织不会生产这么多的设备,所以在实际操作中会划分出三种不同大小的地址块[^4]:
MAC 地址为什么不需要全球唯一

文章插图
图 2 - MA-L, MA-M, MA-S
  • MA-L(MAC Address Block Large) - 包含 24 位组织标识符和 24 位地址;
  • MA-M(MAC Address Block Medium) - 包含 28 位组织标识符和 20 位地址;
  • MA-S(MAC Address Block Small) - 包含 36 位组织标识符和 12 位地址;
这三种不同大小的地址块价格也完全不同,MA-L 的注册价格为 2995 美金,而 MA-S 的注册价格为 755 美金,感兴趣并且有需要的读者可以在 IEEE 的官方购买[^5],在理想情况下,所有的地址加起来价值大概在 52 万亿美金左右,果然定义和掌握了标准就可以躺着等别人注册来赚钱 。
这种由机构分发 MAC 地址段并由设备商保证地址唯一的方式就是为了保证全世界所有硬件的网络地址唯一,但是在实际操作中,全球唯一是无法保证的而且我们也并不需要地址的全球唯一,这主要因为以下两个原因:
  • 在不同操作系统上,我们都可以通过软件直接修改网卡的 MAC 地址;
  • 只需要保证一个局域网内的 MAC 地址不重复,网络就可以正常工作;
修改地址无论是在 linux 上还是在 macOS 上,修改网络设备的 MAC 地址都是非常简单的 。在 Linux 操作系统中我们可以使用命令 ifconfig 修改设备上的 MAC 地址:
$ ifconfig eth0 | grep etherether 6e:77:0f:b8:8b:6btxqueuelen 1000(Ethernet)$ ifconfig eth0 down$ ifconfig eth0 hw ether 6e:77:0f:b8:8b:6a$ ifconfig eth0 up$ ifconfig eth0 | grep etherether 6e:77:0f:b8:8b:6atxqueuelen 1000(Ethernet)【MAC 地址为什么不需要全球唯一】只要我们使用上述的命令就可以轻松地修改当前网卡的 MAC 地址,不过建议不要在远程的 Linux 机器上使用,最好在本地的 Linux 上测试相关的命令,在修改测试完成之后也最好使用命令将 MAC 地址改回去;在 macOS 上修改 MAC 地址也可以使用ifconfig 命令,使用的方式与 Linux 几乎完全相同 。
因为 MAC 地址是与硬件绑定的,所以这种修改 MAC 地址的方式其实都是临时的,一旦操作系统重启,这些变更就会被系统撤销,想要让类似的变更永久生效需要在系统重启时执行相应的命令或者修改对应的网卡配置文件[^6] 。
局域网通信所有的计算机和终端设备都需要通过网络适配器连接到局域网中,每一个适配器都有唯一的链路层地址,也被叫做 LAN 地址或者 MAC 地址,MAC 地址被设计成了扁平结构,它们不会随着所处网络的不同而发生改变 。
当设备的网络适配器想要向其他的适配器发送数据帧时,它会将目的适配器的 MAC 地址插入到如下所示的以太网帧中,每个以太网帧都与 IP 数据报类似,包含源地址和目标地址,只是以太网帧中的地址是 MAC 地址,而 IP 数据报中的地址是 IP 地址:
MAC 地址为什么不需要全球唯一

文章插图
图 3 - 以太网帧
局域网中的数据传输不是通过网络层的 IP 地址进行路由和转发的,然而 IP 地址一般都是发送数据主机知道的唯一信息,想要在局域网中发送数据,还是需要知道它们的 MAC 地址 。当我们的设备想要向其他的设备发送数据时,它会先通过 ARP(Address Resolution Protocol,地址解析协议) 在局域网中获取目的 IP 地址对应的 MAC 地址:


推荐阅读