MAC地址格式详解

以太网编址

在数据链路层,数据帧通常依赖于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/GG/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地址。

相关推荐
长亭外的少年2 小时前
Kotlin 编译失败问题及解决方案:从守护进程到 Gradle 配置
android·开发语言·kotlin
建群新人小猿5 小时前
会员等级经验问题
android·开发语言·前端·javascript·php
1024小神6 小时前
tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk
android·ios·tauri
兰琛6 小时前
20241121 android中树结构列表(使用recyclerView实现)
android·gitee
Y多了个想法7 小时前
RK3568 android11 适配敦泰触摸屏 FocalTech-ft5526
android·rk3568·触摸屏·tp·敦泰·focaltech·ft5526
NotesChapter8 小时前
Android吸顶效果,并有着ViewPager左右切换
android
_祝你今天愉快9 小时前
分析android :The binary version of its metadata is 1.8.0, expected version is 1.5.
android
暮志未晚Webgl9 小时前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
麦田里的守望者江9 小时前
KMP 中的 expect 和 actual 声明
android·ios·kotlin
Dnelic-10 小时前
解决 Android 单元测试 No tests found for given includes:
android·junit·单元测试·问题记录·自学笔记