您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

MAC 地址为什么不需要全球唯一

时间:2020-06-26 14:51:40  来源:  作者:

来源:真没什么逻辑

作者:Draveness

mac 地址(Media access control address)是分配给网络接口控制器(Network interface controller, NIC)的唯一标识符,它会在网络段中充当网络地址使用[^1],所有具有网卡的主机都有单独的 MAC 地址,该地址总共包含 48 位,占 6 字节的空间,可以表示 281,474,976,710,656 个网络设备,一个正常的 MAC 地址如下所示的格式表示,每个字节都会使用两位 16 进制的数字:

6e:77:0f:b8:8b:6b

因为 MAC 地址需要保证唯一,所以 IEEE 会根据设备的制造商分配地址段,48 位 MAC 地址的前 24 位是设备制造商的标识符[^2],也就是组织唯一标识符(Organizationally Unique Identifier,OUI),后面的 24 位是序列号;如果每个设备制造商都能保证在同一个命名空间中的全部 MAC 地址唯一,那么全世界所有的 MAC 地址就可以保证唯一。

MAC 地址为什么不需要全球唯一

图 1 - MAC 地址

MAC 地址可以使用两种不同的格式表示,分别是 48 位的 EUI-48 和 64 位的 EUI-64[^3],本文会使用 EUI-48 格式的 MAC 地址,EUI-64 主要用于 IPv6 协议,我们在这篇文章就不展开讨论了。在通常情况下,MAC 地址会使用 24 位表示组织的序列号,但是因为很多组织不会生产这么多的设备,所以在实际操作中会划分出三种不同大小的地址块[^4]:

MAC 地址为什么不需要全球唯一

图 2 - MA-L, MA-M, MA-S

  • MA-L(MAC Address Block Large) - 包含 24 位组织标识符和 24 位地址;
  • MA-M(MAC Address Block Medium) - 包含 28 位组织标识符和 20 位地址;
  • MA-S(MAC Address Block Small) - 包含 36 位组织标识符和 12 位地址;

这三种不同大小的地址块价格也完全不同,MA-L 的注册价格为 2995 美金,而 MA-S 的注册价格为 755 美金,感兴趣并且有需要的读者可以在 IEEE 的官方购买[^5],在理想情况下,所有的地址加起来价值大概在 52 万亿美金左右,果然定义和掌握了标准就可以躺着等别人注册来赚钱。

这种由机构分发 MAC 地址段并由设备商保证地址唯一的方式就是为了保证全世界所有硬件的网络地址唯一,但是在实际操作中,全球唯一是无法保证的而且我们也并不需要地址的全球唯一,这主要因为以下两个原因:

  • 在不同操作系统上,我们都可以通过软件直接修改网卡的 MAC 地址;
  • 只需要保证一个局域网内的 MAC 地址不重复,网络就可以正常工作;

修改地址

无论是在 linux 上还是在 macOS 上,修改网络设备的 MAC 地址都是非常简单的。在 Linux 操作系统中我们可以使用命令 ifconfig 修改设备上的 MAC 地址:

$ ifconfig eth0 | grep ether        ether 6e:77:0f:b8:8b:6b  txqueuelen 1000  (Ethernet)$ ifconfig eth0 down$ ifconfig eth0 hw ether 6e:77:0f:b8:8b:6a$ ifconfig eth0 up$ ifconfig eth0 | grep ether        ether 6e:77:0f:b8:8b:6a  txqueuelen 1000  (Ethernet)

只要我们使用上述的命令就可以轻松地修改当前网卡的 MAC 地址,不过建议不要在远程的 Linux 机器上使用,最好在本地的 Linux 上测试相关的命令,在修改测试完成之后也最好使用命令将 MAC 地址改回去;在 macOS 上修改 MAC 地址也可以使用ifconfig 命令,使用的方式与 Linux 几乎完全相同。

因为 MAC 地址是与硬件绑定的,所以这种修改 MAC 地址的方式其实都是临时的,一旦操作系统重启,这些变更就会被系统撤销,想要让类似的变更永久生效需要在系统重启时执行相应的命令或者修改对应的网卡配置文件[^6]。

局域网通信

所有的计算机和终端设备都需要通过网络适配器连接到局域网中,每一个适配器都有唯一的链路层地址,也被叫做 LAN 地址或者 MAC 地址,MAC 地址被设计成了扁平结构,它们不会随着所处网络的不同而发生改变。

当设备的网络适配器想要向其他的适配器发送数据帧时,它会将目的适配器的 MAC 地址插入到如下所示的以太网帧中,每个以太网帧都与 IP 数据报类似,包含源地址和目标地址,只是以太网帧中的地址是 MAC 地址,而 IP 数据报中的地址是 IP 地址:

