网络运维及安全基础:MAC地址全面介绍之一

作者:Sender Su  来源:原创内容  发布日期:2024-01-28  最后修改日期:2024-01-29

审计说多了,回过头来说点运维和安全基础。

网卡的 MAC 地址,但凡是个网管都会接触过。在网络安全实务中,MAC 地址的安全管理一直都是繁琐但重要的基础工作。网络上虽然有不少关于 MAC 地址的科普内容,但如果有看过 IEEE (Institute of Electrical and Electronics Engineers, 电子电气工程师学会)网站上更新的关于 MAC 地址的资料,就会发现这些科普都不完整甚至已经过时。

article banner

笔者:国际认证信息系统审计师、软考系统分析师

所以,这次也写成系列篇,第一篇从软件和基础知识谈起;第二篇是安全管理;第三篇再发散思考。鉴于MAC地址的定义存在好多不断修改的历史,我这里主要介绍当前有效的定义。

先说说相关工具软件

1、查询及扫描工具

操作系统的 ARP 命令耳熟能详不说了。开源的安全扫描器 nmap 也是必须懂的,只是一般使用 nmap 时更关注的是扫描出什么端口而不是 MAC 地址。下载地址:

https://nmap.org/download.html

2、抓包和协议分析工具

实际工作中,要观察 MAC 地址的场景离不开抓包分析软件。

WireShark 这个网络抓包软件是工作标配,网络上教程不少我也不用复述了。但要深度用好 WireShark 其实并不简单,就算本文的主题只是关注 MAC 地址,网络基础知识也还是要充分入脑。最新版本4.2.2,下载地址:

https://www.wireshark.org/download.html

务必注意的是因为 WireShark 的下载镜像比较慢,网络上就出现了一些打着 WireShark “官方入口正版下载”旗号加塞私货的情况,而且还在搜索引擎打广告。

其他工具软件可以使用科来网络分析系统,该系统提供了技术交流版,可以个人非商业使用,用户界面做得还是很不错的,低中高用户都适合。下载地址:

https://www.colasoft.com.cn/download/capsa.php

作为企业内搭配使用,可以先用科来观察网络全景,再抓取流量(或者直接用 WireShark 抓取流量)然后通过 WireShark 进行详细观察和分析。

商业的抓包分析软件也有一些,比如 Omnipeek,特点是抓包数据量大的时候查找、分析和统计的速度比 WireShark 要快。

笔者曾经为了排查疑似 DNS 隧道,用 WireShark 分析了几十个文件加起来几百 GB 的抓包结果。这个过程即使自己用的已经是 i9 的工作站 PC,依然是一个慢字。

早期还有些软硬件结合的抓包工具,比如 FlukeNetworks 的 Optiview,不过都退出历史舞台了。

MAC 地址入门

MAC 地址(Media Access Control Address),直译媒体访问控制地址,也称作局域网地址(LAN Address)、以太网地址(Ethernet Address)以及物理地址(Physical Address)等。另外对于港澳台地区会使用“位址”一词取代“地址”。

计算机网络中,网络设备用 MAC 地址在局域网络内唯一性地标识自己对局域网络的每个接口(Network Interface)。计算机设备的每个网络接口都有至少一个 MAC 地址。

MAC 地址的格式为6个字节。一般用:

A1-B2-C3-D4-E5-F6

的方式表示,其中的分隔符可以改用冒号,或不使用分隔符。

理论上 MAC 地址共有组合数量为:256^6=281,474,976,710,656。

在常见的局域网环境中,MAC 地址的前3个字节是设备厂商的“组织唯一标识符”(OUI,Organizationally Unique Identifier)。这里的唯一性并不是局域网概念的,而是全球唯一。

既然是全球唯一性的标识符,那就不能厂家自选,需要通过管理机构统一分配和管理以避免冲突。

因此,世界上凡要生产网络设备的厂家都必须向 IEEE 的注册管理委员会RAC(Registration Authority Committee)提出申请分配标识符,IEEE按申请收费分配。

