MAC 没有层级,只能一人一条记录;IP 有层级,能按前缀聚合。 所以「只用 MAC」在路由上根本行不通,而「只用 IP」在链路上发不出去。
5.3.1 讲了「IP 变 MAC」,这一节回答「为什么不能只留一个」。 4.4.2 的「路由聚合」是这里的反面对照。
一、如果只用 MAC
最直接的问题是「路由表存不下」:MAC 是 48 位随机数,没有「哪一段属于哪个网络」这种结构。
| 项 | IP 地址 | MAC 地址 |
|---|---|---|
| 结构 | 网络部分加主机部分 | 前 24 位厂商、后 24 位序号 |
| 能否聚合 | 能,一条 /8 顶一片 | 不能,只能逐条 |
| 表的大小 | 百万条量级 | 几十亿条 |
第二行是关键:IP 能聚合,是因为「同一片地址在物理上也常在一起」; MAC 完全随机,前 24 位只说明厂商,不说明位置。 所以「一台设备搬到另一个城市」,它的 MAC 一点变化都没有——这在路由上是灾难。 这也是「IP 地址必须跟着位置走」的根本原因:只有「位置信息」才能被聚合。
二、如果只用 IP
另一个方向也不行:网卡发帧时,帧头里必须填一个 48 位的 MAC, 这个字段是硬件规定的,不能填 IP。
| 层 | 帧头/包头里要什么 | 能不能改 |
|---|---|---|
| 链路层 | 源 MAC、目的 MAC | 硬件规定,不能改 |
| 网络层 | 源 IP、目的 IP | 软件填,可改 |
第一行「硬件规定」不是借口,是现实:以太网标准就是这么定的, 换协议要换硬件,成本高到不可能。 所以「两个地址都留」不是设计者偷懒: 它是「两种介质的接口」和「上层的可聚合寻址」两个需求的交集。 一个负责「在网里送到」,一个负责「找到哪张网」。
三、三句话总结
第一句:IP 管「方向」,MAC 管「交付」。 第二句:IP 会变,MAC 不变——所以 IP 能聚合,MAC 不能。 第三句:跨网段时,MAC 只在这一跳有效,每过一台路由器就换一次。
| 位置 | 源 MAC | 目的 MAC |
|---|---|---|
| 主机 A → 路由器 | A 的 MAC | 路由器的 MAC |
| 路由器 → 服务器 | 路由器的 MAC | 服务器的 MAC |
同一个包,MAC 换了一次,IP 一直没变。这就是「第 2 层管一跳、第 3 层管全程」的具体样子。 理解这一点,就理解了「为什么抓包看到的源 MAC 一直在变」——那正是路由器在干活。
四、动手 Demo:IP 和 MAC,一个都不能少
把两个地址的五个维度并排列出来,再读一次本机的实际值。 注意第三行和第五行:一个是「会变」,一个是「不能聚合」。
import subprocess
out = subprocess.run('ipconfig /all', shell=True,
capture_output=True).stdout.decode('gbk')
for ln in out.split('\n'):
s = ln.strip()
if s.startswith('IPv4') or s.startswith('物理地址'):
print(s)
实跑输出:
--------------------------------------------------------------------
IP 和 MAC,一个都不能少
--------------------------------------------------------------------
**两个地址,两种命运**:**MAC 焊在网卡上跟着硬件走,IP 配在系统里跟着位置走。**
项 IP 地址 MAC 地址
-------------------------------------------------------------------
**长度** **32 位** **48 位**
**谁分配** **按位置分配** **出厂烧录**
**会变吗** **换个网络就变** **基本不变**
**作用范围** **全程有效** **只在一跳内有效**
**层级** **有网络部分,能聚合** **没有层级,不能聚合**
**第五行是「为什么不能只用 MAC」的核心答案**:**MAC 没有结构,路由器无法「按前缀转发」。**
**全球几十亿个 MAC,只能一人一条记录,表根本存不下**;
**而 IP 有网络部分,一条 /8 就能代表一千六百万个地址。**
**实测本机这两个值**:
**IP 是 192.168.3.152(首选),MAC 是 28-F1-0E-18-FA-25**
**这两个值一个是「逻辑位置」,一个是「物理身份」**——
**换一个 Wi-Fi,IP 变、MAC 不变,这就是最直观的证明。**
**「缺一不可」的准确含义是**:**IP 负责「找到哪张网」,MAC 负责「在网里找到哪块网卡」。**
**一个管方向,一个管交付。**
读到的 IP 和 MAC 就是「同一个接口的两个身份」:换一个 Wi-Fi,IP 变、MAC 不变, 这是最直观的证明。 「MAC 基本不变」这句话有例外:手机和笔记本都支持「随机 MAC」, 连公共 Wi-Fi 时会随机生成一个,防止被追踪。 所以「MAC 是设备的唯一身份」这个说法在今天已经不成立。 最后那句「IP 管方向、MAC 管交付」可以拿去解释很多现象: 比如「为什么换网络要改 IP」(方向变了)、「为什么 MAC 冲突会时通时不通」(交付错了)。 两个地址各管一段,故障也就分成了两类。
30 秒实验
- 算一下:全球 80 亿台设备,每个一条路由要多少条?
- 想一下:为什么 MAC 不能聚合?
- 想一下:手机随机 MAC 对网络管理有什么影响?
常见误区
- 以为「有 IP 就够了」。 链路层发帧必须填 MAC,硬件规定。
- 以为「MAC 是永久的设备身份」。 现在可以随机,手机默认就这么干。
- 以为「一个包从头到尾 MAC 不变」。 每过一台路由器就换,变的只是这一跳。
自测三问(点开对答案)
1. 为什么不能只用 MAC 地址通信? —— **MAC 没有层级,无法聚合**,路由表会膨胀到几十亿条。 2. 为什么不能只用 IP 地址? —— **以太网帧头必须填 48 位 MAC**,这是硬件规定,改不了。 3. 一个包跨网段传输时,MAC 会变几次? —— **每过一台路由器变一次**,IP 头不变。下一节讲一个「反过来的 ARP」:RARP。
- ☐ (本节完,下一节 5.3.4 RARP)