MAC地址

项目开发中有修改MAC地址的功能,但是对MAC地址了解比较少,只知道这么用。

MAC地址是以太网二层使用的一个48bit(6字节十六进制数)的地址,用来标识设备位置。MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique identifier),后24位由厂商自行分配。

MAC地址有单播、组播、广播之分。单播地址(unicast address)表示单一设备、节点,多播地址或者组播地址(multicast address、group address)表示一组设备、节点,广播地址(broadcast address)是组播的特例,表示所有地址,用全F表示:FF-FF-FF-FF-FF-FF。当然,三层的IP地址也有单播、组播、广播之分。

48bit的MAC地址一般用6字节的十六进制来表示,如XX-XX-XX-XX-XX。IEEE 802.3规定:以太网的第48bit(2012-04-11修改为The first bit)用于表示这个地址是组播地址还是单播地址。如果这一位是0,表示此MAC地址是单播地址,如果这位是1,表示此MAC地址是多播地址。

图片.png

如上图所示(从最左边开始传送):以太网线路上按“Big Endian”字节序传送报文(也就是最高字节先传送),而比特序是”Little Endian”(也就是最低位先传送)一个十六进制表示法表示的MAC地址01-80-C2-00-00-00,传送时的bit顺序就是:

1000 0000 0000 0001 0100 0011 0000 0000 0000 0000 0000 0000

这也就引出了一个有意思的现象:随便找一台PC,观察一下它的网卡地址,第1字节的十六进制数一般是4的倍数;查看一下IEEE分配的OUI,第1字节的十六进制数也一般是4的倍数(早期以太网没有本地地址的概念,所以分配的OUI里面G/L bit也可能是1),这种情况下就不是4的倍数了,但肯定是2的倍数,因为第48位只能是0。这就是第一个字节的第1位、第0位为0的原因,结果为4的倍数。

关于组播地址,IEEE 802.3里面已经明确说明了只要第48bit是1就表示组播地址,所以无论MAC地址第1字节是0x01、0xC1或者是0x33都表示这个MAC地址是组播地址(以0x33开头的表示IPV6对应的二层组播地址)。



上一篇:
下一篇: