📖 IPv4 地址与 MAC 地址
🎯 课程摘要:本节课介绍 IPv4 地址与 MAC 地址的关系。IP 地址封装在 IP 首部(网际层),MAC 地址封装在帧首部(数据链路层)。在数据包传送过程中,源/目的 IP 地址保持不变,而源/目的 MAC 地址逐链路改变。重点理解两种地址的区别、为何需要两种地址,以及引出 ARP 协议的必要性。
📝 详细笔记
1. IP 地址与 MAC 地址的封装位置
- TCP/IP 四层体系结构中各层数据单元的封装关系:
| 层次 | 协议数据单元 | 添加内容 | 地址封装 |
|---|---|---|---|
| 应用层 | 应用层报文 | — | — |
| 运输层 | 运输层 PDU | 运输层首部 | — |
| 网际层 | IP 数据报 | IP 首部 | 源 IP 地址、目的 IP 地址 |
| 数据链路层 | 帧(封装成帧) | 帧首部 + 帧尾部 | 源 MAC 地址、目的 MAC 地址 |
| 物理层 | 比特流 | 转换为电信号 | — |
- 关键结论:
- IP 地址属于网际层范畴 → 封装在 IP 首部(源 IP、目的 IP)。
- MAC 地址属于数据链路层范畴 → 封装在 帧首部(源 MAC、目的 MAC)。
- 每一层只看本层的首部,无需理解上层内容(上层内容对下层是"黑盒")。
2. 数据包传送过程中地址的变化
拓扑示例:三个局域网通过两个路由器 R1、R2 互联,主机 H1 发送分组给 H2,依次经 R1、R2 转发。
地址标识(各接口):
| 设备接口 | IP 地址 | MAC 地址 |
|---|---|---|
| H1 | IP1 | MAC1 |
| H2 | IP2 | MAC2 |
| R1 接口1(连 H1 侧) | IP3 | MAC3 |
| R1 接口2(连 R2 侧) | IP4 | MAC4 |
| R2 接口1(连 R1 侧) | IP5 | MAC5 |
| R2 接口2(连 H2 侧) | IP6 | MAC6 |
主机一般 1 个接口(1 个 IP + 1 个 MAC);路由器至少 2 个接口,每接口各 1 个 IP + 1 个 MAC。
逐跳地址变化表:
| 链路 | 源 IP | 目的 IP | 源 MAC | 目的 MAC |
|---|---|---|---|---|
| H1 → R1 | IP1 | IP2 | MAC1 | MAC3 |
| R1 → R2 | IP1 | IP2 | MAC4 | MAC5 |
| R2 → H2 | IP1 | IP2 | MAC6 | MAC2 |
- ⚠️ 重点/考点:
- 源 IP 地址和目的 IP 地址在整个传送过程中保持不变(端到端不变)。
- 源 MAC 地址和目的 MAC 地址逐个链路/逐个网络改变(每跳改变)。
3. 已知 IP 求 MAC 的需求(引出 ARP)
- 各设备知道"下一跳"的 IP 地址,但不知道其对应的 MAC 地址:
- H1 知道 R1 接口的 IP3,但不知 MAC3;
- R1 知道 R2 接口的 IP5,但不知 MAC5;
- R2 知道 H2 的 IP2,但不知 MAC2。
- 问题:数据链路层封装帧时,帧首部的目的 MAC 字段无法填写 → 需要通过 IP 地址找出相应 MAC 地址。
- 解决:网际层的地址解析协议 ARP(下节课介绍)。
4. 为什么需要两种地址
假设仅使用 MAC 地址通信会出现的问题:
- 每台路由器的路由表必须记录因特网上所有主机和路由器各接口的 MAC 地址;
- 手工配置路由表几乎不可能完成;
- 即使用路由协议自动构建,路由信息包含海量 MAC 地址会严重占用通信资源;
- 路由器需要极大的存储空间,分组的查表转发会带来非常大的时延。
使用 IP 地址寻址的优势:
- 网际层用 IP 地址寻址 → 路由表中路由记录数量大大减少;
- 只需记录部分网络的网络地址,而非每个网络中各通信设备各接口的 MAC 地址;
- 路由器收到 IP 数据报后,根据首部中目的 IP 地址的网络号部分,基于路由表查表转发。
- 新的问题:查表转发只能指明下一跳路由器的 IP 地址,无法指明其 MAC 地址 → 帧首部目的 MAC 字段无法填写 → 需要 ARP 协议解决。
5. IP 地址与 MAC 地址对比
| 对比项 | IP 地址 | MAC 地址 |
|---|---|---|
| 工作层级 | 网际层(网络层) | 数据链路层 |
| 封装位置 | IP 首部 | 帧首部 |
| 层次结构 | 分层(网络号 + 主机号 / 前缀 + 主机号) | 平坦(无层次) |
| 长度 | IPv4 为 32 bit | 通常 48 bit(如 MAC-48) |
| 分配方式 | 根据所在网络动态分配(可变) | 出厂时固化在网卡(硬件) |
| 性质 | 逻辑地址(软件实现) | 物理地址(硬件地址) |
| 传送中变化 | 端到端保持不变 | 逐跳(逐链路)改变 |
| 寻址作用 | 跨网络寻址、路由选择 | 同一链路内寻址(逐跳送达) |
| 唯一性 | 网络内唯一 | 全球唯一(理论上) |
💡 核心总结
- IP 地址在网际层 IP 首部,MAC 地址在数据链路层帧首部。
- 数据包传送中:源/目的 IP 地址不变,源/目的 MAC 地址逐跳改变。
- 主机 1 接口(1 IP + 1 MAC),路由器多接口(每接口 1 IP + 1 MAC)。
- 仅用 MAC 地址寻址会导致路由表爆炸、转发时延剧增 → 需要 IP 地址分层寻址。
- IP 地址解决"到哪个网络",MAC 地址解决"本链路内到哪个接口"。
- 知道下一跳 IP 却不知其 MAC → 引出 ARP 协议。
❓ 课后思考 / 经典考题
- 408 真题:主机 H1 给 H2 发送封装有 IP 分组的以太网帧,经路由器 R 转发。填写两段链路中各层的源/目的地址字段。(答案:IP 字段两段均为 H1→H2;MAC 字段第一段 H1→R,第二段 R→H2,选项 D)
- 数据包传送过程中,IP 地址和 MAC 地址哪个保持不变?哪个逐跳改变?为什么?
- 假设仅使用 MAC 地址通信会带来哪些问题?
- 路由器的路由表为什么只需记录网络地址而非所有 MAC 地址?
- 已知下一跳路由器的 IP 地址,如何获取其 MAC 地址?(引出 ARP 协议)