第 5 篇:MAC 地址——IP 管远方,MAC 管眼前

第 5 篇:MAC 地址——IP 管远方,MAC 管眼前

MAC地址不是身份证,是快递单上的"下一站"

网络基本功系列第5篇

先回答一个几乎所有初学者都问过的问题:

既然有IP地址了,为什么还要MAC地址?

这问题我当年也问过。师父看了我一眼,说:“你有家庭住址,为什么还要写收件人电话?”

住址告诉快递员往哪送,电话告诉快递员到了联系谁——两个信息,解决两个问题。

网络也一样。

IP管"到哪去",MAC管"下一站给谁"。

两个维度,缺一不可。


一、先画一张图:IP和MAC各管哪一段

假设你电脑(192.168.1.10)要访问一台远程服务器(93.184.216.34),数据包出门长这样:

目标MAC: 网关

你的电脑
IP: 192.168.1.10
MAC: AA

网关路由器
IP: 192.168.1.1
MAC: GG

互联网
MAC每跳都在变

目标服务器
IP: 93.184.216.34
MAC: ZZ

看两个关键字段:

字段谁在管
目标IP93.184.216.34(服务器)IP层,从头到尾不变
目标MACGG: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地址工作的核心场景

场景一:同网段通信——直接找对方

主机A
IP: 192.168.1.10
MAC: AA

交换机

主机B
IP: 192.168.1.20
MAC: BB

帧内容:

源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:AAPort 1
BB:BBPort 2

收到帧后流程:

没有

收到以太网帧

记录源MAC和端口

查目标MAC在哪个端口

表里有吗?

只从对应端口转发

广播到所有其他端口

交换机会学习:收到帧时,把源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 show

4. 虚拟机/容器网络不通

检查虚拟网卡的MAC是否正常生成,有没有跟其他虚机冲突。云平台偶尔会出现MAC冲突,重启实例换个宿主机可能就恢复了。


七、几个容易踩的坑

坑一:MAC地址"全球唯一"

只能说"通常唯一"。虚拟机、容器、随机MAC、手动修改,都会产生重复。排查网络异常时,把这条当经验而不是铁律。

坑二:远程服务器的MAC能在本地抓到?

抓不到。本地只会看到"目标MAC=网关"。服务器的MAC只存在于它自己的局域网里,出了那个网段就被替换了。

坑三:MAC地址只能在物理机上看到

虚拟机、容器、网桥、隧道接口都有MAC地址。ip link看到的每一个接口,都有自己的MAC。


八、一句话总结

IP告诉你最终要去哪,MAC告诉你下一步交给谁。

一个管战略,一个管执行。

分清楚了,网络就入门了一半。


下一篇预告

有了IP,想知道对应的MAC地址,就得靠ARP协议。

下一篇我们来拆ARP:广播问"谁是192.168.1.1",为什么要全网都知道?ARP缓存中毒又是怎么回事?