MAC 地址的后3个字节是 OUI 所属的厂商自行流水分配的序列。也就是一个 OUI 可以产生2^24个总长48比特(6个字节)的 MAC 地址。所以 MAC 地址的标准叫法是 EUI-48,之前也曾使用 MAC-48,但这个词已淘汰。

大多数人对 MAC 地址的了解到此就已经差不多了,但作为专业的尤其是安全人员,需要对 MAC 地址有充足的了解,因为 OUI 的定义已经变得复杂了。

MAC 地址的分类

由于网络环境和使用场景的发展,主要是为了降低全球唯一性(下文严谨一点用“全局唯一”)的 MAC 地址的消耗速度,IEEE 对 MAC 地址发展出不同的分类和用途,区分为以下4种:

MAC 大型地址块,MAC Address Block Large (MA-L)

MAC 中型地址块,MAC Address Block Medium (MA-M)

MAC 小型地址块,MAC Address Block Small (MA-S)

Company ID (CID)

前三者分别代表了 OUI 拥有者可支配的全局唯一地址空间的不同数量。其长度按二进制位数分别是24、28和36位。从这个位数可知,对于较小的地址空间 MA-M 和 MA-S,用于分辨企业组织的位数长度不止24位。第四种 CID 用于不需要 MAC 地址全局唯一性的应用场合。

下面详细介绍这些分类。

1、MAC 大型地址块:MA-L

在MAC地址发展的前期,MA-L 就曾直接称为 OUI。因此,MA-L地址等价于传统的48位格式 MAC 地址。分配MA-L地址块同时会分配24位的 OUI。

需要注意 MA-L 或者说全部三种 MAC 地址现在都具备了64位扩展的 MAC 地址,也就是 OUI 拥有者自己产生的流水号可以是24位或40位,MAC 地址的长度从6个字节(EUI-48)扩充到8个字节(EUI-64)。

一个 MA-L 地址块包含有2^24个 EUI-48 标识符,或2^40个 EUI-64 标识符。

64位扩展 MAC 地址常见用于 IPv6 场景。

对于专业范畴来说,OUI 的具体用途还包括创建多播地址、作为上下文关联的唯一性的根(做软件开发的都知道 UUID 里面包含了 MAC 地址),在使用 OUI 作为识别机制的网络协议中区别不同的公司等。

2、MAC 中型地址块:MA-M

中型意味着可分配的全局唯一地址空间比 MA-L 要少。对于被分配到 MA-M 的企业来说,区分自身的位数长度是24位的OUI加上4位的附加位共28位。但同样地最后产生的 MAC 地址依然是48位的 EUI-48(附加20位流水号)和64位的 EUI-64(附加36位流水号)两种。

一个 MA-M 地址块包含有2^20个 EUI-48 标识符,或2^36个 EUI-64 标识符。

与 MA-L 的主要不同在于,MA-M 的分配实际并不包括 OUI 的分配。因为MA-M 的用途是用于创建由 IEEE 802 标准体系定义的 MAC 地址。但 MA-M 分配可以扩展用于创建 OUI-36(36位长的 OUI) 和基于 OUI-36 的各种扩展标识符。

使用到 MA-M 分配地址的应用,不应对在 MAC 地址前24位也就是 OUI 部分的值作任何假设。因为这24位的OUI部分是 IEEE 自己保留专门用于 MA-M 分配的。

3、MAC小型地址块:MA-S

MA-S 和 MA-M 相似,但其长度是36位,可用于创建各种扩展标识符,也可以创建 MAC 地址,包括48位和64位均可,只需要附加上由使用者提供的12位或28位流水号。

一个 MA-S 地址块包含有2^12个 EUI-48 标识符,或2^28个 EUI-64 标识符。

注意,MA-S 的分配同样不包括分配 OUI,但获分配的 MA-S 可以作为各种标准中指定的 OUI-36(也就是MA-S的曾用名)使用,并基于OUI-36创建各种扩展标识符。

