MAC地址不是身份证,是快递单上的"下一站"
网络基本功系列第5篇
先回答一个几乎所有初学者都问过的问题:
既然有IP地址了,为什么还要MAC地址?
这问题我当年也问过。师父看了我一眼,说:“你有家庭住址,为什么还要写收件人电话?”
住址告诉快递员往哪送,电话告诉快递员到了联系谁——两个信息,解决两个问题。
网络也一样。
IP管"到哪去",MAC管"下一站给谁"。
两个维度,缺一不可。
一、先画一张图:IP和MAC各管哪一段
假设你电脑(192.168.1.10)要访问一台远程服务器(93.184.216.34),数据包出门长这样:
看两个关键字段:
| 字段 | 值 | 谁在管 |
|---|---|---|
| 目标IP | 93.184.216.34(服务器) | IP层,从头到尾不变 |
| 目标MAC | GG:GG(网关的MAC) | 链路层,每跳都在变 |
你的电脑根本不关心服务器的MAC地址,它只负责把帧扔给网关。
网关收到后,重新封装帧,把目标MAC改成"下一跳"的MAC。
这就是IP和MAC的分工:
IP地址端到端寻址,MAC地址逐跳转发。
像快递单:
- 收件地址(IP):最终目的地,全程不变
- 驿站取件码(MAC):每一站的交接凭证,过了这站就失效
二、MAC地址长啥样?怎么读?
MAC地址48位,6个字节,十六进制表示:
00:1A:2B:3C:4D:5E前3个字节(00:1A:2B)是OUI(Organizationally Unique Identifier),厂商标识。查这个前缀能知道大概是谁家生产的网卡。后3个字节厂商自己分配。
但别太当真。虚拟机、容器、手机随机MAC,查出来可能跟实际厂商毫无关系。
看MAC地址时记住一点:它只在这条二层链路里有效。出了交换机,没人关心你是谁。
三、MAC地址工作的核心场景
场景一:同网段通信——直接找对方
帧内容:
源MAC:AA(主机A) 目标MAC:BB(主机B) 源IP:192.168.1.10 目标IP:192.168.1.20同一个网段,IP和MAC的"目的地"一致,都是主机B。符合直觉。
场景二:跨网段通信——目标MAC是网关
这是最容易搞混的地方。
访问远程服务器时,帧是这样的:
源MAC:AA(主机A) 目标MAC:GG(网关,不是服务器!) 源IP:192.168.1.10 目标IP:93.184.216.34(远程服务器)看到没?目标IP是服务器,目标MAC是网关。
很多人第一次抓包看到这个直接懵了——“我明明访问的是服务器,为什么包发给路由器了?”
因为你的电脑只负责把数据送到下一跳。后面的路由,是网关的事。
🔧技术对应:
目标IP = 最终目的地址,目标MAC = 当前链路的下一跳地址
四、交换机怎么用MAC地址?
交换机工作在数据链路层,核心就是查MAC地址表:
| MAC地址 | 端口 |
|---|---|
| AA:AA | Port 1 |
| BB:BB | Port 2 |
收到帧后流程:
交换机会学习:收到帧时,把源MAC和进来的端口记下来。下次要给这个MAC发数据,就知道从哪个端口出去了。
如果目标MAC不在表里,就泛洪(flooding)——除了来源端口,所有端口都发一份。等对方回复了,MAC表就学会了。
交换机就是个机械化的快递分拣员:见过一次的地址就记下来,没见过的就全网广播问"谁认识这个地址?"
五、MAC地址的几种类型
| 类型 | 地址 | 用途 |
|---|---|---|
| 单播(Unicast) | 第一个字节最低位=0,如00:1A:2B:... | 点对点通信 |
| 多播(Multicast) | 第一个字节最低位=1,如01:00:5E:... | 一组设备接收 |
| 广播(Broadcast) | FF:FF:FF:FF:FF:FF | 所有设备都收 |
广播MAC最常见场景是ARP请求。你问"谁有192.168.1.1的MAC地址",但不知道对方的MAC,只能用广播发出去。
六、常见排查场景
1. 同网段ping不通
检查ARP表:
ipneigh看目标IP的MAC地址是否已学习。如果显示INCOMPLETE,说明ARP解析失败——要么目标不存在,要么广播域不通(VLAN隔离、防火墙拦截等)。
2. 抓包看到"目标MAC是网关"很奇怪?
正常。访问外网时,目标MAC就是你配置的默认网关的MAC。
检查网关MAC是否正确:
ipneigh|grep网关IP如果网关MAC显示为INCOMPLETE,说明网关ARP没学到,外网肯定不通。
3. 怀疑MAC地址冲突
MAC冲突会导致交换机MAC表来回跳,网络时断时续。
检查方法:在交换机上看MAC表,看同一个MAC是否在多个端口出现。
Linux下临时查MAC表:
bridge fdb show4. 虚拟机/容器网络不通
检查虚拟网卡的MAC是否正常生成,有没有跟其他虚机冲突。云平台偶尔会出现MAC冲突,重启实例换个宿主机可能就恢复了。
七、几个容易踩的坑
坑一:MAC地址"全球唯一"
只能说"通常唯一"。虚拟机、容器、随机MAC、手动修改,都会产生重复。排查网络异常时,把这条当经验而不是铁律。
坑二:远程服务器的MAC能在本地抓到?
抓不到。本地只会看到"目标MAC=网关"。服务器的MAC只存在于它自己的局域网里,出了那个网段就被替换了。
坑三:MAC地址只能在物理机上看到
虚拟机、容器、网桥、隧道接口都有MAC地址。ip link看到的每一个接口,都有自己的MAC。
八、一句话总结
IP告诉你最终要去哪,MAC告诉你下一步交给谁。
一个管战略,一个管执行。
分清楚了,网络就入门了一半。
下一篇预告
有了IP,想知道对应的MAC地址,就得靠ARP协议。
下一篇我们来拆ARP:广播问"谁是192.168.1.1",为什么要全网都知道?ARP缓存中毒又是怎么回事?