为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。
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 地址就可以保证唯一。
图 1 - MAC 地址
MAC 地址可以使用两种不同的格式表示,分别是 48 位的 EUI-48 和 64 位的 EUI-64 3 ,本文会使用 EUI-48 格式的 MAC 地址,EUI-64 主要用于 IPv6 协议,我们在这篇文章就不展开讨论了。在通常情况下,MAC 地址会使用 24 位表示组织的序列号,但是因为很多组织不会生产这么多的设备,所以在实际操作中会划分出三种不同大小的地址块 4 :
图 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 ether
ether 6e:77:0f:b8:8b:6b txqueuelen 1000 (Ethernet)