写在开篇
路漫漫其修远兮,吾将上下而求索。
——屈原《离骚》
常听IT同事说IP地址、MAC地址啥的,也搞不明白。学车载以太网过程中发现,也绕不开这几个既熟悉又陌生的词。
说熟悉吧,天天听;说陌生吧,一问就卡。
这篇咱们就把MAC、MAC地址、IP、IP地址、子网掩码放在一起,从似是而非到一次搞懂。
路虽长,慢慢走。
一、写着写着,我突然想到一个问题
前面第六篇讲了PHY和MAC,第八篇又讲MAC地址。写着写着,我脑子里突然冒出一个问题:
网卡和PHY是一个东西吗?
说实话,我以前一直以为“网卡”就是那个插网线的口,里面有个芯片叫PHY。但学了MAC之后,我发现事情没那么简单。
我查了半天,终于搞清楚了。
网卡 ≠ PHY。网卡是“MAC + PHY + 其他元件”的完整产品。
但MAC和PHY的集成方式有三种:
第一种:MAC在MCU里,PHY在外面(车载ECU最常见)
text
┌─────────────┐ ┌─────────────┐ │ MCU │ │ PHY芯片 │ │ ┌───────┐ │ │ │ │ │ MAC │ │────→│ 收发信号 │────→ 网口 │ └───────┘ │ │ │ └─────────────┘ └─────────────┘
MAC集成在MCU里,外面配一颗独立PHY芯片。两者合起来就是“网卡功能”。常见于车载ECU、工业控制器。
补充:车载以太网绝大多数采用这种“MAC在MCU里+外挂PHY”的方案。但近年来也出现了针对边缘节点的“MAC-PHY集成芯片”(如Microchip LAN8650),用于连接没有内置MAC的低成本MCU。
第二种:MAC和PHY集成在一起(传统独立网卡)
text
┌─────────────────────┐ │ 网卡芯片 │ │ ┌───────┐ ┌─────┐ │ │ │ MAC │ │ PHY │ │ │ └───────┘ └─────┘ │ └─────────────────────┘
MAC和PHY封装在同一颗芯片里,外面只加变压器和网口插座。这就是传统意义上的“网卡芯片”,常见于电脑主板、USB网卡。
第三种:MAC、PHY、MCU全集成(高集成度SoC)
text
┌─────────────────────────────┐ │ SoC │ │ ┌───────┐ ┌─────┐ ┌─────┐ │ │ │ CPU │ │ MAC │ │ PHY │ │ │ └───────┘ └─────┘ └─────┘ │ └─────────────────────────────┘
所有东西都在一颗芯片里,常见于某些低端单片机(如ESP32)。
所以:PHY是“手脚”,MAC是“脑子”,网卡是“手脚+脑子+外壳”的完整产品。只是集成方式不同,叫法略有差异。
搞清楚了这一点,再来看MAC和MAC地址,就顺多了。
二、先澄清:MAC 和 MAC地址 不是一回事
很多人把“MAC”和“MAC地址”混着说,但它们是两个东西:
| 概念 | 是什么 | 类比 |
|---|---|---|
| MAC | 数据链路层的一个功能模块(负责“什么时候发、发给谁”) | “写地址、贴邮票”这个动作/岗位 |
| MAC地址 | 网卡的那个唯一编号(48位,如00:1A:2B:3C:4D:5E) | 信封上写的那个具体地址 |
关系:MAC(模块)用 MAC地址(编号)来做决策。
没有MAC模块,没人去管“发给谁”;没有MAC地址,MAC模块也不知道该发给谁。
三、MAC地址:设备的“身份证号”
MAC地址,就是每个网卡出厂时烧录的唯一编号。
长啥样:48位,写成16进制,比如
00:1A:2B:3C:4D:5E特点:全球唯一、固定不变(一般情况)
谁给的:厂家烧录在芯片里,你改不了(除非用特殊手段)
存在哪:烧录在网卡的EEPROM或寄存器里,MAC模块启动时读取
类比:就像你的身份证号。
从出生就有,跟你一辈子
全国唯一,不会重复
不管你搬到北京还是上海,身份证号不变
四、IP地址:设备的“家庭住址”
IP地址,是一个网络上的定位地址。
长啥样:32位(IPv4),写成点分十进制,比如
192.168.1.100特点:可以变、跟网络位置有关
谁给的:网络管理员手动设置,或者路由器自动分配
存在哪:存在操作系统的网络配置里,不是硬件烧录的
类比:就像你的家庭住址。
搬家就会变
同一个城市不同小区,住址不同
住址变了,人还是那个人(身份证号不变)
五、子网掩码:切IP地址的“刀”
子网掩码是一个32位的数字,和IP地址“配对”使用。它的作用是:告诉设备“IP地址里,前多少位是网络号”。
子网掩码的写法也是点分十进制,比如255.255.255.0。把它写成二进制是:
text
11111111.11111111.11111111.00000000
前24位是1(代表网络号占24位),后8位是0(代表主机号占8位)。
怎么用?
把IP地址和子网掩码做“与”运算(都是1才得1),结果就是网络号。
举个例子:IP地址192.168.1.100,子网掩码255.255.255.0:
网络号 =
192.168.1.0主机号 =
100
类比:就像“北京市朝阳区XX路XX号”——“北京市朝阳区XX路”是网络号,“XX号”是主机号。子网掩码就是告诉你“到哪里是路名,从哪里开始是门牌号”。
为什么需要子网掩码?
没有子网掩码,设备连“自己在哪个网络”都搞不清。IP地址只是一串没意义的数字,路由器也不知道该把数据包往哪发。
六、为什么IP地址是点分十进制,MAC地址是16进制?
你可能会问:为什么IP地址写成192.168.1.100这种点分十进制,而MAC地址写成00:1A:2B:3C:4D:5E这种16进制?
这是个好问题。我查了一下,原因大概是这样的:
IP地址(32位)为什么用点分十进制?
32位二进制,分成4组,每组8位(一个字节)
每组8位的取值范围是0-255,正好是十进制
点分十进制对人友好,好记、好写、好念
比如
192.168.1.100,念出来就是“192点168点1点100”
MAC地址(48位)为什么用16进制?
48位二进制,分成6组,每组8位
但每组8位的十进制是0-255,写成
00-255-...太长了16进制下,每组8位正好写成2个字符(00到FF),紧凑
比如
00:1A:2B:3C:4D:5E,12个字符搞定,如果写成十进制要更多字符
一句话总结:
IP地址用点分十进制:因为32位分成4组,每组0-255,十进制对人友好
MAC地址用16进制:因为48位分成6组,16进制下每组2个字符,紧凑高效
两者都是给人看的:机器底层全是二进制,只是“翻译”给人看的时候选了不同的进制
类比:
IP地址的写法像“北京市朝阳区XX路XX号”——用的是人类习惯的地名
MAC地址的写法像“110101001011...”——更像机器码,但16进制比二进制短得多
七、IP和MAC:一个管“在哪”,一个管“谁”
这是最核心的问题。
IP地址管的是:“我在哪”(位置)
MAC地址管的是:“我是谁”(身份)
为什么不能只用MAC地址?
因为MAC地址是固定的,但设备会移动。你的笔记本电脑从北京带到上海,MAC没变,但“网络位置”变了。
如果只用MAC地址,网络不知道你“现在在哪”,数据不知道怎么找到你。就像你只有身份证号,没有住址,快递员没法送货。
为什么不能只用IP地址?
因为IP地址是“逻辑”的,最终还是要靠物理设备(网卡)收发数据。IP地址需要“映射”到具体的MAC地址,才能把数据从线路上真正发出去。
就像你只知道“北京市朝阳区XX路XX号”这个地址,但不知道这个地址住的是“张三”还是“李四”——快递员到了小区门口,还得喊一声“张三,你的快递”。
我目前的理解是:
IP地址负责“跨网络找到你所在的小区”
MAC地址负责“进了小区,精准找到你本人”
MAC模块负责执行“用MAC地址找到人”这个动作
子网掩码负责告诉设备“小区范围有多大”
四者配合,缺一不可。
八、一个网上的例子:你给朋友发微信
你输入“你好”,点发送
你的手机把数据打包,目标IP是你朋友的手机IP
沿途的路由器只看目标IP,决定数据往哪个方向走(IP地址干活)
数据包到了你朋友家的路由器,路由器发现目标IP就在自己下面的局域网里
路由器通过ARP协议,把目标IP转换成目标设备的MAC地址
路由器用MAC地址,把数据通过Wi-Fi发到你朋友的手机上(MAC模块用MAC地址干活)
你朋友的手机收到数据,解包,显示“你好”
九、一张表总结
| 概念 | 是什么 | 长啥样 | 谁给的 | 变不变 | 管什么 | 类比 |
|---|---|---|---|---|---|---|
| PHY | 物理层芯片 | 独立芯片 | 芯片厂家 | 不变 | 数字信号↔物理信号 | 装卸工(手脚) |
| MAC | 数据链路层模块 | 集成在MCU/SoC里 | 芯片设计厂家 | 不变 | 管时机、管地址、管打包 | 写地址、贴邮票的动作 |
| 网卡 | PHY+MAC+其他 | 多种集成方式 | 网卡厂家 | 不变 | 完整网络接口 | 手脚+脑子+外壳 |
| MAC地址 | 唯一编号 | 48位16进制 | 网卡厂家烧录 | 一般不变 | “我是谁”(身份) | 身份证号 |
| IP地址 | 定位地址 | 32位点分十进制 | 管理员/路由器 | 会变 | “我在哪”(位置) | 家庭住址 |
| 子网掩码 | 切分规则 | 32位点分十进制 | 管理员/路由器 | 会变 | 切分IP地址 | 告诉你“到哪里是路名” |
一句话记一辈子:
PHY是手脚,MAC是脑子,网卡是手脚+脑子+外壳。IP地址找到小区,MAC地址找到人,子网掩码告诉小区边界。
十、踩的坑
最大的坑:以前我以为“网卡”就是PHY芯片。这次才知道,网卡=PHY芯片+MAC模块+其他。很多MCU里集成了MAC,外面配个PHY就能上网。
第二个坑:以前我以为“网卡”只有一种形态——就是电脑主板上那颗独立芯片(MAC+PHY集成)。后来才知道,在车载ECU和嵌入式系统里,更常见的是“MCU内嵌MAC+外挂PHY”的架构。两者都是网卡,只是集成度不同。
第三个坑:以前我以为“MAC”就是“MAC地址”。这次才知道,MAC是一个功能模块,MAC地址是它用的编号。不是一回事。
第四个坑:以前我以为“子网掩码”是个可有可无的东西。这次才知道,没有子网掩码,设备连“自己在哪个网络”都搞不清,IP地址就是一串没意义的数字。
想通的那一瞬间:是当我意识到——PHY是手脚(干活),MAC是脑子(指挥),MAC地址是身份证号(身份),IP地址是家庭住址(位置),子网掩码是地图边界(范围)。五者各司其职,缺一不可。
十一、下步目标
这几个概念搞清楚了。但光知道地址是啥还不够——这些地址在实际网络里到底怎么用?数据包从A到B,一路经过哪些设备?MAC地址和IP地址分别在什么时候登场?
下步准备尝试着努力画一张网络拓扑图,然后把一个数据包的完整旅程走一遍:从你的电脑到百度服务器,或者从车载摄像头到显示屏。用流程图把每一步画出来,看看MAC和IP到底是怎么配合的。
画得不好别笑,主要是帮自己理解,顺便普渡众生,哈哈。
下期预告:网络拓扑 + 数据包的一次完整旅程。光讲概念不行,咱们画图走一遍。
十二、写在最后
这次最大的收获,是终于把PHY、MAC、网卡、MAC地址、IP地址、子网掩码这一堆东西一次搞明白了。
以前觉得它们绕来绕去,现在知道:各司其职,缺一不可。
谈天说地:这几个概念,你之前是不是也经常搞混?现在清楚了吗?留言告诉我,咱们一起理清楚。
坚持不懈,努力到感动自己,嘿嘿。