路由器工作原理

从互联网协议栈出发,逐层拆解路由器如何读取、决策、转发每一个 IP 数据包——这不仅是网络层的核心,更是整个互联网运转的基石。

IP / IPv4 / IPv6 路由表 & LPM ARP NAT / PAT ICMP OSPF / BGP TTL
📡路由器在协议栈中的位置

路由器是网络层(Layer 3)设备。它不关心应用层数据是什么,也不关心传输层用的是 TCP 还是 UDP——它只读取 IP 头部,根据目的 IP 地址做出转发决策。交换机工作在 L2(MAC 寻址),集线器工作在 L1(比特转发),而路由器是连接不同网络的核心枢纽。

L7应用层 · HTTP / DNS / SSHEnd-to-End
L4传输层 · TCP / UDPEnd-to-End
L3网络层 · IP / ICMP / ARPRouter
◀ 路由器工作层
L2数据链路层 · Ethernet / PPPHop-by-Hop
L1物理层 · 光信号 / 电信号Hop-by-Hop
网络层 — 路由器的主战场

路由器读取 IP 数据包头部中的目的 IP 地址,查询本地路由表,决定从哪个接口转发。它同时处理 TTL 递减、分片、ICMP 消息等网络层职责。

🏠 路由器 vs 交换机 vs 集线器

设备工作层寻址转发依据
集线器 HubL1广播到所有端口
交换机 SwitchL2MACMAC 地址表
路由器 RouterL3IP路由表 + LPM

🔑 路由器核心职责

1. 读取目的 IP — 从 IP 头部提取目标地址

2. 查询路由表 — 最长前缀匹配 (LPM)

3. TTL 递减 — 防止数据包永续循环

4. 重封装帧 — 构建新 L2 帧头发送

5. 分片处理 — MTU 不匹配时 IP 分片

🔀IP 数据包转发原理

路由器收到一个以太网帧后,剥离帧头帧尾,取出 IP 数据包,读取目的 IP 地址,决定"下一跳"发往哪里。这个过程是逐跳(hop-by-hop)的——每一跳只负责交给下一个路由器,直到最终到达目标网络。

📦 IPv4 头部结构(路由器关注的字段)

IPv4 Header(20 字节起,最大 60 字节)
Version4bit
IHL4bit
DSCP/ECN8bit
Total Length16bit
Identification16bit
Flags + Frag Offset16bit
TTL ⭐8bit
Protocol8bit
Header Checksum16bit
Source IP Address ⭐32bit
Destination IP Address ⭐32bit
Options (可选)0-40字节

⭐ 标记的字段是路由器每次转发必须处理的核心:目的 IP 用于路由决策,TTL 每跳递减,源 IP 在 NAT 时被改写。

🔄 路由器转发决策流程

接收以太网帧FCS校验帧类型=IP?剥离帧头读取目的IP路由表匹配?
匹配 → 查ARP → 封装新帧 → 发出未匹配 → ICMP Unreachable → 丢弃

⏳ TTL (Time To Live) — 防环机制

每个 IP 包的 TTL 由源主机设置(通常 64 或 128),每经过一个路由器减 1。当 TTL=0 时,路由器丢弃该包并发送 ICMP Time Exceeded。traceroute 命令正是利用此原理——逐步增大 TTL,每一跳路由器回报自己。

// 路由器内部 TTL 处理伪代码 if (ip_header.ttl <= 1) { send_icmp(TIME_EXCEEDED, router_ip, source_ip); drop(packet); } else { ip_header.ttl -= 1; ip_header.checksum = recalculate(); forward(packet, next_hop); }
📋路由表与最长前缀匹配

路由表是路由器的大脑——存储着"目的网络 → 下一跳"的映射。当多个条目同时匹配目的 IP 时,路由器选择掩码最长(最精确)的那条,即最长前缀匹配(Longest Prefix Match, LPM)。

📊 路由表结构示例

目的网络掩码下一跳接口优先级
10.0.1.0/24直连eth00
10.0.2.0/24直连eth10
192.168.1.0/2410.0.2.1eth110
172.16.0.0/1610.0.2.2eth120
10.0.0.0/810.0.1.1eth030
0.0.0.0/010.0.1.254eth0100

最后一条 0.0.0.0/0 是默认路由——匹配所有 IP,是"最后的兜底"。

🧪 动手实验:最长前缀匹配

输入一个目的 IP,查看路由器如何逐条匹配路由表:

🎯 LPM 匹配过程

Step 1: 提取目的 IP

从 IP 头部取出 32bit 目的地址

Step 2: 逐条 AND 掩码

将目的 IP 与每条路由的子网掩码做按位 AND

Step 3: 比较网络号

AND 结果 = 路由条目的目的网络 → 匹配

Step 4: 选最长掩码

