Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

路由器与逐跳转发

复习

  • 从 IP 地址找到 MAC 地址:ARP 在本地把下一跳 IP 解析为 MAC
  • 子网与 CIDR:主机通过前缀判断目标是本地还是远方
  • 默认网关:不同网络的目标,交给网关继续转发

TL;DR

  • 路由器在多个网络之间转发数据包,是网络的十字路口
  • 每台路由器只决定“下一跳”,并不掌握完整路径
  • 逐跳转发的巧妙之处:局部决策也能把包送到远方
  • 与交换机不同,路由器依据 IP 地址而非 MAC 地址

正文

  前面的局域网,终究只是一个“院子”。可全世界有无数个院子,怎么让它们连起来?

  这就需要一种设备,站在不同网络的交界处,帮数据包从一个网络走进另一个网络。它就是路由器(router)。

只决定下一跳

  路由器的工作听起来很大,做起来却很克制:它不负责把包送到终点,只负责决定下一步交给谁。

  收到一个数据包后,路由器大致做几件事:

  1. 查看包的目的 IP 地址
  2. 查路由表,找到匹配的下一跳
  3. 把包的 TTL 减一,重新封装成当前链路的帧,发出去

  就这么简单。它不知道整条路线上后面还有几台路由器,也不需要知道。它只回答一个问题:以我目前的位置,往哪个邻居走最接近目标?

局部决策也能到达远方

  你可能会怀疑:只靠局部决策,真能把包送到几千公里外吗?

  能。想象你在一个陌生的城市问路,每个人只需告诉你“往那个方向走”,而不用报出全程路线。只要每一步都比上一步更靠近目的地,你终究会到。路由器也是如此:每台都朝着“更接近目标网络”的方向转发,包就会被一站一站接力送到。

  这份“接力”叫逐跳转发(hop-by-hop forwarding)。它的好处是巨大的:每台路由器只需要维护“下一跳”的局部信息,而不必保存全世界的完整路径。把全局的难题,切成了每个节点都能独立承担的局部决定。

路由器和交换机不是一回事

  前面讲过交换机,它靠 MAC 地址在本地转发。路由器则不同:

  • 交换机看 MAC 地址,解决的是“同一网络内交给谁”
  • 路由器看 IP 地址,解决的是“跨网络往哪个方向走”

  一个负责院子里的投递,一个负责在院子之间接力。两者分工不同,却常常一起出现:你家里那台“路由器”,其实往往同时充当了交换机和路由器两种角色。

  那么,路由器是凭什么决定“下一跳该是谁”的?答案就藏在它的路由表里。

思考题 1

  为什么路由器不需要知道到达目标主机的完整路径,只需知道下一跳?

思考题 2

  交换机与路由器在决定“往哪送”时,依据的信息有什么不同?

小结

知识点

  • 路由器连接不同网络,做跨网络转发
  • 每台路由器只决定下一跳
  • 逐跳转发把全局问题拆成局部决策
  • 交换机看 MAC,路由器看 IP

参考资料

  1. Wikipedia(zh):路由器:在不同网络之间转发数据包的设备
  2. Wikipedia(zh):路由:为数据包选择转发路径的过程

思考题答案(仅供参考)

思考题 1

  因为整条路径可以由沿途许多路由器各自接力完成。每台只要知道“以我的位置,下一跳走哪里更靠近目标”就够了。这样每台路由器的表都只需保存局部信息,网络的规模和变化也更容易应对。

思考题 2

  交换机依据 MAC 地址,在同一个局域网内按端口转发,解决本地交付;路由器依据 IP 地址,在不同网络之间按方向转发,解决跨网络寻路。前者的地址不体现位置,后者的地址带有网络与主机的层次结构。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