1. 概述
媒体访问控制(Media Access Control,MAC)地址是一个分配给网络接口控制器(Network Interface Controller,NIC)的唯一标识符。它作为在网络分段内部进行通信的网络地址,被广泛应用于大多数 IEEE 802 系列网络技术中,包括以太网、Wi-Fi 和蓝牙。从本质上讲,MAC地址是设备的“物理地址”或“硬件地址”。
MAC地址位于 OSI 模型的第二层,即数据链路层。数据链路层负责在网络分段上的节点之间传输数据。它将上一层(网络层)的数据包分割成帧,并逐位发送到下一层(物理层)。
1.1. MAC地址与IP地址的比较分析
- 属性:MAC地址是与物理硬件绑定的硬件地址(或物理地址),而IP地址是可配置和管理的软件地址(或逻辑地址)。
- 作用域:MAC地址仅用于本地网络(LAN)分段内的通信,不随数据包跨越本地网络。相比之下,IP地址用于在不同网络之间进行全局路由,是数据包在全球互联网上找到正确目的地的关键。
可变性:MAC地址由制造商永久分配,通常无法更改。而IP地址可以动态分配(如通过 DHCP)或手动配置,并且可以随设备在不同网络中的移动而改变。
在OSI分层模型中,每一层都有其特定的功能和寻址任务。MAC地址处理的是“点对点”的本地跳跃式数据帧传输,确保数据能在同一网络分段内的设备之间正确送达。而IP地址则负责“端到端”的全局路由,指导数据包穿越多个路由器和网络,直至抵达最终目标。这种设计将“本地交付”的责任(MAC地址)与“全局路由”的责任(IP地址)清晰地分离。
MAC地址与IP地址的比较
特性 | MAC地址(物理地址) | IP地址(逻辑地址) |
---|---|---|
OSI层 | 第二层(数据链路层) | 第三层(网络层) |
作用域 | 本地网络(LAN) | 全球互联网 |
主要功能 | 确保帧在本地网络内正确交付 | 确保数据包在不同网络间正确路由 |
分配方式 | 制造商固化分配 | 网络管理员配置或DHCP动态分配 |
可变性 | 通常不可更改(除非进行MAC欺骗) | 可变,随网络位置而变化 |
示例格式 | 00:1A:2B:3C:4D:5E | 192.168.1.1 (IPv4) 或 2001:0db8:85a3::8a2e:0370:7334 (IPv6) |
2. MAC地址的结构
MAC地址格式
字节 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | 说明 |
---|---|---|---|---|---|---|---|---|---|
Byte1 | OUI | U/L | I/G | 组织唯一标识 & MAC 地址管理类型 | |||||
Byte2 | OUI | 组织唯一标识 | |||||||
Byte3 | OUI | 组织唯一标识 | |||||||
Byte4 | NIC | 网络接口控制器标识 | |||||||
Byte5 | NIC | 网络接口控制器标识 | |||||||
Byte6 | NIC | 网络接口控制器标识 |
2.1. MAC地址格式
MAC地址由48位二进制数字组成,通常表示为12个十六进制数字组成的字符串。
为了提高可读性,这12个十六进制数字通常被分组,并用分隔符隔开。常见的格式包括:
- 冒号分隔:每两个数字(一个字节)用冒号分隔,例如
00:9A:CD:3C:4D:5E
。 - 连字符分隔:每两个数字用连字符分隔,例如
00-1B-63-84-45-E6
。 - 句点分隔:每四个数字用句点分隔,例如
0000.0ABB.28FC
。 - 无分隔符:直接由12个十六进制数字组成,例如
001B638445E6
。
2.2. 组织唯一标识符(OUI)与厂商分配标识符
- 组织唯一标识符(Organizationally Unique Identifier,OUI):MAC地址的前24位(即前三个字节)被称为组织唯一标识符。该标识符由IEEE注册管理机构分配给特定的供应商或组织,用于唯一标识该制造商。
- 厂商分配扩展标识符:MAC地址的后24位(即后三个字节)由获得OUI的制造商自行分配,用于为其生产的每一块网络接口卡创建全球唯一的序列号。
这种两段式结构确保了全球范围内MAC地址的唯一性。任何一家厂商,只要从IEEE获得了唯一的OUI,就可以使用后24位来生成多达16,777,216($2^{24}$)个不同的设备地址,且不必担心与其他厂商的地址冲突。
IEEE负责MAC地址块分配。它向客户分配不同大小的地址块,例如大型地址块(MA-L)、中型地址块(MA-M)和小型地址块(MA-S)。这种按需分配的商业模式,辅以禁止转售地址块的严格规定,确保了MAC地址体系的完整性和全球非歧义性。
3. 第一字节单播/组播(I/G)位与全局/本地(U/L)位
MAC地址的第一字节包含了两个具有特殊功能的关键位,它们决定了地址的寻址方式和管理类型,为网络设备提供了至关重要的行为指令。
3.1. 单播/组播(I/G)位
这个位是MAC地址第一字节的最低有效位(LSB,即第0位)。
- 值为0:当此位为
0
时,该地址是单播(Unicast)地址,用于一对一通信。这表示数据帧的目标是网络中的单个特定设备。 - 值为1:当此位为
1
时,该地址是组播(Multicast)地址,用于一对多通信。这种地址旨在被网络中的一组设备接收,包括广播地址和组播地址。
3.2. 全局/本地(U/L)位
这个位是MAC地址第一字节的倒数第二位(即第1位)。
- 值为0:当此位为
0
时,该地址是全局管理(Universally Administered)地址。这意味着地址由制造商使用其唯一的OUI在全球范围内进行分配,是设备硬件上固化的永久地址。 - 值为1:当此位为
1
时,该地址是本地管理(Locally Administered)地址。这意味着该地址已被网络管理员或软件手动更改或覆盖。它不需要在全球范围内保持唯一,只需在本地网络分段内不冲突即可。这种地址常见于虚拟化环境或为了隐私目的进行的MAC地址随机化。
MAC地址第一字节的这两个位在设计上极其精巧,仅用两位的二进制信息就编码了地址的四种基本状态,从而决定了网络设备在接收和处理数据帧时的行为模式。通过检查这两个位,交换机等网络设备可以即时识别地址是用于单播还是组播,以及是制造商分配的永久地址还是本地自定义的地址。这两种信息的结合,构成了数据链路层协议行为的基石。
MAC地址第一字节
U/L位(b1) | 管理类型 | I/G位(b0) | 寻址类型 | 描述 |
---|---|---|---|---|
0 | 全局管理(Universal) | 0 | 单播(Unicast) | 制造商分配的默认、永久、全局唯一地址。 |
0 | 全局管理(Universal) | 1 | 组播(Multicast) | 预留给组播通信的地址范围(如01:00:5E... )。 |
1 | 本地管理(Local) | 0 | 单播(Unicast) | 由软件或管理员分配,用于虚拟化或隐私。 |
1 | 本地管理(Local) | 1 | 组播(Multicast) | 由软件或管理员分配的本地组播地址。 |
4. MAC地址类型
4.1. 单播地址
单播MAC地址代表本地网络中单个特定的网络接口。它是用于一对一通信的默认地址类型,所有由制造商分配的MAC地址本质上都是单播地址。当一个数据帧以单播MAC地址为目的地时,交换机会在其MAC地址表中查找该地址,并仅将该帧转发到与目标设备相连的特定端口,从而避免不必要的流量泛洪。
4.2. 组播地址
组播MAC地址代表网络中的一组设备,旨在实现高效的一对多通信。当一个设备需要向特定组内的多个成员发送数据,而不是网络中的所有设备时,就会使用组播地址。IEEE为组播地址预留了特定的范围,例如,IPv4组播地址在以太网帧中通常映射到 01:00:5E:xx:xx:xx
的MAC地址范围。这种映射机制是网络层(IP组播)与数据链路层(MAC组播)协同工作的典范。
4.3. 广播地址
广播MAC地址是一种特殊的组播地址,代表本地网络分段中的所有设备。任何发送到广播地址的数据帧都会被同一网络上的所有设备接收和处理。通用广播地址是 FF:FF:FF:FF:FF:FF
。从位级分析来看,这个地址所有位都为1
,因此第一字节的I/G位也为1
,这使其成为一个特殊的组播地址。
MAC地址类型总结
类型 | 目的 | I/G位值 | 示例(部分) |
---|---|---|---|
单播 | 一对一通信 | 0 | 00:1A:2B:3C:4D:5E(通常为制造商地址) |
组播 | 一对多通信 | 1 | 01:00:5E:00:00:01(IPv4组播) |
广播 | 一对所有通信 | 1 | FF:FF:FF:FF:FF:FF(通用广播地址) |
这种分类并非相互独立的,而是具有层次结构的。I/G位将所有地址分为“个体”和“组”两大类。“单播”是唯一的“个体”类型,而“组”则涵盖了“组播”和“广播”。广播地址 FF:FF:FF:FF:FF:FF
是组播地址空间中的一个特殊实例,其特殊性在于它代表了“所有”设备。这种结构化的分类确保了网络通信的可预测性和高效性。例如,当交换机收到一个单播帧时,它会精确地转发到目的地端口;当收到一个广播帧时,它会向所有端口泛洪;而当收到一个组播帧时,它可以使用特定的组播协议仅将帧转发到那些加入了组播组的端口,从而优化了网络流量并减少了拥塞。
5 MAC地址在第二层的作用
5.1. MAC地址与第二层设备
交换机和网桥是工作在数据链路层的关键网络设备。它们的核心功能是利用MAC地址来智能地转发数据帧。与早期向所有端口发送数据的集线器不同,交换机能够“学习”网络拓扑,并根据MAC地址精确地将数据送往正确的目的地。
5.2. MAC地址表的作用
交换机通过维护一个被称为“MAC地址表”的列表来完成转发。当一个数据帧到达交换机端口时,交换机会检查该帧的源MAC地址,并将其与入端口进行关联,存入MAC地址表。当一个后续帧的目标MAC地址在表中已有记录时,交换机便能直接将帧从正确的出端口发送出去,避免了流量泛洪,显著降低了网络拥塞。
5.3. 帧的重封装
当一个数据包从源主机发送到远端主机时,其IP地址在整个传输路径上保持不变。然而,数据包所承载的第二层帧(以及帧内的源和目标MAC地址)在每次通过路由器时都会发生变化。路由器接收一个帧,解封装(剥离)其第二层头部,然后根据数据包的第三层IP地址确定下一个路由器的地址,最后用自己的MAC地址作为源地址、下一个路由器的MAC地址作为目标地址,重新封装一个新的帧,继续传递数据包。