静态路由探究

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
  • 网卡驱动
  • 物理链路
相关推荐
DianSan_ERP9 小时前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
西岸行者9 小时前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
呉師傅10 小时前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
starlaky10 小时前
Django入门笔记
笔记·django
勇气要爆发10 小时前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达
悠哉悠哉愿意10 小时前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
勇气要爆发11 小时前
吴恩达《LangChain LLM 应用开发精读笔记》2-Models, Prompts and Parsers 模型、提示和解析器
android·笔记·langchain
2501_9462055212 小时前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
linux kernel12 小时前
第七部分:高级IO
服务器·网络
数字护盾(和中)12 小时前
BAS+ATT&CK:企业主动防御的黄金组合
服务器·网络·数据库