📡 第三章 路由器和它庞大的功能
📄 一句话概括

路由选择(routing)与转发(forwarding)是两件事,差四个数量级。 选路由 CPU 在拓扑变化时算,转发由芯片对每个包做——混起来就想不清了。

📝 本节和前面几节的关系

上一节讲「为什么需要路由器」,这一节讲它内部的两件事。 这两个词中文都叫「路由」,所以特别容易混。

一、两件事的分工

路由选择:算出「去某个网段走哪条路」。拓扑变化时才做,秒级到分钟级。 转发:把每一个包按表送出去。每个包都做,每秒几百万到几亿次。

前者由 CPU 跑协议,后者由专用芯片查表。 这就是「控制面与数据面分离」——第二章 02.09.01 讲过同一件事。

二、一个常见的误解

「路由器每收到一个包都要算一次最优路径」——不对。

路径是提前算好放进表的,每个包只做一次查表。 如果真每包都算,一个千兆口就能把 CPU 打死(每秒 148.8 万次最优路径计算)。

这也是为什么「路由表」与「转发表」要分开:路由表是「算出来的结果」,转发表是「给芯片看的、 压平过的版本」。

三、动手 Demo:选路与转发的频率差几个数量级

这段先列出两者的分工对照, 再按「拓扑稳定时每秒 10 次路由变化」与「千兆线速每秒 148.8 万个包」算频率比。

route_events = 10
fwd = 1488095
P(u"  路由选择:每秒 %d 次。" % route_events)
P(u"  转发:千兆口线速每秒 %s 个包。" % format(fwd, u","))
P(u"  相差 %s 倍。" % format(int(fwd / route_events), u","))

实跑输出:

--------------------------------------------------------------------
路由选择与转发,是两件不同的事
--------------------------------------------------------------------
**这两个词在中文里都叫「路由」,但英文是分开的**:routing(选路)与 forwarding(转发)。
**混起来会想不清路由器在忙什么。**

  项目         路由选择 routing           转发 forwarding
  ----------------------------------------------------------------
  干什么       算出「去某网段走哪条」     把每一个包按表送出去
  什么时候     拓扑变化时、周期性         每个包都要
  谁来做       CPU 跑协议                 转发芯片查表
  频率         秒级到分钟级               每秒几百万到几亿次
  结果放哪     路由表                     转发表(FIB)

**差了多少个数量级?算一下**:

  路由选择:拓扑稳定时几分钟才变一次,算它每秒 10 次。
  转发:千兆口线速每秒 1,488,095 个包。
  相差 148,809 倍。

**所以两者必须分开做**:选路交给 CPU(慢但灵活),转发交给专用芯片(快但只能照表办事)。
**这就是「控制面与数据面分离」的由来**——第二章 02.09.01 讲过同一件事。

**一个常见的误解**:「路由器每收到一个包都要算一次最优路径」。
**不对。**路径是提前算好放进表的,**每个包只做一次查表**。
如果真每包都算,一个千兆口就把 CPU 打死了。

14.9 万倍的差距,这就是为什么必须用两套硬件。 用 CPU 做转发,一个千兆口就能顶住;用芯片做选路,做不了灵活的策略。

「结果放哪」那一行也要看清:路由表在内存里、条目带属性、 便于软件增删;转发表在 TCAM 里、压成前缀加动作、 只能硬件查。两者不一致时,转发会出错——所以改完路由要确认下发成功。

最后一个实践:show ip route 看的是路由表,不等于转发表。 某些设备上出现「路由表里有、但流量不通」,就是下发到转发表这一步失败了。

30 秒实验

  1. 在设备上分别看「路由表」与「转发表」,对比条数。
  2. 看一台设备的 CPU 利用率,判断是控制面还是数据面忙。
  3. 改一条路由,看它多久生效、有没有日志。

常见误区

  1. 以为每包都算最优路径。只查表,不算。
  2. 以为路由表就是转发表。一个是软件表,一个是硬件表。
  3. 以为选路越快越好。稳定比快更重要。
自测三问(点开对答案) 1. 路由选择与转发分别由什么实现? —— 选路由 CPU 跑协议,转发由专用芯片查表。 2. 为什么每个包不重新算路径? —— 频率差四个数量级,CPU 根本算不过来。 3. 路由表与转发表的关系? —— 路由表是软件表,转发表是压平后给硬件查的版本。

下一节:算完了,看转发这一步具体做了什么。

相关笔记