与 MA-M 相同,使用到 MA-S 分配地址的应用,不应对在 MAC 地址前24位的 OUI 部分的值作任何假设,因为这也是 IEEE 自己保留用于 MA-S 分配的。

MA-S 的定义是在2014年开始生效的,替代了之前定义的独立地址块(IAB,Individual Address Block)和 OUI-36 分配。

4、公司ID:CID

第四种即 CID 比较特殊,它也是3个字节共24位的 OUI 标识,但仅用作申请者的唯一标识,不用于产生全局唯一的 MAC 地址。它是专门为不需要 MAC 地址全局唯一的应用场合设计的。创建 CID 的目的主要就是为了减少 OUI 的消耗。

CID 的使用场景可包括一些特殊的硬件部件的内部微总线环境,又或者是云计算服务商或互联网企业自有的大型数据中心内部。具体见下文。

MAC地址的格式

MAC 地址的分类需要将其转换为二进制比特去解析,根据特定位置比特进行区分。

1、区分 OUI 和 CID

在上面我们提到了 MAC 地址按 OUI 性质有4种分类,我们需要区分开可以产生全局唯一流水 MAC 地址的 OUI 和仅用作区分申请者唯一性的 CID。

按 IEEE 的定义,基于 EUI-48 也就是传统的6字节 MAC 地址,第一个字节的最低二进制位被称为 M 位,从低数起第2~4位被称为 X、Y 和 Z 位。这两个位的排列组合如表1:

Z Y X M 说明
    0 0 OUI、OUI-36以及MA-M
1 0 1 0 CID

表1 OUI/CID区分说明

说明:

(1)由于 MAC 地址定义和分配的历史原因,最早分配的18个企业组织的 OUI 的 X 位是1。

(2)关于 OUI-36:获分配使用 OUI 的企业组织可以自行创建 OUI-36,也就是自主增加12个比特在原来的24比特 OUI 后面即可。但如果使用OUI-36 作为唯一的企业组织标识时,应当改为申请使用 CID。

如果 OUI-36 是由 IEEE 分配,这个 OUI-36 的前24位是属于 IEEE 专门保留的 OUI,获分配使用 OUI-36 的企业组织不能截取前24位作为自己的 OUI 使用。也不能假设获得多个 OUI-36 的企业组织,这些 OUI-36 的 OUI 部分都是一样的。

2、区分单播、多播和广播地址

MAC 地址还可以区分为单播地址、多播地址和广播地址(空地址)共三种。

IEEE 还规定了第一个字节的最低二进制位为 I/G位,I/G 即 Individual/Group;第2低位为 U/L 位,U/L 即 Universal/Local。排列组合如表2:

U/L

(同为X位)

I/G

(同为M位)

说明
  0 单播地址(Individual)
  1 多播地址(Group)    
0   全局管理地址(Universal)
1   本地管理地址(Local)

表2 地址性质说明

其中的本地管理地址在下文关于 CID 的说明中再介绍。这里先就单播、多播和广播地址进行说明:

1、单播地址

由于 IEEE 在分配 OUI 或者 OUI-36 时 X 位必为0,因此分配的就必然是 全局管理(Universal administered) 地址。再加上因为 IEEE 分配 OUI 或者 OUI-36 时的 M 位必为0,所以企业厂商自行流水创建的 EUI-48 或者 EUI-64 的 MAC 地址就必然是单播地址。

这样的一个比特多个作用的设计,也是为了节省有限资源。

2、多播地址

获得分配 OUI 或者 OUI-36 的企业组织可以自行修改 I/G 位为1(同等设置 M 位为1),此时产生的是多播地址。就算把 U/L 位设置为0,也不改变其多播地址的性质,所以不是全局唯一的 MAC 地址。

多播地址主要应用于一对多的应用,比如在 802.1X 认证,STP/RSTP/MSTP 协议等,不过实际更常见的是打印机的轮询搜索,例如图1。

multicast packet with group address

