无心飞扬 发表于 2025-2-13 11:25:26

网络的MAC地址真的唯一么?不可修改么?从哪里来?——...

今天我们来聊一下MAC地址。MAC地址是网络通信里很重要的一个参数。相信和不少读者一样,看过一些MAC的文章或知识之后,还是仍感觉对MAC一知半解,想了解的内容,没有提及到。就像告诉你做菜,盐放少许。多少是少许,就是这种感觉。本文将带你了解你可能还没有了解过的MAC知识。可能你已经了解过一些MAC知识,也可能还没有了解过。我们先来提出几个问题:1 MAC地址真的全球唯一么。2 MAC地址真的不可修改么。3 MAC地址会不会用完。4 MAC地址从哪里来。5 MAC地址有什么作用。我们还是先来例行简单介绍个什么是MAC。
在网络通信里,每一个设备都会有一个MAC地址。包括我们常用的电脑的有线网卡,无线网卡,路由器设备,以及各种带网口、WiFi的产品等。因为在TCP/IP协议里,只要是网络通信,必须有MAC地址。用于记录和区分,数据从哪个设备出来,要到哪个设备去。这个MAC地址,可以理解为设备的物理地址。当然,以太网通信,除了有MAC地址,一般也会有IP地址。只要是以太网通信,必须有MAC地址,可以没有IP地址。
就比如一辆汽车,在车架号,相当于车的MAC地址。
同时,车还有车牌号,相当于车的IP地址。
通常我们只需要记住和使用车牌,几乎很少关注车架号。
同样,我们平时关注多的是IP地址,很少关注MAC地址。
随着工业物联网的发展,大家逐渐学习和了解更多的知识和业务,慢慢地,MAC地址也逐渐被大家去了解和学习。
大家知道IP地址,是四个字节,比如192.168.1.100 四位数字。
而MAC地址,是六个字节,一般用十六进制表示比较多。比如,1A:2B:3C: DD:EE:FF 这样的六个字节数据。




MAC地址有什么特征或者规范么。六个字节,能随便用么。
如图是MAC地址的六个字节介绍,看起来是有些过于专业的。
通俗的解释就这样:

前三个字节
后三个字节

厂家识别码
厂家自定义随便用的

64-4E-D7 (惠普)
000000~FFFFFF

好了,相信到这里,大家就差不多了解MAC大概是啥东西了。
这时候再来回答我们的几个问题:

1 MAC地址真的全球唯一么。
相信大家看过不少文章和知识点,得到的回答都是MAC地址是唯一的。
我来告诉大家,MAC地址并不是全球唯一的。
注意,这里说的是全球。甚至,MAC地址并不是唯一的。
那是因为早期以太网设备不多,再加上MAC地址是6个字节。大家就会觉得MAC地址能表示281 4749 7671 0655 也就是大概两百多万亿的设备。想着怎么都不会用光的,足够每台设备,每个网卡都有一个MAC。所以早期的介绍,各种文章,就都说MAC地址是全球唯一的。
而我们所谓的唯一性,指的是什么呢。
指的是在一个网络里通信的所有设备,要保证唯一性。要求每个设备的MAC地址都是唯一的。
因为如果在同一个网络里,有相同MAC地址存在,就会造成通信不稳定,超时,丢包等各种通信异常出现。所以为了保证网络的顺畅和稳定,要求MAC地址唯一。
因为笔者确实在实际场合中,遇到MAC地址冲突的情况。
早期的那些面试八股文就这样一直延续到现在,就演变到MAC地址全球唯一了。
至于为什么MAC地址全球不唯一,会在下一个问题MAC从哪里来展开介绍。
所以MAC地址理论全球唯一,实际不唯一。
就像规定公司不能加班,但是到处996一个意思。都是假象罢了。
很多人告诉你MAC地址要唯一。但是没人告诉我们,如果MAC冲突了怎么办。

2 MAC地址真的不可修改么。
可以修改。当然,具体看你怎么用,有没有修改的工具和手段。
我们一般看到最多的说是MAC地址已经由网络设备商固化,是不可修改的。但实际上还是可以修改的。
比如你使用电脑,就可以直接手动修改你电脑网卡的MAC地址,而且网上多的是方法和工具。甚至有的电脑或者手机的WiFi比较智能的,连接新的WiFi,还会提示你是否启用随机MAC地址来保证电脑或手机的隐私安全。
看,这是多么悖论的功能。随机MAC地址,它不怕随机出现的MAC地址和网络里的冲突呢。
哦,冲突的概率是几百万亿分之一,在正态分布里,相当于是不可能的存在了。万一呢。
所以说一边说MAC地址全球唯一不可修改,一边又可以开放修改MAC地址或者随机MAC地址功能,这本身就是很扯的事情。
IEEE可能在悄悄地说,“我们只是要求唯一,不可修改。但是大家有没有这么做,我们就不管了。”

