MAC 地址和 IP 地址有什么区别?为什么有了 IP 还需要 MAC?
简化版
IP 地址是网络层地址,用来标识主机所在网络和跨网络路由;MAC 地址是数据链路层地址,用来在同一个二层网络内把帧交给下一跳网卡。跨网通信时,目的 IP 通常保持为最终目标 IP,但每一跳的源 MAC 和目的 MAC 都会变化。主机先根据 IP 判断目标是否同网段,同网段就 ARP 找目标 MAC,不同网段就 ARP 找默认网关 MAC,把帧先交给网关。
详细版
IP 和 MAC 分工不同:
| 对比项 | IP 地址 | MAC 地址 |
|---|---|---|
| 所属层次 | 网络层 | 数据链路层 |
| 作用范围 | 跨网络路由 | 同一链路/局域网内交付 |
| 是否会变 | 移动网络或换网段可能变化 | 网卡硬件地址通常固定,也可软件修改 |
| 转发依据 | 路由器看目的 IP 查路由表 | 交换机看目的 MAC 查 MAC 表 |
为什么有了 IP 还需要 MAC?因为 IP 负责端到端寻址和路由选择,但实际每一跳都要封装成链路层帧发送给下一跳设备。以太网帧必须有目的 MAC,所以主机需要通过 ARP 把下一跳 IP 解析成 MAC。
完整版教学
一、先用一句工程流程理解 IP 和 MAC
一个报文从 A 发到 B,逻辑上看是发往目标 IP,但在每一段物理链路上,真正被网卡发送的是以太网帧。以太网帧需要源 MAC 和目的 MAC。
应用数据 -> TCP/UDP -> IP包 -> 以太网帧
目的IP 目的MAC
端到端 下一跳
所以 IP 和 MAC 不是重复设计,而是服务于不同层次:
- IP 解决“最终要去哪个主机或网络”;
- MAC 解决“当前这条链路上交给哪个下一跳网卡”。
二、IP 地址:面向网络层的逻辑地址
IP 地址是逻辑地址,通常由网络规划、DHCP 或云平台分配。它包含网络位和主机位,方便路由器按网络前缀转发。
路由器处理 IP 包时主要看目的 IP:
目的IP = 203.0.113.20
查路由表 -> 下一跳 = 192.168.1.1
把包交给下一跳
IP 的优势是可层次化聚合。互联网路由器不需要知道每台主机,只需要知道某个网段应该往哪里转发。没有 IP 这种逻辑地址,仅靠 MAC 很难支撑跨网络、跨运营商的大规模路由。
三、MAC 地址:面向链路层的硬件地址
MAC 地址用于同一个二层链路内的帧交付。交换机根据目的 MAC 查 MAC 地址表,决定从哪个端口转发帧。
交换机MAC表:
AA:AA:AA:AA:AA:AA -> 端口1
BB:BB:BB:BB:BB:BB -> 端口2
如果交换机不知道某个目的 MAC 在哪里,可能会在同一 VLAN 内泛洪。注意,MAC 地址主要在局域网范围内使用,路由器不会把原始以太网帧的 MAC 地址一路带到最终目的地。
四、同网段通信:ARP 找目标主机 MAC
假设 A 是 192.168.1.10/24,B 是 192.168.1.20/24。A 发现 B 和自己同网段,于是直接找 B 的 MAC。
A: 谁是 192.168.1.20?请告诉 192.168.1.10
B: 192.168.1.20 是我,MAC 是 BB:BB:BB:BB:BB:BB
A: 封装以太网帧,目的MAC=BB:BB...
这时:
- 目的 IP 是 B 的 IP;
- 目的 MAC 是 B 的 MAC;
- 不需要默认网关参与转发。
同网段通信的关键词是:目的 IP 是目标主机,目的 MAC 也是目标主机。
五、跨网段通信:ARP 找默认网关 MAC
如果 A 要访问公网服务器 203.0.113.20,A 发现目标不在本地子网,就把包交给默认网关。
A的IP包:
源IP = 192.168.1.10
目的IP = 203.0.113.20
A发出的以太网帧:
源MAC = A的MAC
目的MAC = 网关MAC
这里容易混淆:目的 IP 仍然是最终服务器 IP,不会改成网关 IP;目的 MAC 是网关 MAC,因为当前链路的下一跳是网关。
到下一跳后,路由器会拆掉旧的二层帧,根据目的 IP 查路由,再重新封装新的二层帧发往下一个下一跳。所以跨多跳时,IP 头通常端到端保持,MAC 头逐跳变化。
六、为什么不能只用 MAC 或只用 IP
只用 MAC 的问题:
- MAC 地址没有网络层级结构,难以做全球规模路由聚合;
- 二层广播域不能无限扩大,否则广播和泛洪成本巨大;
- 跨运营商、跨自治系统的路径选择需要网络层路由协议。
只用 IP 的问题:
- 网卡实际发送的是链路层帧,以太网帧需要 MAC;
- 同一链路上要定位下一跳网卡;
- 不同链路技术有各自的二层封装方式。
分层设计让 IP 专注跨网络路由,让 MAC 专注本地链路交付。
七、常见误区与追问
- 误区:访问公网时目的 MAC 是公网服务器的 MAC。 跨网段时目的 MAC 是默认网关或下一跳设备的 MAC,不是最终服务器的 MAC。
- 误区:IP 地址和 MAC 地址作用一样。 IP 用于网络层路由,MAC 用于同一链路内的帧交付。
- 误区:路由器转发时 MAC 地址不变。 每经过一个三层转发点,二层帧会重新封装,源 MAC 和目的 MAC 通常会变化。
- 误区:同网段通信也必须经过网关。 同网段主机可以通过 ARP 找到对方 MAC 后直接通信。
- 追问:为什么 ARP 查询的是网关 MAC? 因为目标 IP 不在本地子网,当前链路的下一跳是默认网关。
- 追问:交换机和路由器分别看什么转发? 交换机主要看目的 MAC,路由器主要看目的 IP。
八、加强记忆
IP 是“端到端目的地”,MAC 是“下一跳交付地址”。同网段通信时,目的 IP 和目的 MAC 都指向目标主机;跨网段通信时,目的 IP 仍是最终目标,目的 MAC 是默认网关或下一跳。交换机按 MAC 表转发二层帧,路由器按目的 IP 查路由并重新封装二层帧。面试中只要说清“IP 通常端到端,MAC 逐跳变化”,这道题就稳了。