图1 打印机轮询搜索时的多播地址

3、广播地址(空地址,null address)

最后是特例,首先是广播地址 FF-FF-FF-FF-FF-FF,所有的位都是1。按上面的逻辑,广播地址就是本地管理的多播地址:Local administered Group Address。

空地址是指在硬件设备通电初始化期间临时填充到和 MAC 地址(EUI 性质)有关的寄存器或者硬件内存之类的地方的地址值。

IEEE 建议使用广播地址 FF-FF-FF-FF-FF-FF 作为空地址使用。

广播地址最常见的用途就是 ARP 请求,例如图2。

arp packet with broadcast address

图2 ARP请求中的广播地址

还有一个特殊的地址是全0地址 00-00-00-00-00-00。实际上这个地址的 OUI 即 00-00-00 是已被分配的,但该空地址并没有被使用而是被认为由 IEEE 保留。

IEEE 建议不要使用全0地址作为空地址,因为按标准这其实是一个 EUI 地址。

CID 的定义和用途

CID 除了是用于定义和分辨企业组织的唯一性标记外,还可以用于创建扩展 ELI ,即扩展的本地标识符(Extended Local Identifier)。顾名思义,本地管理也就是并非全局唯一。所以 ELI 是由获分配 CID 的企业组织自行管理和确保在 ELI 的使用范围内(比如局域网的广播域内)唯一。

注:OUI 对应 EUI,CID 对应 ELI。

从表1我们可以发现,对于 CID 只定义了 Z 位=1,Y 位=0,但排列组合的其他3种组合作什么用途呢?

答案是 IEEE 还定义了相关的使用标准 IEEE Std 802,称为“结构化的本地地址计划”,SLAP,Structured Local Address Plan。Z和Y两位产生的4种二进制组合被称为本地地址空间的四个象限空间。

SLAP 标准对如何在本地地址空间中基于 CID 的 Z=1、Y=0 的象限空间创建使用 ELI 给出了说明;对另外三个象限空间(00、01、11),SLAP 描述了不基于 CID 的标准分配标识符(SAI,Standard Assigned Identifiers)和管理分配标识符(AAI,Administratively Assigned Identifiers)的使用说明。这里不详细说了。

由于 IEEE 分配的所有 CID 其 M 位都等于0,从分配的 CID 创建为扩展标识符的 ELI 具有 I/G 位为0,因此,当把 ELI 用作 MAC 地址时,它是单播地址。同样地,可以把 I/G 位设置为1去创建 ELI,也就是这个 ELI 是多播地址。

CID 的最大使用场合是超大规模数据中心,在不同的数据中心内部可以使用同一个 CID,产生 ELI 性质的 MAC 地址给中心内全部网络设备使用,从链路层开始实现统一管理。

过时的术语和设计

MAC 地址的设计,本来 IEEE 是打算管用100年的,但由于信息技术的发展远远超出了当时的设想,MAC 地址就面临着被提前耗尽的可能。所以 IEEE 对 MAC 地址的设计调整了多次,目的就只有一个,减少 MAC 地址的浪费,延长其生命周期。

以下是因为调整而已经过时的术语:

1、Individual Address Block (IAB),独立地址块

36比特的标识符,包含了4096个 EUI-48(MAC-48)地址,已被 MA-S 替代。

2、22比特基于 OUI 的标识符

某些早期标准仅通过24比特的 OUI 的前22比特去描述 OUI,把 M 和 X 比特作为标记位而不是 OUI 的一部分。这种描述已经被正式的24比特 OUI 替代。

3、MAC-48 标识符

由于 MAC-48 这个词不能体现现在的设计,所以被淘汰。对于独立的全局唯一性的网络地址,则应使用 EUI-48 进行替代。但必须注意早期资料中使用到 MAC-48 一词时所指的范围比 EUI-48 要大,不要简单地替代两个词而导致理解错。

4、EUI-60

已经废弃,以 EUI-64 为替代。

5、CDI-32、CDI-40