MAC 地址为什么不需要全球唯一

图 3 - 以太网帧

局域网中的数据传输不是通过网络层的 IP 地址进行路由和转发的,然而 IP 地址一般都是发送数据主机知道的唯一信息,想要在局域网中发送数据,还是需要知道它们的 MAC 地址。当我们的设备想要向其他的设备发送数据时,它会先通过 ARP(Address Resolution Protocol,地址解析协议) 在局域网中获取目的 IP 地址对应的 MAC 地址:

  1. 源主机会向当前局域网中发送 ARP 请求,目标的 MAC 地址是 FF-FF-FF-FF-FF-FF,这表示当前请求是一个广播请求,局域网内的所有设备都会收到该请求;
  2. 接收到 ARP 请求的主机都会检查目的 IP 和自己的 IP 地址是否一致;
    1. 如果 IP 地址不一致,主机会忽略当前的 ARP 请求;
    2. 如果 IP 地址一致,主机会直接向源主机发送 ARP 响应;
  3. 源主机在接收到 ARP 的响应之后,会更新本地的缓存表并继续向目的主机发送数据;
MAC 地址为什么不需要全球唯一

图 4 - 地址解析协议

在局域网中我们一般会使用集线器(Hub)或者交换机(Switch)来连接不同的网络设备。因为在集线器连接的局域网中,所有的数据帧都会被广播给局域网内的全部主机,所以使用相同的 MAC 地址一般也不会出现太多的问题;但是交换机会学习局域网中不同设备的 MAC 地址并将数据帧转发给特定主机,所以如果局域网是由交换机构成的,就会影响网络的通信。

MAC 地址为什么不需要全球唯一

图 5 - 集线器和交换机

假设局域网中的具有两台 MAC 地址完全相同的网络设备 A 和 B,即6e:77:0f:b8:8b:6b,当设备 A 想要向设备 B 发送以太网帧时会遇到如下所示的情况:

  1. 设备 A 在构造的以太网帧中将源地址和目的地址都设置为 6e:77:0f:b8:8b:6b 并向交换机发送数据;
  2. 交换机接收到了设备 A 发送的数据帧后,会从数据帧的源地址学习到设备 A 的 MAC 地址并将 6e:77:0f:b8:8b:6b -> A 这条记录插入本地缓存中;
  3. 交换机发现收到数据帧的目的地址会指向了网络设备 A,所以它会将该数据转发回 A;

因为交换机的 MAC 地址学习策略,所以我们不能在同一个局域网中使用相同的 MAC 地址,但是因为 MAC 地址是链路层网络中的概念,跨局域网的网络传输需要通过网络层的 IP 协议,所以在不同的局域网中使用相同的 MAC 地址就不存在类似的问题了。

总结

MAC 地址是链路层网络中的重要概念,在局域网中会通过 MAC 地址转发以太网数据帧,全球唯一的 MAC 地址是非常理想的情况,然而在实际的网络场景中,我们不需要保证如此强的限制:

  • MAC 地址可以通过软件进行修改,而第三方的山寨厂商不会在 IEEE 中申请独立的 MAC 地址段,它们也可能会盗用其他厂商申请的 MAC 地址;
  • 保证 MAC 地址在局域网中唯一就不会造成网络问题,不同局域网中的 MAC 地址可以相同;

上述的结论不是说全球唯一的 MAC 地址没有意义,与此相反,我们应该尽可能保证 MAC 地址的唯一,这样在组建局域网时才不需要手动确认所有设备的 MAC 地址,减少网络工程师的工作量。到最后,我们还是来看一些比较开放的相关问题,有兴趣的读者可以仔细思考一下下面的问题:

  • MAC 地址和 IP 地址之间有什么样的关系?
  • 为什么我们有了 MAC 地址还需要 IP 地址?


Tags:MAC 地址   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
来源:真没什么逻辑作者:DravenessMAC 地址(Media access control address)是分配给网络接口控制器(Network interface controller, NIC)的唯一标识符,它会在网络段中充当网络地址使...【详细内容】
2020-06-26  Tags: MAC 地址  点击:(35)  评论:(0)  加入收藏
本文向你展示了如何在 Fedora 上使用 NetworkManager 在某些故障情况下让你仍然可以访问互联网。-- Esteban Wilson(作者)如果你曾经在家和办公室之外连接到 WiFi,那么通常会...【详细内容】
2019-11-12  Tags: MAC 地址  点击:(138)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条