§ 5.2 · Section

路由器 Router

Layer-3 Forwarding · IP Routing · RFC 791

上一节的交换机解决了"同一个局域网里怎么把帧送对",但网络之所以叫"网络",是因为成千上万个局域网要连成一片。第 4 章里你访问一个网站时,数据要穿过很多个网络才能到达服务器。把不同网络接起来、让数据跨出小区的大门,这件事靠的是路由器(Router)——三层设备,认 IP,查路由表,在不同网络之间寻路。这一节用"城际快递分拣中心"把路由表、下一跳、默认路由、最长前缀匹配、静态与动态路由(RIP / OSPF / BGP)全部讲透。

生活场景
🚚 全国快递:同城派送和跨城干线是两套系统

想象你从北京给杭州的朋友寄一个包裹。

同城这一段,是快递小哥在同一条街上挨家挨户送——他认门牌号,知道"3 号楼 502 室"怎么走。这就是交换机干的活。

但包裹要跨城,小哥自己送不了。它先被送到北京的分拨中心:分拨中心的人只看面单上"杭州"两个字,就把包裹装进开往杭州的干线货车;到了杭州的分拨中心,再拆开看具体是哪个区、哪条街,交给当地的快递小哥。"看城市"这件事,就是路由器干的活。

这一节最关键的细节是:北京分拨中心根本不知道杭州的快递小哥姓什么、住哪条街——它只需要知道"去杭州的方向,把包裹交给哪一班车"。路由表、下一跳、默认路由,全部藏在这个细节里。

先把这一节的术语翻译成人话

和 § 5.1 一样,这一节也是"术语密集"的一节。好消息是:路由器涉及的每个概念,几乎都能在一个全国快递网络里找到一一对应的东西。先把这张表过一遍,读完全文再回来重读一次,效果最好。

