转自:http://blog.csdn.net/jackli8431/article/details/50419689
MAC地址有单播、组播、广播之分。
单播地址(unicast address)表示单一设备、节点;
多播地址或者组播地址(multicast address、group address)表示一组设备、节点;
广播地址(broadcast address)是组播的特例,表示所有地址,用全F表示:FF-FF-FF-FF-FF-FF。当然,三层的IP地址也有单播、组播、广播之分。
因为以太网线路上按“Big Endian”字节序传送报文(也就是最高字节先传送,关于字节序请参考相关文档),而比特序是”Little Endian”(也就是最低位先传送)。所以有如下的图(从最左边开始传送):
注意图上的第47bit,这一位表示MAC地址是全球唯一地址还是本地地址,0表示全球唯一地址,1表示本地唯一地址。这一位也叫G/L位。
对于网络设备上固化的MAC地址,因为它唯一标识这个设备,所以只能是单播地址,也就是MAC帧里面的Source地址第48位只能0。
我们常说有2的48次方个MAC地址可供网络设备使用,这些地址可以多到给地球上每一粒沙子分配一个地址,其实这个数量要打折扣的,因为MAC地址虽然有这么多,但真正用在网卡上并且全球唯一的只有2的46次方个:第48bit一定是0,第47bit一定是0。关于组播地址,有这么个误解: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组播地址对应的二层组播地址)。
(备注:
1、48位二进制 ---> 12位16进制
为确保MAC地址的唯一性,地址由两部分组成:
a、供应商代码 //占用前24位二进制
b、序列号 //占用后24位二进制
2、MAC地址可以分为三类
a、单播地址:第一个字节最低位为0 ,eg: 00e0.fc00.0006
b、多播地址:第一个字节最低位为1 , eg: 01e0.fc00.0006
c、广播地址:48位全为1 ,eg ffff.ffff.ffff
)
**由于以太网线路上按“Big Endian”字节序传送报文,而比特序是”Little Endian”传送。故
第48bit即第一个字节的最低位。