路由器 Router
上一节的交换机解决了"同一个局域网里怎么把帧送对",但网络之所以叫"网络",是因为成千上万个局域网要连成一片。第 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 表只覆盖本地交换机的 MAC 地址表是靠"见过就记住"自学出来的,它只可能认识本网段里那些会跟自己说话的机器。换成大白话:收发室的小本子上只记着本楼的人,楼外面的人它一个都不认识。
- 广播出不了门交换机看到广播帧永远泛洪——但只在自己这一片泛洪,绝不会把"挨家挨户问"传到别的网络去(§ 5.1 讲过:泛洪绝不出路由器)。说白了,同一条街上的大喇叭喊得再响,街外面的人也听不见。
- 帧里根本没有"跨城"信息以太网帧头里只有 MAC 地址,而 MAC 地址只在局域网内有意义(§ 1.3 讲过)。要跨网络,必须靠 IP 地址——而 IP 地址是三层的东西,交换机不拆到那一层。
所以网络世界从很早就把活分成了两半:交换机管"一条街"内的精细投递(二层,认 MAC),路由器管"街与街、城与城"之间的干线运输(三层,认 IP)。§ 5.1 结尾那句话现在可以接上了——交换机解决"连上了还互不打扰",路由器解决"不同网络之间也能通"。这一节,我们把后者讲透。
如果你只记住这一节的一个类比,请记住这个。
想象一个快递分拣中心。传送带上一件件包裹过来,分拣员站在边上,墙上贴着一张分区表:
面单上写着「北京 …」 → 扔进 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 就自动生成。好比分拣中心门口那条路——不用人教,它就在那儿。
- 静态路由管理员一条一条手写进去的。好比打印好贴墙上的分区表——清楚、可控,但路况变了得人去改。
- 动态路由路由器之间用协议互相通报,自己学出来的。好比各个分拣中心之间用对讲机互通"我这边能到哪些城市、哪条路堵了"——自动更新,不用人管。
静态和动态是后面两节的重头戏,这里先记住它们的区别就够了。路由器查表的过程,本质上就是一个"对号入座"的动作:拿包上的目标 IP,去表里找匹配的行,找到就把包从对应出接口送出去。接下来三节,把"匹配"这件事拆到最细。
下一跳:我不认识终点,只认识下一步交给谁
路由表每一行里的"下一跳",是这一节最容易被忽略、却最本质的概念。它说的是:这台路由器并不认识最终目的地,它只认识"离自己最近的、能帮我把包裹再往前送一程的那台机器"。
想象一场接力赛。第一棒运动员的任务只有一个:把接力棒稳稳交给第二棒。
他需要知道第二棒站在哪里、什么时候起跑、用什么姿势接棒——但他完全不需要知道第二棒跑完之后往哪走,更不需要知道第四棒冲线时在哪个区。第三棒认识第四棒,第二棒认识第三棒……四个人各自只认识"下一棒",但四棒接完,整条跑道被完整跑完了。
互联网的跨网络送信一模一样:你家路由器把包交给运营商的路由器,运营商的路由器交给下一台骨干路由器……每一台都只查"下一步交给谁",没有任何一台掌握全程。这就是"逐跳转发"(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.34 | 10.0.0.0/8、10.1.0.0/16、10.1.2.0/24 | 10.1.2.0/24 | 前缀最长(24 > 16 > 8),最具体 |
172.16.5.9 | 0.0.0.0/0(默认路由) | 0.0.0.0/0 | 只有它匹配,别无选择 |
10.1.9.88 | 10.0.0.0/8、0.0.0.0/0 | 10.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 路由表的条目数量级在数十万条(数字随互联网增长而变化,具体因网络而异)。它是整个互联网能连成一片的幕后功臣。
| RIP | OSPF | BGP | |
|---|---|---|---|
| 规范 | RFC 2453 | RFC 2328 | RFC 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,指的就是它。
正因为是个多合一,日常有两个经常被误解的细节值得说破:
- LAN 口之间的通信不经过"路由"你插在路由器两个 LAN 口上的电脑和电视互传文件,走的是盒子内部的"交换机"部分,二层转发,不查路由表(同网段直连,回指 § 3.5)。换成大白话:同一个小区里的邻居串门,不需要惊动城际分拣中心。
- "上网慢"不一定怪路由器家里所有设备共用一个公网出口(NAT,§ 3.5 讲过前台类比),出口带宽就那么多。路由器只负责"送得快不快",管不了"水管一共多粗"——带宽是运营商的事(§ 1.6 讲过带宽 vs 时延)。
为什么厂商要把这么多东西塞进一个盒子?说白了就三个字:省事、省钱、省地方。但代价是概念被搅在一起——你拆开任何一台家用路由器,里面真正的"路由"芯片只是很小一块。理解"它是五合一",你就再也不会把"WiFi 信号差"误当成"路由器坏了"——那是无线 AP 的锅,路由器表示不背。
常见误区:关于路由器的五个谣言
路由器是被误解最多的网络设备,没有之一。五个流传最广的谣言,一次拆干净——每一个都能用这一节前面讲过的原理回答。
- 谣言一:"信号差,换个贵的路由器就好了"信号强弱是无线部分(AP)的事,跟"路由"芯片没关系。打个比方:打电话听不清,你换了个更贵的座机——可杂音出在线路上(无线信道),换座机(路由)没用。无线 AP 的故事要等 § 6.1 才讲,这里先记住:路由只管转发,不管信号。
- 谣言二:"路由器能把网速'加速'"路由器是"站台",不是"列车"。打个比方:地铁站修得再气派,列车班次和速度是地铁公司(运营商)定的——你买的带宽就那么大,路由器再贵也变不出更多。路由器只保证"到手的包别积压",它加速不了上游的带宽(§ 1.6 讲过带宽 vs 时延)。
- 谣言三:"我把 IP 改成别的,就能访问国外网站了"能不能访问某片网络,取决于路径上每一台路由器有没有那条路由、愿不愿意转发(BGP 那节讲过:走哪条路是"签合同"定的)——你自己的 IP 说了不算。你把自家门牌改成"天安门 1 号",不代表你就住那儿了;快递(数据包)依然按真实位置送。
- 谣言四:"路由器就是防火墙,很安全"家用路由器默认挡住外面进来的陌生连接,那只是 NAT 的副作用(§ 3.5 讲过前台类比),不是真正的防火墙(§ 5.4 会讲)。其实就是:家门口有个登记的前台确实能挡掉一部分陌生人,但你家密码设成
123456、固件常年不更新,前台再敬业也白搭——好比银行:大堂保安能拦下闲杂人等,可要是金库的密码锁形同虚设,保安再尽责也没用。 - 谣言五:"交换机比路由器'高级',可以替代它"正好反了:交换机只在本广播域内送帧,没有路由表、不认 IP 网络号、更不会 NAT。换成大白话:收发室(交换机)再大也只在本楼转悠,跨城的件它接不了——城际干线(路由器)是另一套系统。就好比菜市场里同一条街的摊位互相喊一嗓子就能传话,可要把货从城东市场送到城西市场,就得走批发干线——喊话传不了那么远,谁也替不了谁。
五个谣言背后其实是一个共同点:把"路由"这一个部件的能力,安到了整个盒子甚至整个网络的头上。分清"谁负责什么",谣言自然不攻自破。
串一遍:一个包从你家到网站的完整旅程
这一节讲的东西多而散,最后用一个完整的"跑一遍"把它们全部串起来。场景:你在家打开浏览器访问一个网站(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 就是"沿途点名":每一棒被点到都要应一声。跑一次它,你就亲眼看到了"每一跳都有代价"这句话。
用上面这个时延账本自己算一笔:假设每一跳的时延是固定的某个值(具体因网络而异),你把它乘以跳数,就是总时延的下限。这解释了两个很常见的现象:
- 为什么"距离近"不一定"快"物理上你到网站服务器可能只隔一条街,但数据可能要先绕到别的城市再绕回来——因为互联网的选路讲策略(BGP 那节讲过:签了合同的路线才走)。换成大白话:快递从城东送到城西,可能要先飞到隔壁省的中转场,因为只有那班车顺路。
- 为什么核心路由器这么贵互联网骨干上的路由器,每一台都同时扛着海量流量——它的查表、转发必须快到让"每一跳的代价"趋近于零。§ 3.5 提过,核心路由器每秒要转发天文数字级别的包。你家的盒子十秒钟才转一个来回的流量,骨干路由器一秒要处理几百万个包——这就是为什么它们贵到按台计价。
- 为什么"全家一起上网"会卡多台设备同时上网,出口就那么大,包在路由器里排着队等发送。就好比医院一个窗口挂号:人越多,队伍越长,每个人等得越久。排队时延就是这么来的——它不是路由器"坏了",是"人多"。
看到这里,你已经把路由器的完整故事串起来了:它靠一张路由表决定方向,靠"下一跳"接力前进,靠默认路由兜底,靠最长前缀匹配选路,靠动态协议应对变化——然后把包一站一站地送向目的地。这一节之外还剩最后一个环节:你家和运营商之间的那道"门"——网关与光猫,那是 § 5.3 的主角,我们下一节再见。
一句话总结:路由器是"城际分拣中心"——它是三层设备,认 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 网关与光猫。