以太网编址
在数据链路层,数据帧通常依赖于MAC地址来进行数据交换,它如同公网IP地址一样要求具有全球唯一性,这样才可以识别每一台主机。那么MAC地址如何做到这点?它的格式又是什么?
MAC地址,英文全称Medium Access Control ,直译为介质访问控制,它通常被固化在每个以太网网卡(NIC,Network Interface Card)。MAC(硬件)地址长48位(6字节),采用十六进制格式,下图说明了48位的MAC地址及其组成部分。
示例: 00-01-6C-06-A6-29 或 00:01:6C:06:A6:29
组织唯一标识符 (OUI)由IEEE(电气和电子工程师协会)分配给厂商,它包含24位。厂商再用剩下的24位(EUI,扩展唯一标识符)为其生产的每个网卡分配一个全球唯一的全局管理地址,一般来说大厂商都会购买多个OUI。
I/G (Individual/Group)位,如果I/G=0 ,则是某台设备的MAC地址,即单播地址;如果I/G=1,则是多播地址(组播+广播=多播)。
G/L (Global/Local,也称为U/L位,其中U表示Universal)位,如果G/L=0 ,则是全局管理地址,由IEEE分配;如果G/L=1,则是本地管理地址,是网络管理员为了加强自己对网络管理而指定的地址。
对于I/G 和G/L位的位置,目前有两种说法,或者说两种格式。
对于数据传输来说,数据是按每个字节中一位一位地传输的,一个字节传输完了才到下一个字节。
第一种 ,每个字节的高位在前,低位在后,I/G 位 和G/L分别在字节中的最低位和次低位,最高位先发送,到了对端还是最高位
第二种 ,每个字节的低位在前,高位在后,I/G 位和G/L分别在字节中的最低位和次低位,最低位先发送,到了对端还是最低位
两种看似不一样,但是结果还是一样的,如果还是弄不懂可以再草稿纸上画一画,不难理解。
参考二:
MAC Address(Media Access Control Address)亦称为:硬件地址、物理地址(Physical Address)。一个MAC地址唯一指定一台设备,全球唯一,并且通常烧写在固件中。
结构
MAC地址如图所示,其前3字节表示OUI(Organizationally Unique Identifier),由IEEE的注册管理机构给不同厂家分配的代码,区分不同的厂家。后3字节由厂家自行分配。
MAC地址第一个字节的低第二位(b1)表示这个MAC地址是全局的还是本地的,即U/L(Universal/Local)位,如果为0,表示是全局地址。所有的OUI这一位都是0。
MAC地址第一个字节的低第一位(b0)表示这个MAC地址是单播还是多播。0表示单播。
部分OUI:
IEEE:00-80-C2
IANA:00-00-5E
Cisco:00-00-0C
特殊MAC地址
广播地址:
全F,在本VLAN内泛洪。
单播地址:
以00-00-5E开头:
00-01-00 to 00-01-FF VRRP (Virtual Router Redundancy Protocol) [RFC5798]
00-02-00 to 00-02-FF VRRP IPv6 (Virtual Router Redundancy Protocol IPv6) [RFC5798]
90-01-00 TRILL OAM [RFC7455]
组播地址:
只要第48bit是1就表示组播地址
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组播地址对应的二层组播地址)。
以01-00-5E开头:
00-00-00 to 7F-FF-FF IPv4 Multicast [RFC1112]
80-00-00 to 8F-FF-FF MPLS Multicast [RFC5332]
90-00-00 MPLS-TP p2p [RFC7213]
90-00-01 Bidirectional Forwarding Detection (BFD) on Link Aggregation Group (LAG) Interfaces [RFC7130]
90-01-00 TRILL OAM [RFC7455]
映射组播IP为组播MAC地址转换
IPv4组播MAC地址为IANA定义,前25位固定。而组播IP为D类IP地址,其前4位固定为1110b。将组播IP的低23位直接映射到MAC地址的低23位,即可与前面固定的25位组成一个48位的MAC地址。
由于组播IP还有5位没有映射到MAC地址中,因此组播MAC地址与组播IP不是一一映射,而是一对多的关系,一个组播MAC地址对应32位组播IP地址。
ip地址分类
A类 :00000000×××------01111111×××
0.0.0.0 ------ 127.255.255.255
B类 :10000000,00000000×××------10111111,11111111×××
128.0.0.0------191.255.255.255
C类 :11000000,00000000,0000000×××------11011111,1111111,1111111×××
192.0.0.0------223.255.255.255
D类 :11100000××------111011111××××
224.0.0.0------239.255.255.255 (组播地址)
E类 :11110000×××------11110111×××
240.0.0.0------247.255.255.255 (科学实验)
IP组播和单播的目的地址不同,IP组播的目的地址是组地址------D类地址.
组播IP地址是本地管理组播地址:239.0.0.0~239.255.255.255
D类地址是从224.0.0.0到239.255.255.255之间的IP地址
其中224.0.0.0到224.0.0.255是被保留的地址
224.0.0.1表示子网中所有的组播组
224.0.0.2表示子网中的所有路由器
224.0.0.5表示OSPF(Open Shortest Path First)路由器
224.0.0.6表示OSPF指定路由器
224.0.0.12表示DHCP(Dynamic Host Configuration Protocol)服务器.
224.0.0.0――224.0.0.255只能用于局域网中路由器是不会转发的
239.0.0.0――239.255.255.255是私有地址 (与192.168. *.*功能一样)
224.0.1.0---238.255.255.255可以用于Internet上。
如果你的主机开启了IRDp(Internet路由 发现协议,使用组播功能)功能,那么你的主机路由表中应该会有这样的一条路由。
2层的MAC地址是如何与3层的IP地址进行映射的呢?通过将MAC地址的前25位强行规定位01.00.5E,而后23位对应IP地址的后23位,而组播IP地址的前4位均相同如:
IP地址:1110yyyy.yxxxxxxx.xxxxxxx.xxxxxxxx
MAC地址:00000001.00000000.01011110.0xxxxxxx.xxxxxxx.xxxxxxxx
例如:组播IP地址224.215.145.230应该映射到下列哪个组播MAC地址?( )
(A) 01-00-5e-57-91-e6 (B) 01-00-5e-d7-91-e6
(C) 01-00-5e-5b-91-e6 (D) 01-00-5e-55-91-e6
用二进制来换算,将215.145.230换算成1101,0111,1001,0001,1110,0110,取最后23位放到MAC地址中的23位可以计算得出答案是A。
显然有32个IP地址(有5个y可以不一样)对应一个MAC地址,所以要避免在同一网络中使用的多个组播IP地址对应一个MAC地址。