术语换成大白话生活里对应的东西
路由器(Router,三层设备,靠 IP 转发)说白了就是"跨城的快递分拣中心"分拣中心:看城市,决定把包裹送上哪条干线
路由表(Routing Table)说白了就是"分拣员手边那张分区表"墙上贴的"华北 → 3 号传送带,华东 → 7 号传送带"
路由条目(Route Entry)说白了就是"表里的一行"一行 = 目的地 + 下一步交给谁
下一跳(Next Hop)说白了就是"下一步交给谁"接力赛里下一个接棒的人
默认路由(Default Route,0.0.0.0/0说白了就是"走投无路时的兜底出口"分拣表最后一行"其他任何地方 → 总仓"
静态路由(Static Route)说白了就是"管理员手写上去的路线"打印好贴在墙上的分区表,路况变了得人改
动态路由(Dynamic Routing)说白了就是"路由器之间互相通报、自动学路线"分拣中心用对讲机通气:"我这边堵了,别往我这送"
RIP(Routing Information Protocol)说白了就是"邻居之间互相传小道消息"小县城的口口相传,只认"隔了几站"
OSPF(Open Shortest Path First)说白了就是"每人画一张全城地图,再算最短路线"公司画了张全城地图,拿尺子量哪条路最近
BGP(Border Gateway Protocol)说白了就是"各大运营商之间谈生意签合同"省与省之间的干线,走哪条线是签约决定的,不是比谁近
路由域(Routing Domain)说白了就是"同一套路由规则能管到的范围"同一家快递公司自己的全国网点

这一节可以用一句话串起来:路由器是"城际分拣中心",靠一张路由表决定每件包裹往哪个方向走;它不认门牌(MAC),只认城市(IP 网络号);不认识的就交给默认路由兜底,几条都能走就挑最精确的。其余全是细节。

从上一节接过来:一条街交给交换机,城际交给路由器

上一节我们把交换机讲透了:它是"认得人的收发室",靠一张自学的 MAC 地址表,在同一个广播域(同一条街、同一个小区)里精确送信。这一节的主角要解决的是上一节留下的那个"下一站"——数据要出小区了,怎么办?

回顾一下 § 3.5 讲过的规矩:同一个网络号(同一个 IP 网段)内的机器可以直接通信,不需要经过路由器;可一旦目标在别的网段,就必须先出"小区大门"——那个大门就是网关,而出门的这条路,就是由路由器铺的。

交换机能把这个活揽下来吗?不能,有三个硬伤:

所以网络世界从很早就把活分成了两半:交换机管"一条街"内的精细投递(二层,认 MAC),路由器管"街与街、城与城"之间的干线运输(三层,认 IP)。§ 5.1 结尾那句话现在可以接上了——交换机解决"连上了还互不打扰",路由器解决"不同网络之间也能通"。这一节,我们把后者讲透。

Analogy · 城际分拣中心:路由器的全部真相

如果你只记住这一节的一个类比,请记住这个。

想象一个快递分拣中心。传送带上一件件包裹过来,分拣员站在边上,墙上贴着一张分区表:
面单上写着「北京 …」 → 扔进 3 号传送带
面单上写着「上海 …」 → 扔进 7 号传送带
面单上写着「广州 …」 → 扔进 9 号传送带
其他任何地方 → 扔进「总仓」那个大笼子

请注意分拣员干活的三个特征,它们和路由器一模一样:

① 他只看地址的开头几个字,压根不看后面的门牌。"北京"两个字就够他做决定了——具体是哪条街哪一户,那是北京当地站点的事。路由器也一样:它只看 IP 地址的网络号(回指 § 3.5:掩码就是那把划线的尺子),从不关心主机号。

② 他只知道"扔进哪条传送带",不知道包裹之后还会怎么走。北京分拣中心不知道包裹在杭州会坐哪辆三轮车、由哪个快递员送。整条路线是一站一站接力接出来的,没有任何一站掌握全程。这就是路由器世界的"逐跳转发"(hop-by-hop)。

③ 他手里只有一张表,而且表不是他发明的。这张分区表要么是人贴上去的(静态路由),要么是各个分拣中心之间互相通报、自动更新的(动态路由)——分拣员只负责查表,不负责改表。

把这三个特征记住,这一节就学完一半了:路由器 = 看网络号 + 查路由表 + 决定下一跳,仅此而已。

路由表:分拣台上那张表

§ 3.5 里我们看过一台普通电脑的路由表(就三五行:默认路由、直连网段、回环地址),这一节看的是真正的路由器——它内部那张表才是"分拣台"上那张正儿八经的分区表。先看它的长相,再拆它的每一行。

【一台企业出口路由器的路由表(示意,具体因网络而异)】

  目标网络             下一跳           出接口      这条怎么来的
  10.1.1.0/24         直连             eth0        接口自带网段,开机自动生成
  10.2.0.0/16         10.1.1.2         eth0        管理员手写的静态路由
  10.3.0.0/16         10.1.1.3         eth0        OSPF 动态学来的
  0.0.0.0/0           203.0.113.254    eth1        默认路由:兜底,交给运营商

★ 每一行都在回答同一个问题:
  "去往『目标网络』的包,交给『下一跳』,从『出接口』送出去。"
  这三个信息缺一不可:
    没有目标网络,不知道这条规则管谁;
    没有下一跳,不知道把包递给谁;
    没有出接口,不知道从哪个门出去。

注意目标网络那一列写的是 CIDR(回指 § 3.5:/16/24 这种写法)。说白了,路由表的行不是给"一台机器"指路,而是给"一片网络"指路。分拣员不会为每一户人家记一条规则——他只为每个城市记一条。这就是为什么路由表能小到几千行就能覆盖整个互联网:全世界几百万个网络,一台核心路由器用几十万条条目就装得下(具体条数因网络而异,但量级是这个)。

路由表里的条目从哪来?只有三个来源,记住这一个分类,后面整节都不乱:

静态和动态是后面两节的重头戏,这里先记住它们的区别就够了。路由器查表的过程,本质上就是一个"对号入座"的动作:拿包上的目标 IP,去表里找匹配的行,找到就把包从对应出接口送出去。接下来三节,把"匹配"这件事拆到最细。

下一跳:我不认识终点,只认识下一步交给谁

路由表每一行里的"下一跳",是这一节最容易被忽略、却最本质的概念。它说的是:这台路由器并不认识最终目的地,它只认识"离自己最近的、能帮我把包裹再往前送一程的那台机器"。

Analogy · 4×100 米接力:下一跳的全部真相

想象一场接力赛。第一棒运动员的任务只有一个:把接力棒稳稳交给第二棒。

他需要知道第二棒站在哪里、什么时候起跑、用什么姿势接棒——但他完全不需要知道第二棒跑完之后往哪走,更不需要知道第四棒冲线时在哪个区。第三棒认识第四棒,第二棒认识第三棒……四个人各自只认识"下一棒",但四棒接完,整条跑道被完整跑完了。

互联网的跨网络送信一模一样:你家路由器把包交给运营商的路由器,运营商的路由器交给下一台骨干路由器……每一台都只查"下一步交给谁",没有任何一台掌握全程。这就是"逐跳转发"(hop-by-hop,这个词在 § 3.5 提过)。

为什么非要这样?因为让每一台路由器都记住"到全世界的每一条完整路径",既不现实也没必要——全世界有几百万个网络,路径还在随时变化;而"只记下一步"让每台路由器只需要记住自己这一小片,负担轻几个数量级。

这个设计带来一个巨大的好处,值得单独说:任何一台中间路由器坏了,数据不会跟着死。只要旁边两台路由器重新商量出新的下一跳,包裹就绕道继续走。这就是 § 3.5 讲过的那个"快递中转站烧了,包裹改走另一条线"的场景——之所以能做到,正是因为没有任何一站掌握全程,也就没有任何一站是"不可替代的"。

还有个细节顺带澄清:下一跳不是目的,它通常是一个"比我更靠近目的地的路由器"的 IP 地址。换成大白话:分拣中心的下一跳是"开往杭州的那班货车",不是杭州的收件人。你问分拣员"这包裹怎么到杭州?",他只会告诉你"交给 7 号传送带"——而这就够了。

默认路由:走投无路时的兜底出口

再看一眼上面那张路由表,最底下那行:0.0.0.0/0 → 203.0.113.254。这一行太特殊了,值得单独一节。

先回忆 § 3.5 的一句话:/0 的意思是"零位需要匹配",也就是对任何地址都匹配。所以这行条目有个响亮的名字——默认路由(Default Route)它的职责只有一条:当路由表里所有更具体的条目都匹配不上时,把包交给它兜底。

【默认路由是怎么兜底的】

  一个包的目标是 8.8.8.8(谷歌的 DNS):
    匹配 10.1.1.0/24 吗?   → 不匹配
    匹配 10.2.0.0/16 吗?   → 不匹配
    匹配 10.3.0.0/16 吗?   → 不匹配
    匹配 0.0.0.0/0 吗?     → 匹配!(它对一切都匹配)
    → 交给 203.0.113.254,也就是运营商

★ 换成大白话:
  默认路由就是分拣表上最后一行
  "其他任何地方 → 扔进总仓"。
  它一定成立,所以永远兜得住;
  但它最不具体,所以只要有别行对得上,就先用别的。

为什么说这是"最优雅的设计"?想想你家那台路由器:它需要知道全世界的地址吗?不需要。它只需要两条信息——家里直连网段怎么走(直连路由),以及"其余一切"往哪儿推(默认路由,推给运营商)。全世界几百万个网络,你家路由器一条都不用记,一条 0.0.0.0/0 全搞定。相当于大楼前台不需要认识全公司每个人,只需要知道一件事:所有访客,一律先到我这儿登记。路由表的尽头永远站着一个默认路由,它是这张表不臃肿的真正原因。

反过来说,如果一台路由器既没有匹配的条目、也没有默认路由,会发生什么?很简单:这个包被丢弃——说白了就是"查无此路,直接扔掉"。所以出口路由器要是把默认路由写错了或漏了,整条线上网就断了;这也是一句流传很广的排障口诀的由来:"上不了网先查默认路由。"

注意一个常见误解:默认路由不是"最优先",而是"最兜底"。它是前缀最短(/0)的那一条,所以在"谁能匹配"的竞争里它永远最后才被选中——下一节讲最长前缀匹配,就把这个"最后才轮到"讲透。

最长前缀匹配:多条都能匹配时,选最精确的

现在来到路由器"匹配"逻辑的核心。前面反复出现一句话——"只要有别行对得上,就先用别的"。那如果好几行都对得上呢?选哪条?

答案是一个听起来很绕、其实很好懂的名字:最长前缀匹配(Longest Prefix Match)规则只有一句:在所有能匹配的条目里,选"前缀最长"也就是最具体的那一条。

【最长前缀匹配:一个例子走一遍】

  路由表里有这三条:
    10.0.0.0/8       (前 8 位匹配:10.x.x.x 都算)
    10.1.0.0/16      (前 16 位匹配:10.1.x.x 都算)
    10.1.2.0/24      (前 24 位匹配:10.1.2.x 都算)

  现在来了一个目标 10.1.2.34 的包:
    和 /8  匹配吗?  → 匹配(10.1.2.34 确实以 10 开头)
    和 /16 匹配吗?  → 匹配(确实是 10.1.x.x)
    和 /24 匹配吗?  → 匹配(确实是 10.1.2.x)
    三条都匹配 → 选前缀最长的 /24 → 按它指定的下一跳发

★ 为什么这么选?
  因为更长的前缀代表"更具体的安排"——
  就像"中关村大街 27 号"比"北京市"更精确,
  特殊安排(专线、隔离网段)总比泛泛而谈更该优先。

这个规则在 § 3.5 用公司规章打过比方:"研发部出差报销"和"全公司出差报销"两条规定都适用于一个研发部员工时,按更具体的那条办。这里再补一个快递版的:一张面单写着"北京市海淀区中关村大街 27 号",分拣系统的规则里同时有"北京 → 华北分拨中心"和"海淀区 → 本地网点"两条,那就按更细的"海淀区"走——因为既然有人专门为海淀区写了规则,说明它通常是特别安排。

目标地址能匹配的条目谁胜出理由
10.1.2.3410.0.0.0/810.1.0.0/1610.1.2.0/2410.1.2.0/24前缀最长(24 > 16 > 8),最具体
172.16.5.90.0.0.0/0(默认路由)0.0.0.0/0只有它匹配,别无选择
10.1.9.8810.0.0.0/80.0.0.0/010.0.0.0/8/8 比 /0 长,更具体

这张表也顺带解释了上一节的伏笔:默认路由(/0)的前缀是全世界最短的,所以只要有任何一条更具体的条目匹配,就轮不到它——它永远是"最后才被想起来的那个人"。这既保证了特殊路线优先,又保证了普通流量永远有出路。路由器这一套"选最具体"的规矩,本质上就是人类社会处理规则冲突时的同一套直觉:特殊优于一般,专项优于通用。

转发动作:路由器拿到一个包,具体做了什么

前面讲的都是"查表、决定下一跳",这一节看看动手的环节:一个包真的到了路由器手里,它到底做了什么?这里有个和交换机很不一样的细节,很多人学网络多年都说不清。

【包经过一台路由器:什么变了,什么没变】

  包到达路由器 R,从 eth0 口进来(包外面还套着以太网帧):

    帧头:源MAC=发件主机    目的MAC=R    ← 这层是"信封"
    IP头:源IP=发件主机      目的IP=服务器  ← 这层是"信",真正的目的地
    数据:……

  R 接下来做五件事:
   ① 拆掉旧帧头,露出 IP 头(信封先拆开)
   ② 查路由表 → 下一跳是 S,出接口是 eth1
   ③ TTL 减 1 —— 减到 0 就丢弃,并回一条 ICMP"超时"消息
      (回指 §1.5:TTL 就是防包在网络里无限转圈的那道闸)
   ④ IPv4 要重算头部校验和(TTL 变了,校验就得重算;
      回指 §3.5:IPv6 干脆删掉了这道手续)
   ⑤ 换上新帧头:源MAC=R  目的MAC=S    ← 变的只有这一行
      然后从 eth1 把包送出去

★ 换成大白话:
  中转站换车不换货——
  包裹(IP 数据)从头到尾不变,
  但每过一个中转站都要贴一张新面单(MAC 头)。
  因为 MAC 只在"同一条街"内有意义(回指 §1.3),
  到了新的一条街,就得用新街的地址。

这个"换信封不换信"的动作,是路由器和交换机最本质的分工差异之一:交换机收到帧,基本原样转发(最多贴个 VLAN 标签,§ 5.1 讲过);路由器则每次都"重封装"——拆掉旧 MAC 头、换上以自己为源、以下一跳为目的的新 MAC 头。IP 头的源地址和目标地址始终不变(除非做 NAT,而 NAT 我们 § 3.5 讲过,这里不展开)。

为什么要换信封?因为 MAC 地址只在同一个局域网(同一条街)内有效。上一跳和路由器在同一条街,用的是上一跳的 MAC;路由器要把包送到下一条街,那儿的机器只认下一条街的地址。本质上就是:每过一道城际关卡,就得换一张当地认的通行证。

还有一个值得记住的细节:路由器只转发包,不关心包里面是什么。它是 TCP 还是 UDP?是网页还是视频?路由器一概不拆开看(那是传输层以上的事,§ 2.1 讲过层次)。换成大白话:分拣中心只认面单,不拆包裹。这个"不拆包"的原则,就是 § 3.5 说的"IP 只管把包送到地址去"在设备层面的落地。

静态路由 vs 动态路由:手写路线 vs 互相通报

路由表里的条目怎么来的,前面已经列了三个来源,其中"静态"和"动态"是管理员必须做选择的两条路。这一节把选择依据讲透。

静态路由(Static Route):管理员一条一条手写进路由表。它长什么样?说白了就是"我家门口那条路,我亲自画在纸上贴墙上"。什么时候用?网络小、结构固定、路径几乎不变的地方——比如两家公司之间拉了一条专线,这条路永远走它,就写死。它的好处是简单、可控、不占带宽、不泄露内部拓扑;坏处是路况变了不会自己适应——专线断了,它还会傻傻地把包往断路上送,直到有人去改表。

动态路由(Dynamic Routing):路由器之间跑协议,自动交换"我能到哪些网络"的信息,自己算出路由表。说白了就是"各个分拣中心之间用对讲机互相通气,自动更新分区表"。它的好处是链路一断,几秒到几十秒内全网自动绕开(这个时间叫收敛,§ 5.1 讲 STP 时出现过这个词);坏处是复杂、要占用带宽和 CPU、而且收敛期间网络是"商量中"的状态

静态路由动态路由
谁写的管理员手写路由器之间用协议自己学
路况变了不会自己适应,等人来改自动收敛,绕开故障链路
开销零:不占带宽、不吃 CPU有:协议报文占带宽,计算占 CPU
可预测性极高:走哪条路完全确定一般:取决于全网状态
适合场景小网络、固定链路、专线大网络、多链路、要自动容灾
生活类比打印贴墙的分区表,可靠但死板分拣中心对讲机互通,灵活但吵

实际网络里两者总是混用:企业出口通常写一条默认路由(静态),内部多链路之间跑动态路由;互联网骨干则全靠动态——因为全世界的链路天天在变,谁也没本事手写。至于你家那台路由器,它其实哪边都算不上——它那条默认路由是拨号/运营商自动下发(DHCP / PPPoE,回指 § 3.6 与 § 3.5)的"准自动"条目,家里设备太少,用不上真正的动态路由协议。

动态路由三兄弟:RIP、OSPF、BGP

动态路由协议不止一种,因为"选路"这件事在不同规模的世界里,要的答案完全不同。就像问路:小县城里问邻居就行,大城市要查地图,跨国物流得看签的合同。路由协议恰好也分这三个量级——RIP、OSPF、BGP,一个比一个大。

老大哥 RIP(Routing Information Protocol,路由信息协议,规范 RFC 2453;第一版是更早的 RFC 1058)。它的算法叫距离矢量(Distance Vector):每台路由器定期(RIP 默认约 30 秒)把自己的整张路由表告诉邻居,邻居听说了就更新自己的表。说白了就是"小道消息一条条传":我告诉邻居,邻居再告诉邻居的邻居,大家慢慢都知道了。它的度量很简单——跳数:每过一个路由器算一跳,最多认 15 跳,16 跳视为"不可达"(所以 RIP 只适合小网络)。优点:实现简单、老牌、好懂;缺点:收敛慢、跳数上限低。RIP 是"熟人社会"式的路由——在小圈子里够用,出了圈就传不动了。

二哥 OSPF(Open Shortest Path First,开放最短路径优先,规范 RFC 2328;IPv6 版 OSPFv3 是 RFC 5340)。它用链路状态(Link State)算法:每台路由器把自己的"邻居关系 + 链路开销"广播给区域内所有路由器,于是每台路由器手里都有一张全网的完整拓扑图,然后用著名的 Dijkstra(迪杰斯特拉)最短路径算法,自己算出到每个网段的最短路径树。度量是"开销(cost)",通常由链路带宽算出来(具体数值因厂商而异)。优点:收敛快(秒级)、支持很大的网络、没有跳数限制;缺点:比 RIP 复杂得多。换个说法:OSPF 是"画全城地图再拿尺子量"——每个人都知道全局,所以算出来的路是真的最短。它是今天企业内部网络(校园网、园区网、数据中心内部)的主流选择。

三弟 BGP(Border Gateway Protocol,边界网关协议,规范 RFC 4271)。它运行的尺度是整个互联网:连接各大运营商(专业叫法:自治系统 Autonomous System,缩写 AS)。它的算法叫路径矢量(Path Vector)——每条路由都带着一串"途经的 AS 编号",选路时看的不只是远近,更是"商业关系与策略":谁跟谁有对等互联、谁欠谁的流量费、哪条路不能走。说白了,BGP 是运营商之间"谈生意"的协议:签了合同的路线才走,光近没用。所以互联网选路经常"绕远"——不是技术上不会走直线,而是商业上不允许。全球 BGP 路由表的条目数量级在数十万条(数字随互联网增长而变化,具体因网络而异)。它是整个互联网能连成一片的幕后功臣。

RIPOSPFBGP
规范RFC 2453RFC 2328RFC 4271
算法距离矢量链路状态 + 最短路径优先路径矢量
度量依据跳数(上限 15)链路开销(常按带宽)策略 + AS 路径长度等
适用尺度小网络企业内部网络互联网级(运营商之间)
收敛速度慢(分钟级量级)快(秒级)较慢(全球范围,需稳定)
大白话邻居口口相传全城地图 + 尺子量最短运营商之间签合同

这张表不用背,记住一句话就够了:网络越小越简单,协议越朴素;网络越大越讲"策略",协议越复杂——RIP 管小圈子、OSPF 管一个公司、BGP 管整个互联网。具体到某厂商设备的默认参数、某条链路的 cost 数值,各家各网不同,这里一律不写死——你需要的是这个"三级跳"的图景,不是背一串会过时的数字。

路由 vs 交换:一张表看懂两位大哥的分工

交换机(§ 5.1)和路由器(本节)是第 5 章的两大主角,也是最容易混的一对。把两张表摆在一起,差异一目了然:

交换机 Switch(二层)路由器 Router(三层)
看哪层的信息只看以太网帧头(MAC 地址)看 IP 头(IP 地址)
查什么表MAC 地址表(CAM 表)路由表
表怎么来的自学习 + 老化,全自动直连 + 静态配置 + 动态协议学习
认的"地址"MAC:同一局域网内的身份证IP 网络号:跨网络的门牌
广播域默认不隔离(VLAN 才隔离)天然隔离:广播不出路由器
改不改包基本不改(VLAN 加标签)改:TTL 减 1、重算校验、换 MAC 头
管辖范围一条街:一个广播域内城际:把不同广播域/网段接起来
一句话记法同街收发室(认门牌)城际分拣中心(认城市)

这张表的骨架 § 2.1 和 § 5.1 都出现过,现在信息齐了。判断一台设备"是交换机还是路由器",就看它查的是 MAC 表还是路由表——这是唯一的硬标准。家用设备里两者都查(后面讲),公司里也可能有"三层交换机"(本职二层、可配 IP 做跨网段转发,§ 5.1 提过,常用来给 VLAN 之间做路由)——但只要它一查路由表、一减 TTL,那一刻它干的就是路由器的活。

这里把路由域(Routing Domain)这个词也补上,它是这一节相对新的概念:说白了,路由域就是"由路由器连起来、用同一套路由策略统一管理的一大片网络"。对照着记:广播域是二层概念(谁听得见同一声广播),VLAN 在二层把广播域切开;路由域是三层概念,路由器把被切开的广播域重新接起来——而"接起来"之后,广播域之间依然互相隔离,只是数据能通过路由器有节制地流动。就像一栋写字楼:每层之间墙是隔死的(广播域隔离),但电梯把楼层串起来(路由),去哪层都要经过电梯(路由器)这道关卡。

家用路由器真相:一个盒子里的"五合一"

前面讲的都是"纯种"路由器。现在回到你家——你天天见的那台"路由器",其实是个五合一甚至六合一的杂牌军。§ 5.1 结尾已经列过一次这张表,这里从"路由"的视角再看一遍,你会更明白它为什么叫这个名字却又不止干路由这一件事。

盒子里装的东西干什么对应哪一节的概念
路由器(三层)跨网段寻路:把出家门的包交给运营商本节主角;NAT 在 § 3.5 讲过,一句带过
交换机(二层)那 4 个 LAN 口之间互传帧§ 5.1 主角
无线 AP把 WiFi 信号发出去,手机靠它接入§ 6.1 会讲
DHCP 服务器给家里设备自动发 IP§ 3.6 细讲过
防火墙(简易版)默认挡住外面进来的陌生连接§ 5.4 的主角
网关对家里设备来说,它就是"小区大门"§ 3.5 讲过网关概念;§ 5.3 网关与光猫细讲

对你家每台设备来说,这台盒子的 LAN 口 IP(通常是 192.168.1.1)就是"默认网关"——所有出网段的数据,第一站都交给它,再由它内部的"路由"部分决定往哪儿送。这一层关系你在 § 3.5 看电脑路由表时已经见过:那条 0.0.0.0/0 → 192.168.1.1,指的就是它。

正因为是个多合一,日常有两个经常被误解的细节值得说破:

为什么厂商要把这么多东西塞进一个盒子?说白了就三个字:省事、省钱、省地方。但代价是概念被搅在一起——你拆开任何一台家用路由器,里面真正的"路由"芯片只是很小一块。理解"它是五合一",你就再也不会把"WiFi 信号差"误当成"路由器坏了"——那是无线 AP 的锅,路由器表示不背。

常见误区:关于路由器的五个谣言

路由器是被误解最多的网络设备,没有之一。五个流传最广的谣言,一次拆干净——每一个都能用这一节前面讲过的原理回答。

五个谣言背后其实是一个共同点:把"路由"这一个部件的能力,安到了整个盒子甚至整个网络的头上。分清"谁负责什么",谣言自然不攻自破。

串一遍:一个包从你家到网站的完整旅程

这一节讲的东西多而散,最后用一个完整的"跑一遍"把它们全部串起来。场景:你在家打开浏览器访问一个网站(IP 已经查好,比如 203.0.113.88;DNS 那一步 § 4.2 讲过,这里跳过)。

【一个包从你家到网站的全程(方向:出去)】

  ① 你的电脑
     查自己的路由表:目标 203.0.113.88 不在直连网段
     → 交给默认路由 → 默认网关 192.168.1.1
     (你家那台五合一盒子的 LAN 口)

  ② 家用路由器(五合一)
     内部"路由"部分查表:家里网段直连,其余一律默认路由
     → 交给运营商(顺手做 NAT 换地址,§3.5 讲过)
     → 从 WAN 口送出去

  ③ 运营商接入路由器
     表里有更具体的条目(它知道 203.0.113.0/24 属于哪家)
     → 按最长前缀匹配,交给对应方向的下一跳

  ④ 一路上的骨干路由器
     各自查 BGP / OSPF 学来的表,一站一站接力
     每跳:TTL 减 1、重算校验、换掉 MAC 头(信封换信不换)

  ⑤ 网站所在公司的出口路由器
     表里有 203.0.113.0/24 的精确条目(直连或静态)
     → 交给公司内部的交换机

  ⑥ 交换机(§5.1 主角)
     查 MAC 表,把帧送到服务器的网卡

  ⑦ 服务器收到包,回包原路返回(方向相反,接力再来一遍)

★ 全程没有任何一台设备看过完整路线:
  每一台都只做同一件事——看 IP、查表、交给下一跳。

这趟旅程最值得回味的是最后那行:从你的电脑到服务器,每一台设备都只做了"看 IP、查表、交下一跳"这三步,但七段接力接完,一个包就真的横穿了整个互联网。这就是为什么我们把这一节的核心类比叫做"接力赛"——没有人跑全程,但全程被跑完了。对照第 4 章那趟旅程你会更有感觉:第 4 章讲的是"这趟旅程有哪些站",这一节讲的是"每一站内部是怎么转发的"——两章拼在一起,才是完整的故事。

动手看看:你家电脑的路由表

这一节讲的每样东西,在你电脑上都能亲眼看到。一条命令,三十秒看完。

# 【Windows】查看路由表
> route print
   网络目标          网络掩码          网关          接口        跃点数
   0.0.0.0          0.0.0.0        192.168.1.1    192.168.1.8     50
     ↑ 默认路由:所有不认识的目标,交给 192.168.1.1
       (这就是你家那台五合一盒子的 LAN 口)
   192.168.1.0      255.255.255.0   在链路上       192.168.1.8     50
     ↑ 直连:同一个小区,直接找,不出门
   127.0.0.0        255.0.0.0       在链路上       127.0.0.1       50
     ↑ 回环:找我自己(§ 3.5 讲过)

# 【Linux / macOS】用 ip 命令
$ ip route
default via 192.168.1.1 dev wlan0        ← 默认路由
192.168.1.0/24 dev wlan0 proto kernel    ← 直连网段

注意 route print 里"网络掩码"那列还是 255.255.255.0 的老写法(§ 3.5 讲过掩码和 CIDR 是同一件事的两种写法),而 ip route 直接写 /24你电脑的路由表就这么几行——因为电脑不是路由器,它只需要知道"邻居直连、其余交网关"。

如果你想看"真实的互联网路由"长什么样,试一个叫 traceroute 的工具(Windows 上是 tracert):它逐个打印出从你到目标网站之间经过的每一台路由器(每一跳),下一节我们会细讲它。先用下面的小工具,把这个命令的"三段结构"拆开看看:

拆开之后你会看到:traceroute 是命令本身,-n 是选项(不解析主机名,直接显示 IP,跑得更快),8.8.8.8 是参数(要去探测的目标)。跑一次它,你会亲眼看到"逐跳转发":一排 IP 从你家路由器开始,一站一站往外延伸——那就是接力赛的每一棒。

多跳的世界:每一跳都有代价

现在把视角拉到最大:一个包从你家到某网站的服务器,要经过多少台路由器?答案因网络而异——少则几跳,多则几十跳,通常不会是一两跳。这意味着:数据不是"嗖"一下飞过去的,而是被一台一台路由器接力送过去的,每一跳都要花时间。

每一跳的时间由什么组成?处理时延(路由器查表、转发)、排队时延(前面有别的包在排队)、传输时延(把包送上线路的时间)、传播时延(信号在线路上跑的时间)——这四样在 § 1.6 讲时延时拆过账,现在它们有了具体的舞台:每一台路由器都要付一遍。所以跳数越多,总时延越高;这就是为什么"绕远的路由"真的会慢。

上一节动手时提到的 traceroute(Windows 上叫 tracert),干的正是把这笔账可视化:它让沿途每一台路由器都回一句"我在这儿",于是你看到一行一行的 IP,从你家网关一直排到目标服务器——每一行就是一跳,跳数和每跳的时延一目了然。说白了,traceroute 就是"沿途点名":每一棒被点到都要应一声。跑一次它,你就亲眼看到了"每一跳都有代价"这句话。

用上面这个时延账本自己算一笔:假设每一跳的时延是固定的某个值(具体因网络而异),你把它乘以跳数,就是总时延的下限。这解释了两个很常见的现象:

看到这里,你已经把路由器的完整故事串起来了:它靠一张路由表决定方向,靠"下一跳"接力前进,靠默认路由兜底,靠最长前缀匹配选路,靠动态协议应对变化——然后把包一站一站地送向目的地。这一节之外还剩最后一个环节:你家和运营商之间的那道"门"——网关与光猫,那是 § 5.3 的主角,我们下一节再见。

Recap · 收束

一句话总结:路由器是"城际分拣中心"——它是三层设备,认 IP 网络号、查路由表,把数据包在不同网络之间一站一站接力送过去;交换机管"同一条街"(二层、认 MAC),路由器管"城际干线"(三层、认 IP)。

机制上记住五件事
· 路由表:每一行 = 目标网络(CIDR)+ 下一跳 + 出接口。条目只有三个来源:直连(接口自带)、静态(人写)、动态(协议学)。
· 下一跳:路由器不掌握全程,只认识"下一步交给谁"——接力赛,每棒只认下一棒,接完就是全程。这也让任何单台路由器坏了都不致命。
· 默认路由0.0.0.0/0):兜底出口,查不到更具体的就交给它——它就是"分拣表最后一行:其他任何地方 → 总仓"。
· 最长前缀匹配:多条都匹配时选最具体(前缀最长)的——特殊优于一般,这就是默认路由永远最后才被选中的原因。
· 转发动作:TTL 减 1(归零丢弃)、重算校验、换掉 MAC 头(换信封不换信)——IP 地址一路不变。

动态路由三级跳:RIP(RFC 2453,跳数上限 15,小网络,邻居口口相传)→ OSPF(RFC 2328,链路状态 + 最短路径算法,企业内网,全城地图量最短)→ BGP(RFC 4271,路径矢量,互联网级,运营商之间谈生意)。加上 IP 本身(RFC 791)和 IPv6(RFC 8200),本节的 RFC 就齐了。

下一步:路由器负责"跨城寻路",但数据要从你家出发,还得先迈过家门口那道门——网关,以及把光信号翻译成电信号的光猫。它们合起来就是下一节的主角:§ 5.3 网关与光猫。

☰ 主页
Xue Hai Wu Ya · Network · § 5.2 · 路由器 Router