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地址。

相关推荐
Henry_He1 小时前
桌面列表小部件不能点击的问题分析
android
工程师老罗1 小时前
Android笔试面试题AI答之Android基础(1)
android
qq_397562313 小时前
android studio更改应用图片,和应用名字。
android·ide·android studio
峥嵘life3 小时前
Android Studio版本升级那些事
android·ide·android studio
新手上路狂踩坑3 小时前
Android Studio的笔记--BusyBox相关
android·linux·笔记·android studio·busybox
TroubleMaker5 小时前
OkHttp源码学习之retryOnConnectionFailure属性
android·java·okhttp
叶羽西7 小时前
Android Studio IDE环境配置
android·ide·android studio
发飙的蜗牛'7 小时前
23种设计模式
android·java·设计模式
花追雨17 小时前
Android -- 双屏异显之方法一
android·双屏异显
小趴菜822717 小时前
安卓 自定义矢量图片控件 - 支持属性修改矢量图路径颜色
android