1、路由表详解
1.1 什么是路由表?
路由表(Routing Table) 是存储在路由器或主机中的一张逻辑表,用于描述:
"去往某个目标网络 / 主机,应该从哪个接口发出,交给谁(下一跳)"
简单一句话:
路由表决定了 IP 数据包"往哪走、从哪走、交给谁"
路由表中保存的是网络拓扑的抽象结果,它既可以:
- 由管理员手工配置(静态路由)
- 也可以由路由协议自动学习(动态路由,如 OSPF、RIP、BGP)
本文主要讨论 Linux 下的静态路由表。
1.2 Linux 中查看路由表
在 Linux 系统中,可以使用 route 命令查看当前内核路由表:
bash
[root@linux ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.10.30 0.0.0.0 UG 0 0 0 eth0
-n 表示不解析主机名和服务名,直接显示 IP,更清晰也更高效。
1.3 路由表项结构详解
一张路由表由 多条路由表项(Route Entry) 组成。
每发送一个 IP 报文,内核都会遍历这张表,选择一条最合适的路由。
| 名称 | 含义 |
|---|---|
| Destination | 目标网络或目标主机(0.0.0.0 表示默认路由) |
| Gateway | 下一跳地址;为 0.0.0.0 表示直连网络 |
| Genmask | 网络掩码,用于匹配目标 IP |
| Flags | 路由标志位 |
| Metric | 路由度量值(优先级参考) |
| Ref | 被引用次数(已废弃,通常为 0) |
| Use | 被查找使用的次数 |
| Iface | 出口网络接口 |
1.4 Flags 字段说明
| 名称 | 含义 |
|---|---|
| U | 路由已启用(Up) |
| H | 主机路由(Host) |
| G | 需要经过网关(Gateway) |
| D | 动态路由生成 |
| R | 动态路由重新初始化 |
| M | 被路由守护进程修改 |
| ! | 路由被禁用 |
最常见的组合是:
- U:直连路由
- UG:通过网关的路由(如默认路由)
1.5 两个"特殊"的路由表项
1️⃣ Gateway 为 0.0.0.0
Gateway = 0.0.0.0
表示:
目标网络与本机在同一个二层网络中,可以直接通信,不需要经过网关
此时:
- 内核会通过 ARP 查询目标 IP 对应的 MAC 地址
- 然后直接从 Iface 指定的网卡发出
2️⃣ Destination + Genmask 都为 0.0.0.0
0.0.0.0 192.168.10.30 0.0.0.0
这是 默认路由(Default Route),含义是:
"如果没有任何更精确的路由能匹配,就走这条路"
2 、路由表的匹配原理(核心)
1️⃣ 匹配流程
当系统需要发送一个 IP 报文时:
- 取出 目标 IP
- 用目标 IP 与每一条路由表项的 Genmask 做 按位与
- 将结果与 Destination 比较
- 相同 → 命中该路由
2️⃣ 命中后的行为
- Gateway ≠ 0
- 目标不在本地网段
- 修改 目标 MAC 为网关 MAC
- IP 目的地址不变,从 Iface 指定的网卡发送给目标主机
- Gateway = 0
- 目标在本地网段
- 直接从 Iface 指定的网卡发送给目标主机
3️⃣ 没有任何匹配?
- 查找默认路由
- 没有默认路由 → 直接丢包
3、路由类型划分
3.1 主机路由
指向单个 IP 地址的路由。
c
route add -host 8.8.8.8 gw 192.168.2.1 dev eth0
特点:
- 掩码默认为 255.255.255.255
- 优先级 高于网络路由
3.2 网络路由
指向一个网络段:
c
route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.2.1 dev eth0
用于描述:
- 可达的远端子网
- 企业网络、跨网段通信
3.3 默认路由
兜底方案:
c
route add default gw 192.168.2.1 dev eth0
添加前一定要确认:网关地址可达
4、总结
4.1 路由优先级与"最长前缀匹配"
当多条路由都能匹配同一个目标 IP 时,Linux 使用:
最长前缀匹配原则(Longest Prefix Match)
优先级从高到低:
- 主机路由 /32
- 网络路由(掩码越长越优先)
- 默认路由 /0
举例:
bash
8.8.8.8/32 → 优先
8.8.8.0/24
0.0.0.0/0
4.2 一个完整的转发流程示例
对于一个跨网段的 IP 数据报:
- 查询路由表
- 命中最精确的路由项
- 根据路由项选择出口网卡
- 若需网关:
a. 查 ARP
b. 修改目标 MAC - 发送数据包
- 无匹配且无默认路由 → 丢弃
4.3 路由表工作的层次
路由表工作在:
OSI 七层模型的网络层(Layer 3)
但要注意:
真正的数据转发还依赖:
- 二层 ARP
- 网卡驱动
- 物理链路