多条匹配时,选掩码最长的(最精确)

Step 5: 确定下一跳

从选中条目获取下一跳和出接口

💡 为什么需要 LPM?

假设目的 IP 是 10.0.1.5

→ 匹配 10.0.1.0/24 ✅(24位,精确)

→ 也匹配 10.0.0.0/8 ✅(8位,粗略)

→ 也匹配 0.0.0.0/0 ✅(0位,兜底)

路由器选择 /24 — 最精确的那条,确保流量走最优路径。

🔗ARP 协议 — IP 到 MAC 的桥梁

路由器决定了"下一跳 IP 是谁",但以太网帧的发送需要目标 MAC 地址。ARP(Address Resolution Protocol)就是在同一链路上,通过 IP 地址解析出 MAC 地址的协议。

🔍 ARP 工作流程

1. 查询 ARP 缓存

路由器先查本地 ARP 表(IP→MAC 缓存),命中则直接使用

2. 发送 ARP Request

广播帧(FF:FF:FF:FF:FF:FF):"谁的 IP 是 10.0.2.1?请告诉 10.0.2.0"

3. 收到 ARP Reply

目标设备单播回复:"10.0.2.1 的 MAC 是 aa:bb:cc:dd:ee:01"

4. 缓存并封装

写入 ARP 表,用此 MAC 封装以太网帧头发送

📡 ARP 报文格式

/* ARP Request 报文结构 */ Hardware Type: 0x0001 // Ethernet Protocol Type: 0x0800 // IPv4 HW Addr Len: 6 // MAC 6字节 Proto Addr Len: 4 // IP 4字节 Operation: 1 // 1=Request, 2=Reply Sender MAC: aa:bb:cc:dd:ee:00 Sender IP: 10.0.2.0 Target MAC: 00:00:00:00:00:00 // 请求时为0 Target IP: 10.0.2.1 // 要解析的IP

⚠️ 关键理解

1. ARP 只在同一链路(同网段)内工作,路由器不转发 ARP 到其他网段

2. 路由器需要解析的是下一跳的 MAC,不是最终目的主机的 MAC

3. ARP 表有老化时间(通常 20 分钟),超时需重新解析

4. Gratuitous ARP:设备主动广播自己的 IP-MAC 映射

🔄NAT — 网络地址转换

全球 IPv4 地址不够用,内网使用私有地址(10.x / 172.16-31.x / 192.168.x),出口路由器通过 NAT(Network Address Translation)将私有 IP 替换为公网 IP,让内网设备也能访问互联网。

🔀 NAPT(端口地址转换)工作过程

最常用的是 NAPT/PAT(基于端口的转换),多个内网 IP 共享一个公网 IP,通过端口号区分不同连接:

📤 内网侧(私有地址)
源 IP192.168.1.10
源端口54321
目的 IP93.184.216.34
目的端口443
NAT 转换
📥 公网侧(全局地址)
源 IP203.0.113.5
源端口20001
目的 IP93.184.216.34
目的端口443

📋 NAT 映射表

协议内网 IP:Port公网 IP:Port目标
TCP192.168.1.10:54321203.0.113.5:2000193.184.216.34:443
TCP192.168.1.22:49152203.0.113.5:20002142.250.80.46:80
UDP192.168.1.10:12345203.0.113.5:200038.8.8.8:53

⚠️ NAT 的影响

1. 破坏端到端原则 — 外部无法主动连接内网

2. 增加延迟 — 查表改写 IP/端口、重算校验和

3. 影响 P2P — 双方都在 NAT 后需 STUN/TURN 穿透

4. IPv6 的意义 — 充足地址空间可消除 NAT

家用路由器上,NAT 和路由转发在同一设备完成。NAT 发生在路由决策之后、公网接口发出之前。

🔔ICMP — 互联网控制消息协议

ICMP 是网络层的"信使"——路由器用它来报告错误、传达控制信息。它不是传输层协议,而是 IP 的辅助协议,封装在 IP 数据包中(Protocol = 1)。

📨 路由器发出的常见 ICMP 消息

类型代码触发场景含义
30/1路由表无匹配Destination Unreachable
110TTL=0Time Exceeded(traceroute 依赖)
51更好的路由Redirect(重定向)
00收到 Echo RequestEcho Reply(ping 响应)
34包太大且 DF=1Fragmentation Needed(PMTU 发现)

🔬 traceroute 原理

利用 TTL 和 ICMP Time Exceeded 揭示到目标的每一跳:

第 1 轮:TTL=1

包到第 1 个路由器 TTL 归零 → 回报 Time Exceeded

第 2 轮:TTL=2

穿过第 1 跳,到第 2 个路由器 TTL 归零 → 第 2 跳回报

第 N 轮:TTL=N

到达目标主机 → 回 ICMP Echo Reply → 结束

