MAC 地址与 IP 地址的分工:为什么两个都需要
初学网络的人常问:既然每台设备都有唯一的 MAC 地址,为什么还要 IP 地址?反过来也成立:既然有了 IP 地址能定位全网任意主机,MAC 地址还有什么用?答案在于两者解决的是不同层次的问题。
一个类比
把数据包送达比作寄快递。IP 地址相当于收件地址,写着国家、城市、街道、门牌号,层层收窄,任何一个中转站看一眼地址就知道该往哪个方向发。MAC 地址相当于当前这一段运输里,下一个交接人的名字。快递从上海到北京要经过若干个站点,每次交接时"下一个人是谁"都不同,但收件地址从头到尾不变。
具体差异
| MAC 地址 | IP 地址 | |
|---|---|---|
| 所在层 | 数据链路层(二层) | 网络层(三层) |
| 长度 | 48 位 | IPv4 为 32 位,IPv6 为 128 位 |
| 分配方 | 出厂烧入,由 IEEE 分配前缀 | 网络管理员或 DHCP 分配 |
| 作用范围 | 同一个广播域内 | 全网可路由 |
| 是否随位置变化 | 不变(除随机化情况) | 换网络就变 |
| 结构 | 扁平,不含位置信息 | 分层,前缀表示网络位置 |
最本质的区别是扁平与分层。MAC 地址不包含任何位置信息,40:6C:8F 只告诉你这是苹果设备,不告诉你它在哪个国家。要靠 MAC 地址在全球范围内转发,每台路由器都得保存全世界所有网卡的位置,这显然不可行。IP 地址的分层结构让路由器只需记住"往这个前缀方向走哪个口",路由表才能压缩到可管理的规模。
那为什么不干脆只用 IP?因为以太网和 WiFi 这些链路技术在设计上就需要一个链路层标识来区分同一段介质上的设备,而且链路技术本身不应该依赖上层协议。同一条以太网线既能跑 IP,也能跑其它协议,二层寻址必须自成体系。
两者如何配合
在一个局域网里发包,大致过程是:
- 主机比较目标 IP 与自己的网段。同网段就直接交付,不同网段就交给网关。
- 确定了下一跳的 IP 之后,需要知道它的 MAC 地址。这一步由 ARP 完成,详见ARP 协议工作过程。
- 数据帧的目标 MAC 填下一跳的地址,目标 IP 保持最终目的地不变。
- 每经过一台路由器,MAC 地址被重写,IP 地址不变。
第 4 点是理解整个模型的关键。抓包时如果发现源 MAC 是本地路由器而源 IP 是某个境外地址,不是异常,这正是正常的转发结果。想动手验证,可以参考用 Wireshark 按 MAC 过滤抓包。
对查询的意义
因为 MAC 地址不随位置变化,它才能作为设备身份的线索被查询厂商。在查询页输入一个 MAC 地址,你得到的是这块网卡的制造方信息,与它当前接在哪个网络无关。