历史上曾建议使用这两个术语作为上下文相关标识符(CDI,Context Dependent Identifiers),现都已过时。

最后依然是小结

MAC 地址所有这些都离不开 IEEE 802 一系列的标准,是网络运维和网络安全人员的基础背景知识。

基于最新的 MAC 地址设计,我们可以通过第一个字节的第2个十六进制数快速分辨这个地址的分类性质,进而判断代表其企业组织的位数实际长度是24位的 OUI、28位的基于 MA-M 还是36位的 OUI-36,然后从公开的清单中查询获知对应的企业名称。

同时还可以根据第一个字节的第2个十六进制数快速分辨这个地址用途和适用范围,具体如表3:

mac type and property quick sheet

表3 MAC地址分类汇总

参考信息

[1] Guidelines for Use of Extended Unique Identifier (EUI), Organizationally Unique Identifier (OUI), and Company ID (CID)

https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf

[2] IEEE网站的注册说明页,包含可下载的OUI清单

https://standards.ieee.org/products-programs/regauth/

本栏目相关
  •  2024-09-06 拿来主义也高质:优化 WSUS 之不会开发但会找
  •  2023-01-26 Windows服务器折腾安装MegaRAID存储管理器17.05版
  •  2023-02-26 能否用Windows服务器作为路由器?(基本配置篇)
  •  2023-04-08 Windows 服务器网络性能调优系列网卡篇
  •  2022-12-03 VMware vSphere Hypervisor 6.7 手动升级过程实例
  •  2022-05-20 内网DNS服务实现公网域名在内网转换解析
  •  2023-04-16 Windows 服务器网络性能调优系列操作系统篇
  •  2023-02-01 安装MegaRAID存储管理器17.05.06版的好一番折腾(Linux篇)
  •  2023-03-02 能否用Windows服务器作为路由器?(配置补完篇)
  • 本站微信订阅号:

    微信订阅号二维码

    本页网址二维码:

    本栏目热门内容
  • Acrobat虚拟PDF打印机执行打印时挂起,解决办法竟然...
  • LINKSYS交换机登录WEB界面显示不正确的解决方法
  • 又一次RAID 5阵列故障记录
  • 解决VMware vSphere ESXi 5.0 Update 1 中虚机不能...
  • 修改CentOS发行信息以绕过Dell服务器BIOS更新和DSET...
  • 解决虚拟化运行的 Windows Server 2003 标准版出现...
  • Windows Server 2008 重命名域和域控制器
  • Intel Nehalem CPU Errata 导致 VMWare ESXi(vSpher...
  • 一次很精神的电脑组装过程记录(但不是自己的电脑)...
  • 解决MySQL Cluster 备份总是失败,提示文件已存在的...
  • MegaCli安装及使用杂记
  • 解决WSUS显示客户端不全的问题
  • 解决 VMWare vSphere 6 客户端无法修改用户密码
  • 解决Windows Server 2008 R2域控制器显示无法连接到...
  • 本站服务器RAID 5阵列双硬盘失效挽救记录
  • 网站数据库从MySQL 5.0升级到5.6的记录
  • 解决MariaDB使用Percona XtraBackup增量备份出错
  • DELL PowerEdge 820 报CPU3 INTERNAL ERROR 的解决...
  • Linux 下的分区调整工具GParted实战
  • 修改arpwatch使通知邮件主题显示IP地址
  • 程序员漫画:如何用8种不同的编程语言去解救公主
  • 解决Samba WINS服务的错误解释问题
  • 解决很好用的多合一即时通信软件pidgin的崩溃问题
  • 使用 GParted 进行虚拟机硬盘分区调整操作
  • 解决Squid代理HTTP时在浏览器出现Content Encoding ...
  • 用Delphi编写使用到ADO的DLL的一些问题
  • 网站简单改版
  • 索尼系列手提电脑备份失败,出现700错误的解决办法
  • Dell R900服务器 BMC firmware incompatible with C...
  • 更多...