###1. mac 地址

MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置,采用十六进制数表示,共六个字节

例如

45-67-89-ab-cd-ef

###2. mac地址的分配

mac地址的前3个字节由 IEEE分配给设备制造商,作为组织唯一标识符(OUI, Organizationally unique identifier), 后3个字节由各设备厂商自行分配, 例如

45-67-89-ab-cd-ef

则前三个字节 45-67-89 由IEEE分配, 而后3个字节 ab-cd-ef 则由设备厂商来分配

关于IEEE为厂商分配的OUI, 可以查询 IEEE分配的MAC OUI

####3. mac 地址的传送顺序

仍旧以如下的mac地址为例

45-67-89-ab-cd-ef

对应的二进制表示为

0100 0101 - 0110 0111 - 1000 1001 - 1010 1011 - 1100 1101 - 1110 1111

以太网使用大端字节序, 小端比特序, 因此, mac地址的高字节先传送, 而在字节中, 低比特先传送, 即上述的mac地址中, 先发送字节 0x45 再发送字节 0x67

仍旧以MAC地址 ”45-67-89-ab-cd-ef“ 为例,其发送字节序如下(从最左边开始发送)

bit47                                                               bit0
|                                                                   |
1010 0010 - 1110 0110 - 1001 0001 - 1101 1010 - 1011 0011 - 1111 0111

后续讲解mac地址的规则时, 统一使用发送字节序来解释, 而不是mac地址对应的二进制字节序

###4. 组播/单播地址的划分

组播地址只能作为目的地址, 不能作为源地址, 目标地址为组播地址的数据包, 可以被支持该组播地址的一组网卡接收到, 组播主要用于视频广播, 游戏等等等

45-67-89-ab-cd-ef

发送字节序

bit47                           bit32                               bit0
|                               |                                   |
0100 0100 - 0100 0101 - 0101 0011 - 0101 0100 - 0000 0000 - 0000 0000

mac地址的传输字节序中的bit47(即字节 0x45的最低bit)用于标识组播地址, 其取值的意义如下

  • 0 : mac地址的bit47为0, 代表该地址是单播地址
  • 1 : mac地址的bit47为1, 代表该地址是组播(多播)地址

因此, 通过16进制表示的mac地址的左起的第一个字节的值, 可以很容易判断是组播地址还是单播地址, 偶数代表是单播地址, 为奇数则代表多播地址, 以mac地址 “45-67-89-ab-cd-ef”为例, 数字0x45为奇数, 代表是组播地址

对于网卡来说, 其mac地址必须设定为单播地址才是合法的mac地址

####4.1 几个特殊的组播地址

如下2个OUI

  • 00-80-C2 : 分配给IEEE,对应的组播地址为 01-80-C2-xx-xx-xx
  • 00-00-5E : 分配给IANA,对应的组播地址为 00-00-5E-xx-xx-xx

IEEE和IANA定义的几个组播地址如下:

  • 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组播地址对应的二层组播地址

IEEE定义组播地址, 详细可以参见 IEEE定义的组播MAC地址

####4.2 组播ip与组播mac的映射

IANA把D类地址空间分配给组播使用

1110 xxxx : xxxx xxxx : xxxx xxxx : xxxx xxxx

即 224.0.0.0 ~ 239.255.255.255 作为ip层的组播地址, 即只有后28bit可变

IANA将MAC地址范围 01:00:5E:00:00:00~01:00:5E:7F:FF:FF 用于支持ipv4层的组播,即只有后23bit可变

要将28位的IP组播地址空间映射到23位的组播MAC地址空间中, 势必会有 2^(28-23)=32个ip层的组播地址会映射到同一个MAC层的组播地址上, 因此, 在实际使用时, 需要注意不要重叠

IANA规定, IP层的组播地址到MAC层的组播地址的映射过程为: 将IP层组播地址中的低23位放入MAC层组播地址的低23位

###5. 广播地址

广播地址是组播地址的一个特例, 所有的bit全为1的mac地址代表广播地址, 即

ff-ff-ff-ff-ff-ff

为广播地址

广播地址只能作为目的地址, 不能作为源地址, 目的地址为广播地址的数据包, 可以被一个局域网内所有的网卡接收到

###6. 本地/全球唯一地址

MAC地址中有一个bit, 用于区分该地址是全球唯一还是本地唯一

45-67-89-ab-cd-ef

发送字节序

bit47                           bit32                               bit0
|                               |                                   |
0100 0100 - 0100 0101 - 0101 0011 - 0101 0100 - 0000 0000 - 0000 0000

bit 46用于标识该MAC地址是全球唯一还是本地唯一

  • 0 : 全球唯一的MAC地址
  • 1 : 本地唯一的mac地址

通常在支持wifi 和 wifi p2p android手机上, wlan接口使用全球唯一mac地址, 然后将wlan接口的mac地址, 反转其 bit46 后(得到本地唯一mac地址), 作为p2p接口的mac地址,这是因为wifi接口的mac地址会出现在internet上, 而p2p接口的mac地址只会出现在本地的p2p局域网上面