查表只回答了"交给谁",这一节回答"怎么交"——拆掉旧 MAC 头、在出接口网段用 ARP 问出下一跳的 MAC、封上新 MAC 头扔出去:MAC 头整段重写,IP 包原封不动。6.1 说的"每跳换一整套 MAC 头",本节拆开看它怎么换。
6.3 的查表流水线走到"按命中行的出接口扔给下一跳"就停了——扔这个动作里藏着最后一公里。零件全是旧的:3.16 的 ARP 负责问 MAC,5.12 说过"广播出不了路由器",5.14 的表老化思想会在 ARP 缓存上重演。本节是 6.1 那张"接力全景图"的单跳放大镜。
一、路由表给的是 IP,交付靠的是帧(第一张配图)
6.3 的查表结果是一行四件套,其中管"交给谁"的是两个:出接口(从哪个门出)+ 下一跳 IP(交给那一片网的谁)。但出接口连着的链路是以太网/Wi-Fi——这一层只认 MAC,不认 IP。
所以"把包传输给下一个路由器"必须补一步翻译:下一跳 IP → 下一跳 MAC。翻译完,才有资格封帧、出门。整个单跳动作是四步:
- 进站拆壳:旧 MAC 头当场作废——它是上一段链路的装卸单,进站即完成使命;
- 查表:命中行给出出接口 + 下一跳 IP(6.3);
- 问路:在出接口网段广播 ARP:"谁是 211.140.20.1?"(3.16);
- 封壳出门:源 MAC 写出接口自己的、目的 MAC 写下一跳的,从出接口扔出。
二、ARP 只在本段喊:广播到路由器为止
第 3 步的 ARP 请求是个广播帧——但它只在出接口所在的那片网里转,出不了路由器。这正好把 5.12 的结论再用一遍:路由器是广播域的边界。所以路由器永远只认识"邻居",不认识"远方"——远方的路全靠路由表一站站接力(6.3),MAC 只管眼前这一段。
问回来的 MAC 不会用完就扔:缓存在 ARP 表里,过一段时间作废,下次发包先用缓存、失效了再重新广播问。这套"先记着、过期重学"的思想,和 5.14 交换机 MAC 地址表的老化一模一样——网络设备的记性都是这么设计的。
三、新旧两帧对比:换的是壳,不是货(第二张配图)
把同一跳的进站帧和出门帧摆在一起看:
- 进站的旧帧:旧 MAC 头(上一段"发送方 ↔ 本路由器")+ IP 包;
- 出门的新帧:新 MAC 头("本路由器出接口 ↔ 下一跳")+ 同一个 IP 包。
两条铁律:
- MAC 头整段重写——注意目的 MAC 写的是下一跳,不是最终收件人(223.5.5.5 的 MAC 路由器根本不知道也不要知道);只有最后一段链路,帧里写的才是真正收件人;
- IP 包原封不动——源/目的 IP 从起点到终点不变(唯一的例外仍是 3.14 的 NAT,需要专门转换表才能改)。
这就是 6.1"信封 vs 装卸单"类比的完整版:收寄件人(IP)从头写到尾不换,装卸单(MAC)每换一趟车重写一张。
四、把接力全景图点亮一跳
回到 6.1 的接力故事,现在每一跳都能展开成完整动作了。以"电脑 → 家用路由器 → 运营商"的第一跳为例:
- 电脑的帧:源 MAC=电脑网卡、目的 MAC=路由器 LAN 口(ARP 问来的);
- 路由器拆壳 → 查表命中默认路由 → 出接口 WAN 口、下一跳 211.140.20.1;
- ARP 在运营商网段问出 211.140.20.1 的 MAC → 封新帧扔出:源 MAC=WAN 口、目的 MAC=运营商路由器;
- 运营商路由器接手,重复同样四步——每台路由器都做一套,直到某段链路上目的 IP 和目的 MAC 终于是同一家。
五、动手 Demo74:arp -a,亲眼看"IP → MAC 翻译表"
Win+R→ 输入cmd→ 回车,先敲arp -a扫一眼——这是你电脑自己的 ARP 缓存表。- 敲
ping 网关的IP(如ping 192.168.1.1)——通。 - 再敲
arp -a——多了一行:网关 IP 对着一大串十六进制(如192.168.1.1 ... a4-7a-xx-xx-xx-xx)。这串就是路由器 LAN 口网卡的 MAC——电脑发包给网关时,帧的目的 MAC 写的就是它。 - 30 秒实验:
ping 192.168.1.200(本网段一个不存在的地址),再arp -a——那行显示"无法获取"(incomplete):ARP 广播喊了一圈没人应答。这就是"问路石沉大海"的样子,也再次证明广播出不了本网段。 - (选做)对照 tracert:
tracert 223.5.5.5的第一跳是网关——你刚在 ARP 表里记下 MAC 的那个 IP。帧的目的 MAC 写它,包的目的 IP 写 223.5.5.5,两层各写各的。 - 全部完成。你现在能指着 ARP 表说清:哪一列是"问路的答案"、为什么 ping 不通的地址会显示"无法获取"。
六、常见误区
- "路由器把收到的帧原样转发给下一跳"——帧从不原样转发:MAC 头整段重写,只有 IP 包原封不动往下带(对照 5.9:交换机才是透明不改帧)。
- "下一跳的 MAC 也是查路由表查出来的"——路由表只给 IP;MAC 靠 ARP 现场问(或查 ARP 缓存),两层各管各的账本。
- "ARP 广播会传遍互联网"——广播到路由器为止(广播域边界);ARP 永远只问本段邻居,所以每台路由器都只认识邻居。
- "帧的目的 MAC 写的是最终收件人"——写的是下一跳;只有最后一段才写真正收件人。3.16 埋的"目的 MAC 是网关"就是它的第一跳特例。
- "ARP 问一次终身有效"——缓存有老化时间,失效重问;设备挪了网段/IP 变了,旧缓存就是错的——和 5.14 MAC 表老化一个道理。
七、动手自测
点开自测(先自己答,再展开)
1. 路由表的查表结果里,管"交给谁"的是哪两项?交付时还缺什么? 2. 单跳四步是什么? 3. 进站帧的旧 MAC 头下场如何?为什么? 4. ARP 请求是什么帧?能传多远?为什么? 5. 新帧的源 MAC 和目的 MAC 各写谁?目的 MAC 写最终收件人吗? 6. IP 包在跳与跳之间动不动?唯一例外是什么? 7. ARP 结果用完就扔吗?过期机制像哪个旧知识? 8. "信封 vs 装卸单"的完整版说法? 9. 最后一段链路的帧,目的 MAC 写谁? 10. ping 一个本网段不存在的地址,arp -a 里那行长什么样?答案:① 出接口 + 下一跳 IP;还缺下一跳的 MAC。② 拆旧壳 → 查表 → ARP 问路 → 封新壳出门。③ 当场作废;它是上一段链路的装卸单。④ 广播帧;只在出接口网段,路由器是广播域边界。⑤ 源=出接口自己、目的=下一跳;不是,最终收件人只出现在最后一段。⑥ 不动;NAT(3.14,需转换表)。⑦ 缓存 + 老化后重问;同 5.14 交换机 MAC 表。⑧ 收寄件人(IP)端到端不换,装卸单(MAC)每换车重写。⑨ 真正的收件人。⑩ 显示"无法获取"(incomplete):广播无人应答。
八、下一步学什么
- ☑ 6.5 确定最终的发送地址(下一个路由器执行的地址) ✅ 已完成 —— 镜头拉远成全景:"最终的发送地址"只是这一段的终点;一帧四地址三种命运,路由器执行的永远是下一跳 IP,最后一段才写到收件人本人。
相关笔记
- 确定最终的发送地址(下一个路由器执行的地址) —— 本节的单跳动作,下一节拉远成全程名单:"最终的发送地址"只是那一段的终点
- 确定传输数据的目的地(确定数据传输的目的地) —— 查表给出"出接口 + 下一跳 IP",本节把"怎么交"补完
- 将数据传输到远程网络(路由) —— "IP 头不变、MAC 头每跳换"的全景图,本节是单跳放大镜
- 将IP地址与MAC地址对应(ARP) —— 问路协议本尊;"目的 MAC 是网关"正是本节的第一跳特例
- 二层交换机的操作(以太帧发送后的MAC地址表的登记) —— "广播出不了路由器"=广播域边界,ARP 因此只问本段
- MAC地址表的管理(MAC地址表) —— ARP 缓存的老化思想与 MAC 表老化同源
- 从私有网络到互联网间的通信(NAT) —— "IP 包端到端不变"的唯一合法例外