MAC地址(英语:Media Access Control Address,直接翻译就是媒体访问控制地址)也被称作局域网地址(LAN Address),以太网地址(Ethernet Address)或者(网卡)物理地址(Physical Address)。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则是负责MAC地址。
MAC地址用于在网络中唯一标识一个网卡,一台设备如有多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。制造商在生产制造网卡的过程中,会往每一块网卡的 ROM 中烧入一个 48bit 的 BIA(Burned-In Address,固化地址)地址,BIA 地址的前 3 个字节就是该制造商的 OUI(Organizationally-Unique Identifier)。Cisco的OUI是00-00-0C,华为的是00-E0-FC。
MAC地址又分为单播(unicast address)、多播(multicast address)、组播(broadcast address)。
单播地址(unicast address)表示单一设备、节点;
多播地址或者组播地址(multicast address 、 group address) 表示一组设备、节点;
广播地址(broadcast address)是组播的特例,表示所有地址,全用F表示:FF:FF:FF:FF:FF:FF。
当然第三层网络层的IP地址也有单播多播组播之分。
IEEE 802.3规定:以太网的第48bit用于表示这个地址是组播地址还是单播地址。如果这一位是0,表示此MAC地址是单播地址,如果这位是1,表示此MAC地址是多播地址。见IEEE 802.3 3.2.3 Address fields: “The first bit (LSB) shall be used in the Destination Address field as an address type designation bit to identify the Destination Address either as an individual or as a group address. If this bit is 0, it shall indicate that the address field contains an individual address. If this bit is 1, it shall indicate that the address field contains a group address that identifies none, one or more, or all of the stations connected to the LAN. In the Source Address field, the first bit is reserved and set to 0.”
因为以太网线路上按“Big Endian”字节序传送报文(也就是最高字节先传送,关于字节序请参考相关文档),而比特序是”Little Endian”(也就是最低位先传送)。
比如:00-E0-FC-XX-XX-XX 这是IEEE注册管理机构分配给华为的MAC地址,也是单播地址。
关于组播地址,有这么个误解:MAC地址第1字节必须是0x01才表示组播地址,连TCP/IP详解上也这么说(见中文版12.4.2第一段)。IEEE 802.3里面已经明确说明了只要第48bit是1就表示组播地址,所以无论MAC地址第1字节是0x01、0xC1或者是0x33都表示这个MAC地址是组播地址(以0x33开头的表示IPV6对应的二层组播地址)。之所以有这样的误解,是因为到目前为止,大部分组播MAC地址的第1字节都是0x01。如:
01-80-C2-00-00-00(STP协议使用)
01-80-C2-00-00-01(MAC Control的PAUSE帧使用)
01-80-C2-00-00-02(Slow Protocol: 802.3ah OAM/ LACP 协议都用这个地址,这个地址很有故事,有多少软件处理这个地址会出问题啊!)
01-00-5E-xx-xx-xx(IP组播地址对应的二层组播地址)。