静态路由探究

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 报文时:

  1. 取出 目标 IP
  2. 用目标 IP 与每一条路由表项的 Genmask 做 按位与
  3. 将结果与 Destination 比较
  4. 相同 → 命中该路由

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 数据报:

  1. 查询路由表
  2. 命中最精确的路由项
  3. 根据路由项选择出口网卡
  4. 若需网关:
    a. 查 ARP
    b. 修改目标 MAC
  5. 发送数据包
  6. 无匹配且无默认路由 → 丢弃

4.3 路由表工作的层次

路由表工作在:

OSI 七层模型的网络层(Layer 3)

但要注意:

真正的数据转发还依赖:

  • 二层 ARP
  • 网卡驱动
  • 物理链路
相关推荐
逐步前行2 小时前
STM32_内部结构
网络·stm32·嵌入式硬件
hssfscv2 小时前
Javaweb学习笔记——后端实战8 springboot原理
笔记·后端·学习
浩浩的科研笔记2 小时前
入门读物---一篇24年的负荷预测综述---逐句翻译整理版
笔记·能源
kimi7042 小时前
可靠数据传输原理
网络
迎仔2 小时前
04-网络安全基础:数字世界的防盗门与守卫
网络·安全·web安全
使者大牙2 小时前
【单点知识】CANopen实用协议介绍
服务器·网络·tcp/ip
北京阿尔泰科技厂家2 小时前
高效连接智能世界:CAN总线通讯接口卡的多领域应用与性能解析
网络·can·工业控制·工业自动化·仪器仪表·数据通讯·通讯卡
迎仔3 小时前
03-网络协议基础详解:数字世界的交通规则与语言
网络·网络协议
云小逸3 小时前
【Nmap 源码学习】深度解析:main.cc 入口函数详解
网络·windows·学习·nmap