在有些行业的嵌入式软件中,比如物联网,网络设备及无线协议(wifi和BLE等)开发等领域,我们会经常接触到MAC地址,那究竟什么是MAC地址,它有什么实际作用呢?请听本文讲解。
MAC地址是什么?
所谓MAC地址,即MediaAccess Control Address,最直观的翻译就是媒体访问控制地址,也可以称为局域网地址(LANAddress)、以太网地址(Ethernet Address)、硬件地址(Hardware Address)或物理地址(Physics Address),在不同地方其标识的名称可能不一样,要注意辨别。
MAC地址是网络设备在数据链路层使用的唯一标识符,用于标识设备之间的网络通信,即每个网络设备在生产时都会被分配一个唯一的MAC地址,类似于身份*号码一样,无论你的网络设备是否更换IP地址,其MAC地址都是固定的唯一的。
MAC地址一般是设备制造商在生产时烧录在设备硬件上的,比如我们最常见的电脑网卡都会有一个MAC地址,一般烧录在网卡的EEPROM芯片里面,打开电脑的cmd命令窗口,输入ipconfig /all命令,即可查看MAC地址信息,如下图所示,用物理地址标识:
如果是从事Linux开发的,在终端输入ifconfig命令,就可以查看MAC地址,下图即用HWaddr标识MAC地址:
在Ubuntu虚拟机中,如果你已经安装了net-tools,也可以使用ifconfig命令来查看MAC地址,如下图所示即用ether来标识MAC地址:
或者查看电脑上已连接到的无线wifi热点的信息,也可以看到MAC地址:
或者打开手机设置里的关于本机的界面,也可以看到,如下图为苹果手机下的用局域网地址标识MAC地址:
综上所述,当需要在不同的设备里查看MAC地址信息时,由于不同厂商的命名方法不同,一定要学会识别。
那怎么样识别呢?一种就是知道MAC地址的相关别名,还有一种就是了解MAC地址的编码结构,接下来我们继续看。
MAC地址的编码结构是什么样的呢?
由以上的相关截图不难看出,MAC地址主要由6个字节组成,总共占48位,并且通常会以十六进制展示出来,每个字节范围即为0x00~0xFF。
其中前3个字节代表设备制造商的编号,是由IEEE(国际电气与电子工程师协会)分配的厂商标识符,即为组织唯一标识符;后3个字节是由设备制造商分配给每个网络产品的,即为唯一序列号。
在TCP/IP协议的以太网帧格式中,在数据链路层中就涉及了MAC地址信息:
因为网络通信是基于源端和目的端的,要实现正常通信,必须就有源MAC地址和目的MAC地址,如下图所示:
在工业以太网通信,比如EtherCAT总线中,MAC地址也是非常重要的角色:
以下为抓包数据:
通过wireshark随便抓取几个UDP(用户数据报)协议包,在数据帧里面也可以看到MAC地址信息:
另外,从应用角度看,MAC地址还可以分为单播MAC地址、组播MAC地址和广播MAC地址,主要区别如下:
单播MAC地址:Unicast
主要用于标识网络中某个特定的设备,各设备的MAC地址是唯一的,用于点对点通信,其MAC地址的第一个字节的最低位固定为0,比如00:14:23:01:23:48;
组播(多播)MAC地址:Multicast
主要用于将数据包发送给一组特定的设备,其MAC地址的第一个字节的最低位固定为1,后面的部分用于标识特定的组,比如01:00:5E:00:00:02。
广播MAC地址:Broadcast
主要用于将数据包发送到网络中的所有设备,所有位都为1,即MAC地址为FF:FF:FF:FF:FF:FF。
那MAC地址有哪些常见用途呢?
局域网通信:
比如交换机通过MAC地址转发数据帧;
设备识别:
比如路由器通过MAC地址管理连接的设备,例如分配IP地址等;
安全控制:
比如网络管理员可以通过MAC地址过滤来允许或者禁止设备接入等。