⚠️ ICMP 安全

ICMP 重定向攻击、Smurf 放大攻击等使得现代路由器会限制 ICMP 发送速率(rate limiting)和类型。

🗺️路由协议 — 路由表的构建

路由表不是手动写死的。路由器通过路由协议自动学习和交换网络可达信息。静态路由适合小网络,动态路由协议才是互联网规模的方案。

📊 路由协议分类

🏠 内部网关协议 (IGP)

在同一自治系统 (AS) 内交换路由

  • OSPF — 链路状态协议,Dijkstra SPF 算法,收敛快
  • IS-IS — 类似 OSPF,运营商骨干网常用
  • RIP — 距离矢量协议,跳数上限 15,已基本淘汰
  • EIGRP — Cisco 私有(已开放),混合协议
🌐 外部网关协议 (EGP)

在不同自治系统之间交换路由

  • BGP — 路径矢量协议,互联网的"胶水"
  • eBGP — 跨 AS 交换路由
  • iBGP — AS 内部传播外部路由
  • 策略路由:基于 AS_PATH / LOCAL_PREF / MED 等属性选路

🔗 OSPF 工作原理

1. 发现邻居

发送 Hello 包,建立邻接关系

2. 泛洪 LSA

每台路由器发布自己的链路状态通告

3. 构建 LSDB

所有路由器拥有相同的链路状态数据库

4. SPF 计算

以自己为根,Dijkstra 算法算出最短路径树

5. 生成路由表

从最短路径树提取路由条目写入路由表

🌍 BGP 工作原理

1. 建立 BGP 会话

TCP 179 端口,eBGP 直连 / iBGP 需全互联

2. 交换 UPDATE

发布 NLRI(网络前缀)+ Path Attributes

3. 选路决策

13 步选路:Weight → LOCAL_PREF → AS_PATH → MED ...

4. 策略控制

BGP 核心价值——策略路由,而非最短路径

5. 注入路由表

最优路径写入 RIB → FIB

📐 RIB 与 FIB

RIB(Routing Information Base):路由协议计算出的所有路由条目,可能有多条到达同一目的地的路径。

FIB(Forwarding Information Base):从 RIB 中选出最优路径,扁平化存储,用于数据包转发的高速查表。

类比:RIB 是"所有候选路线",FIB 是"最终导航路线"。现代路由器用硬件(TCAM)加速 FIB 查表。

🚀数据包穿越路由器全流程

从主机 A 发送 HTTP 请求到公网服务器,数据包经过路由器的每一步处理,用动画完整展现。

点击 "下一步" 开始数据包之旅

📝 全流程文字概要

步骤位置协议/动作关键变化
1主机 ADNS→TCP→HTTP应用层数据就绪
2主机 AIP 封装源 192.168.1.10 → 目的 93.184.216.34
3主机 AARP解析网关 192.168.1.1 的 MAC
4主机 AEthernet 封装帧头:源 MAC → 网关 MAC
5路由器接收 & 解封装剥离帧头,取出 IP 包
6路由器校验 & TTLTTL 64→63,重算 checksum
7路由器路由表 LPM匹配默认路由 0.0.0.0/0
8路由器NAT 转换源 IP:Port 替换为公网地址
9路由器ARP解析 ISP 下一跳 MAC
10路由器重新封装帧新帧头:路由器 MAC → ISP MAC
11ISP 路由逐跳转发每跳 TTL-1,查表,换帧头
12目标服务器接收 & 响应反向路径回到主机 A
核心知识总结
📡

协议定位

路由器是 L3 设备,读取 IP 头部做转发决策,不关心 L4/L7 内容

🔀

转发核心

目的 IP + 路由表 + 最长前缀匹配 = 下一跳 + 出接口

TTL 机制

每跳 -1,归零丢弃 + ICMP Time Exceeded,防环路

🔗

ARP 桥接

路由决策得出 IP 下一跳,ARP 解析出 MAC 才能封装帧

🔄

NAT 转换

私有 IP ↔ 公网 IP + 端口映射,解决 IPv4 地址不足

🔔

ICMP 反馈

路由器用 ICMP 报告错误(不可达/超时/重定向),traceroute 依赖它

🗺️

路由协议

IGP(OSPF/IS-IS)管内部,EGP(BGP)管外部,自动构建路由表

🧱

逐跳转发

每个路由器独立决策,只看目的 IP → 查表 → 发下一跳,帧头每跳重写


🧠 一句话理解路由器

路由器的本质就是:读 IP → 查表 → 换帧头 → 发出去
它不关心数据内容,不维护端到端连接,只是每一个 IP 包的"中转站"。
— 逐跳决策,最长匹配,TTL 防环,ARP 桥接,NAT 穿越,ICMP 报错。

路由器工作原理 — 互联网协议视角 | 交互式可视化教程