路由原理与路由器/网关
基于 HTTP 现代标准 · 核于 2026-06
速查
- 路由(routing)= 选路:Cloudflare 定义为「跨越一个或多个网络选择路径的过程」(the process of selecting a path across one or more networks)。
- 路由器(router)= 跨网络转发设备:「连接两个或多个分组交换网络/子网,并按需在它们之间传递数据分组」;家用、企业、骨干网都有它。
- 路由器 vs 交换机:交换机在同一网络内的设备组之间转发,路由器在不同网络之间转发(a router forwards data between different networks)。
- 转发四步:收包 → 读包头看目的 IP → 查路由表(最长前缀匹配)→ 转发给下一跳出接口,同时 TTL−1(到 0 丢弃)。
- 路由表(RIB)三要素:目的网络/掩码(network identifier)、下一跳(next hop / gateway)、度量(metric);通常还含出接口(interface)。
- 最长前缀匹配(LPM):多条路由都命中时,选**掩码最长(最具体)**的那条;
0.0.0.0/0前缀长度为 0,是最后兜底。 - 直连路由:接口配上 IP + 掩码后,该网段自动进表,无需配置、度量最低、优先级最高。
- 默认网关 = 本网段出口:主机把「非本网段」的包都丢给默认网关;它对应路由表里的
0.0.0.0/0默认路由。 - 静态路由:管理员手工配,不随拓扑变化,省算力、适合小网与末端网络。
- 动态路由:用路由协议自动学习并随拓扑更新——RIP(距离矢量/跳数)、OSPF(链路状态/域内)、BGP(自治系统之间)。
- 控制平面 vs 数据平面:路由表(控制平面)算出最优路径,生成精简的转发表(数据平面)供硬件高速查表转发,两者分离保证转发不中断。
- 逐跳是 IP 的根本特性:只要各路由器的表一致,「把包交给目的地的下一跳」这个简单算法就足以送达全网(hop-by-hop is the fundamental characteristic of the IP Internet layer)。
IP 分组要从源主机跨越一个又一个网络抵达目的主机,靠的是沿途一台台路由器逐跳接力。每台路由器都不知道完整路径,它只回答一个问题:「这个包,下一步交给谁?」——查路由表、做最长前缀匹配、转发给下一跳、把 TTL 减 1。本页讲清楚路由(选路)与转发(搬包)这两件事如何分工,路由表里到底存了什么,默认网关与默认路由为何是「兜底出口」,以及静态路由与动态路由(RIP / OSPF / BGP)的取舍。
一、路由 vs 转发:控制平面与数据平面
初学者常把「路由」和「转发」混为一谈,其实是两件事、两个平面:
- 路由(routing,控制平面 / control plane):决定「去某个网络应该走哪条路」,即构建路由表。这一步要么由管理员手工写死,要么由路由协议(RIP/OSPF/BGP)自动算出。它是「画地图」。
- 转发(forwarding,数据平面 / data plane):对每一个到来的包,查表并把它搬到下一跳。它是「照着地图开车」,要求极快——路由器每秒做这件事数百万次。
Wikipedia 点明了现代路由器的架构选择:
Routing tables are generally not used directly for packet forwarding... they are used to generate the information for a simpler forwarding table... This router architecture separates the control plane function of the routing table from the forwarding plane function of the forwarding table. This separation... provides uninterrupted high-performance forwarding.
也就是说,路由表(RIB)是「全量、可变、慢」的决策库;它编译出一张精简、定长、为硬件查表优化的转发表(FIB),真正逐包转发走的是后者。控制平面再怎么重算路由,数据平面的高速转发都不被打断。
一句话区分
路由 = 算路(多久算一次都行,慢没关系);转发 = 搬包(每个包都要做,必须快)。两者分离,是路由器能既「聪明」又「飞快」的关键。
二、路由器工作原理:收包到转发的一跳
把路由器想成机场的空管:每个数据包是一架要飞往不同机场(网络)的飞机,路由器负责把它高效引导到目的 IP。一次「转发」拆开看是这样:
① 收包 网卡从某入接口收到一个 IP 分组
② 读包头 取出目的 IP 地址(像列车员查票看该上哪趟车)
③ 查路由表 用目的 IP 去匹配路由表,最长前缀匹配选出最优条目
④ 改 TTL 生存时间 TTL 减 1;若减到 0 则丢弃(防止环路里无限打转)
⑤ 转发 按选中条目的「下一跳 + 出接口」把包送出,交给路径上的下一台路由器Cloudflare 对第 ②③⑤ 步的概括:
The router reads a packet's header to determine where it is going, then consults the routing table to figure out the most efficient path to that destination. It then forwards the packet to the next network in the path.
关键在于:没有任何一台路由器掌握完整路径。每台只负责「下一跳交给谁」,包就这样被一台台路由器接力转发,「在抵达目的地的途中可能被不同路由器转发好几次」。这种**逐跳(hop-by-hop)**模型正是 IP 网际层的根本特性——只要沿途各表彼此一致,简单地「转交给下一跳」就足以把数据送达全网。
TTL 不是路由器选路用的
TTL 每经过一台路由器减 1,作用是防环兜底:万一路由表配错形成环路,包不会无限打转,TTL 归 0 即被丢弃。它不参与选路决策,也不是本页重点;TTL 归 0 后路由器回送的 ICMP 超时报文,是 traceroute 的原理,见下一页。
三、路由表:里面到底存了什么
路由表(routing table),又称路由信息库 RIB(Routing Information Base),是存在路由器或主机内存中的一张表,「列出了到达各个网络目的地的路由,有时还带这些路由的度量(距离)」。Wikipedia 给出最小三要素:
| 字段 | 含义 |
|---|---|
| 目的网络 / 掩码(network identifier) | 目的子网 + 网络掩码,合写即 192.168.0.0/24 这样的 CIDR 前缀 |
| 下一跳 / 网关(next hop / gateway) | 把包交给路径上的下一台设备的地址;也可以直接是出接口 |
| 度量(metric) | 该路由的成本;同一目的有多条路时,走度量最低的那条 |
实现里通常还会带出接口(interface)(如 eth0)、状态标志(U 表示链路 up)、QoS、ACL 过滤条件等。下面是一台家用电脑连到互联网时,路由表可能的样子(取自 Wikipedia 示例):
目的网络 掩码 网关(下一跳) 出接口 度量
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.100 10 ← 默认路由
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 ← 本机回环
192.168.0.0 255.255.255.0 192.168.0.100 192.168.0.100 10 ← 直连网段
192.168.0.100 255.255.255.255 127.0.0.1 127.0.0.1 10 ← 本机精确地址
192.168.0.1 255.255.255.255 192.168.0.100 192.168.0.100 10 ← 到网关的精确路由读法:第一行 0.0.0.0/0 是默认路由,凡是没被更具体条目命中的包,统统从 192.168.0.100 这块网卡丢给网关 192.168.0.1;第三行 192.168.0.0/24 是直连网段,本网段内的包直接交付。下一跳列其实就是「网关」,二者是同一信息。
直连路由 / 静态路由 / 动态路由从哪来
路由表里的条目按来源分三类:
- 直连路由(directly connected):给路由器某个接口配上 IP + 掩码后,该网段「自动」进表——「网络地址、子网掩码连同接口类型与编号,作为直连网络录入路由表」。无需任何配置、最可信、度量最低。
- 静态路由(static):到达远端网络(只能经由另一台路由器抵达)的路由,由网络管理员手工配置。
- 动态路由(dynamic):同样指向远端网络,但由动态路由协议自动学习得到,并随拓扑变化自动更新。
四、最长前缀匹配:多条都命中,选最具体的
一个目的 IP 往往同时落在好几条路由的网段里,路由器靠**最长前缀匹配(Longest Prefix Match, LPM)**裁决:前缀(掩码)最长、最具体的那条胜出。
假设目的地址是 10.1.2.200,路由表里有三条都能命中:
候选条目 下一跳 前缀长度 是否命中 10.1.2.200
10.0.0.0/8 → R1 /8 命中(最粗)
10.1.0.0/16 → R2 /16 命中
10.1.2.0/24 → R3 /24 命中(最细)★ 选它
0.0.0.0/0 → 默认网关 /0 命中(兜底,永不优先)三条候选里 /24 前缀最长、覆盖范围最小、最「精确」,于是包交给 R3。0.0.0.0/0 前缀长度为 0,是覆盖一切的「最不具体」路由,只有在没有任何更具体条目命中时才轮到它——这正是「默认路由永远是最后兜底」的数学原因。
为什么要「最具体优先」
粗前缀(如 /8)是「大方向」,细前缀(如 /24)是「精确制导」。管理员或协议想为某个小网段指定一条特殊路径时,只需写一条更长前缀的路由,它就会自动盖过粗粒度的默认走向,无需删改原有条目。CIDR 这套按位前缀匹配的聚合方案,也是互联网控制路由表规模膨胀的主力。
五、默认网关与默认路由
默认网关(default gateway)是主机所在网段的「出网口」。主机发包时先判断目的地是否在本网段(用自己的 IP 与子网掩码计算,方法见子网掩码与 CIDR):
- 在本网段 → 直接二层交付,不经路由器;
- 不在本网段 → 一律把包丢给默认网关,由它代为转发到外部网络。
默认网关在路由表里就对应那条 0.0.0.0/0 的默认路由:它匹配「所有目的地」,但前缀长度 0、最不具体,因此只在其它条目都不命中时兜底生效。家用场景里,默认网关通常就是你的家用路由器的 LAN 口地址(如 192.168.0.1)。
路由器 ≠ 调制解调器(Modem)
Cloudflare 特别澄清:路由器组建并管理网络内/网络间的数据流;调制解调器(modem)则把网络接入互联网——它把 ISP 的信号转成数字信号。只有路由器没有 modem,能组 LAN 互通却上不了网;只有 modem 没有路由器,单机能上网却没法分享给多设备。家用「光猫一体机」往往把两者集成在一个盒子里,但职责不同。
六、静态路由 vs 动态路由
| 维度 | 静态路由(static) | 动态路由(dynamic) |
|---|---|---|
| 来源 | 管理员手工配置 | 路由协议自动学习 |
| 随拓扑变化 | 不变,需手工更新 | 自动更新、自愈 |
| 算力/带宽开销 | 几乎为零 | 需持续计算与协议交换报文 |
| 适用规模 | 小网、末端/单出口网络 | 中大型网络、多路径网络 |
| 故障应对 | 链路断了也不会改路,需人工介入 | 能绕开拥塞/故障,自动选新路 |
Cloudflare 的概括:静态表「除非管理员手工更新,否则数据包走法形同刻在石头上」;动态表则「用各种路由协议自动算出最短最快路径……类似 Google Maps / Waze 依据历史与实时路况选最优驾驶路线」。动态路由更费算力,所以小网常用静态;中大型网络则动态高效得多。
三大动态路由协议(概念性带过)
路由协议是「用于识别或通告网络路径的协议」。按作用范围分两类:
- 域内(同一自治系统内,IGP)
- RIP(Routing Information Protocol):距离矢量协议,用「跳数(hop count)」找最短路——跳数即包要穿过的路由器数量。简单但跳数上限低、收敛慢。
- OSPF(Open Shortest Path First):链路状态协议,路由器掌握全域拓扑,「动态识别发往目的地的最快最短可用路径」,收敛快、可扩展,是企业内网主力。
- 域间(自治系统之间,EGP)
- BGP(Border Gateway Protocol):互联网的「域间路由」协议,通告哪个网络掌管哪些 IP 地址、各网络如何互联。做这类通告的大型网络称为自治系统(Autonomous System, AS)。BGP 是动态协议,是整个互联网得以互通的「黏合剂」。
三者一句话记忆:RIP 数跳数(距离矢量)、OSPF 看全图(链路状态、域内)、BGP 连 AS(域间、撑起互联网)。其它域内协议还有 Cisco 的 EIGRP、以及 IS-IS。
小结
- 路由(控制平面 / 选路、画地图)与转发(数据平面 / 搬包、照地图开车)是两件事;现代路由器用路由表生成精简转发表,分离两平面以保证高速且不中断的转发。
- 路由器跨越不同网络转发 IP 分组(交换机只管同网络内),一次转发 = 收包 → 读目的 IP → 查表(最长前缀匹配)→ TTL−1 → 转发给下一跳;逐跳接力是 IP 网际层的根本特性。
- 路由表三要素是目的网络/掩码、下一跳、度量;条目来自直连(自动、最优)、静态(手工)、动态(协议学习)三种来源。
- 最长前缀匹配让最具体的路由胜出,
0.0.0.0/0默认路由前缀长度为 0、永远兜底;默认网关就是本网段对应这条默认路由的出口。 - 静态路由省算力适合小网,动态路由自愈适合中大型网络;RIP(距离矢量/跳数)、OSPF(链路状态/域内)、BGP(自治系统间) 各司其职。
上一页:IPv6 与过渡技术 | 下一页:ICMP 与 ping/traceroute