读懂 MAC 地址第一字节:U/L 位与 I/G 位
MAC 地址的第一个字节里藏着两个标志位,它们决定了这个地址是厂商出厂烧进去的还是软件临时生成的,以及这一帧是发给一台设备还是一组设备。看懂这两位,能立刻判断出很多地址的性质。
两个标志位的位置
第一字节的最低两位是标志位,其余六位才参与厂商标识:
第一字节: b7 b6 b5 b4 b3 b2 b1 b0
│ └── I/G 位(最低位)
└───── U/L 位(次低位)
注意这里说的"最低位"是按数值权重算的。在书写成十六进制时,这两位落在第一字节的第二个十六进制字符上,也就是 02 里的 2。
I/G 位:单播还是组播
最低位为 0 表示单播(Individual),这一帧只发给一个网卡。为 1 表示组播(Group),交换机会把它转发给一组接收者。
所以判断一个地址是不是组播,只看第一字节是奇数还是偶数就行。01:00:5E:... 的第一字节是 0x01,是奇数,确实是组播地址,IPv4 组播就映射在这个范围。FF:FF:FF:FF:FF:FF 全 1,自然也是组播的一种,即广播。详见组播 MAC 地址的映射规则。
U/L 位:全局唯一还是本地管理
次低位为 0 表示全局唯一(Universally administered),地址由 IEEE 分配给厂商,理论上全世界不重复,能查到厂商。为 1 表示本地管理(Locally administered),由本机软件生成,IEEE 不做任何保证,查不到厂商。
把这两位组合起来看第一字节的第二个十六进制字符:
| 第二个十六进制字符 | U/L | I/G | 含义 |
|---|---|---|---|
| 0、4、8、C | 0 | 0 | 全局唯一单播,可查厂商 |
| 2、6、A、E | 1 | 0 | 本地管理单播,查不到厂商 |
| 1、5、9、D | 0 | 1 | 全局唯一组播 |
| 3、7、B、F | 1 | 1 | 本地管理组播 |
记一个速查法:第二个字符是 2、6、A、E 的地址,不用查了,一定查不到厂商。
实际会在哪里遇到本地管理地址
现代手机的 WiFi 隐私功能会为每个网络生成一个随机 MAC,这些地址一律把 U/L 位置 1,所以你在路由器客户端列表里看到 DA:A1:19:... 这类地址时,它就是随机化的结果,而不是某个叫 "DA:A1:19" 的厂商。细节见MAC 地址随机化。
虚拟机管理程序有时也用本地管理地址,容器网络、网桥的虚拟接口同样常见。手动修改网卡 MAC 时,规范做法也是把 U/L 位置 1,避免与真实设备冲突。
对查询结果的影响
如果你在查询页输入一个本地管理地址得到"未找到",这不是数据库不全,而是这类地址本身就不在 IEEE 的分配范围内。反过来说,查不到厂商往往是个有用的信息,它说明对面很可能启用了地址随机化或使用了虚拟接口。