3 MAC地址会不会用完。
短期内最大范围MAC地址用不完。但是局部MAC地址能用完。
长期来说,MAC地址也会用完。
怎么理解这个局部MAC地址用完了。
我们刚才提到,前三个MAC地址是厂家识别码。后三个是厂家自己随便用的。
那就000000到FFFFFF,大概一共1677 7215,也就是一千多万个MAC地址。
对于出货量大的厂家来说,一千多万还是用能光的。只是看一年还是十年,还是二十年。
但是,以太网通信只要还在继续发展下去,只要还在生产出货,必然会用光的。
用光了怎么办。
1)申请更多的厂家识别码。(一般建议这样。但是会额外花钱)
2)循环使用MAC地址。比如用到FFFFFF之后,新的MAC地址又从000000开始。
循环用不就地址冲突了。对呀。所以说全球不唯一了呀。
有可能000000是五年前的设备,已经报废了。所以现在用新的000000地址,也不用有事。而且,即便旧的000000设备还在用,新的000000和旧的000000在同一个现场使用的概率也极低。

4 MAC地址从哪里来。
既然MAC地址是全球共用的,必然有一个国际组织在管理和维护。
这个组织就是IEEE。在IEEE官方可以下载到一个oui.txt文件,里面记录了全球申请厂家识别码的公司或组织(针对选择公开的)。有的大公司呢,会申请多个识别码。
那么另一个问题又来了,一定要去申请厂家识别码么。
不一定。当然,这么回答是不太好,容易教坏小朋友。
但实际就是不一定。(有条件的当然最好去申请)
因为即便不申请这个识别码,随便设置个MAC地址,好像网络也能正常工作。
那么,我们再从另一个层面回答MAC地址从哪里来。
IEEE组织只是给申请的公司或组织一个识别码,但是具体到每一个MAC地址的管理和设置,还是得厂商自己来设置。
对于已经申请的公司呢,就有自己的MAC地址池了。就可以在生产的时候,进行MAC地址授权分配。
对于没有申请的公司或组织甚至个人,那就只要随便设置一个了。那么就会有可能造成冲突了,虽然概率不高。比如我个人就喜欢用00:11:22:33:44:55这样。刚好遇到别人也这样设置,不就冲突了。至少全球不唯一了。
不要以为你做了个硬件,用了个网卡芯片自己做一个带以太网的产品,MAC地址就包含在芯片里,一切帮你做好了。然而不是。
笔者还遇到过,调试过一款CPU。官方提供的SDK里的linux关于网络设置MAC地址这一块,就在linux里默认设置00:11:22:33:44:55这样的MAC地址。
就导致所有的产品在烧录这一套固件之后,MAC地址都是00:11:22:33:44:55。因为CPU的厂家不负责提供和设置MAC地址。
当然,有的好的一些的SDK呢。至少是随机生成MAC地址的。
通过随机来保证MAC地址的唯一性。
唯一不等于固定。
有的设备是每次上电启动,都会随机不同的MAC地址,这时候虽然MAC地址还是唯一的,但是不固定。可能有的网络使用也会有问题。

5 MAC地址有什么作用。
这就不得不说MAC地址的作用了。
第一层作用:MAC地址最基本的作用就是基础网络通信。这一层的作用,很多文章都有介绍,就不具体展开。
然后通信要求MAC地址唯一。为了尽可能保证MAC地址的唯一性,就有一个IEEE的组织来管理和维护全球的MAC厂家码。
在厂家码内,由厂家自己管理自己的MAC地址池的分配和使用。
第二层作用:厂家MAC地址有效性。
如果在一个网络里,确实出现有设备存在MAC地址冲突了怎么办,难免会有扯皮的时候。谁来改了。如果有申请MAC的厂家呢,就可以怼另一个MAC地址冲突的了。如果都没有MAC地址冲突,就互相扯呗,看谁扯赢了让对方改。
第三层作用:设备安全管理。
比如采购某一家的网络设备。然后希望在网络部署的时候,能将这一家的网络设备都加入到白名单里。如果一台一台设备添加呢,就比较麻烦了。
这时候,如果有MAC厂家识别码,就可以直接将整个MAC厂家识别码设置为白名单了。
方便部署和管理了。

好了,这一集就讲到了这里了。
由于篇幅有限,就介绍到这,如果有想了解更多的内容,可以留言和建议。
如果有介绍不对的地方,也可以留言指出和交流。
最后大家也可以思考和讨论一个问题。
对于没有申请MAC地址的,就真的不能正常使用么。
如果是初创的一个小公司或者个人创作,前期是没有足够的资源去申请MAC的地址怎么办,难道就将这样的小公司或者创作者就扼杀在萌芽里么。或者即便是去申请了,IEEE组织不同意怎么办。
在大经济环境不好的情况下,希望我们国产芯片,国产PLC,HMI等各种国产产品,也都能崛起。
同时我们也应该用包容的态度去对待那些前期还没有足够的资源去申请MAC地址的。
当然,有条件的还是去了解和申请MAC地址。有三档MAC地址范围可以买。最大档就是一千多万个的范围,最小档是4096个。价格每年都有上涨。




页: [1]
查看完整版本: 网络的MAC地址真的唯一么?不可修改么?从哪里来?——...