在Linux系统管理中,网络配置与排错是核心技能之一,而理解并查看系统的路由表则是这项技能的基石,路由表本质上是一张规则地图,它决定了数据包从源头到目的地的最佳路径,对于广泛使用的服务器操作系统CentOS而言,掌握其路由查看命令,是每一位系统管理员和网络工程师的必备功课,本文将深入探讨在CentOS中查看路由信息的几种核心命令,解析它们的输出,并对比其优劣,帮助读者在实际工作中高效地进行网络诊断。

现代首选:ip route 命令
随着Linux内核和网络工具的发展,iproute2工具包已经取代了陈旧的net-tools,成为现代Linux发行版(包括CentOS 7及更高版本)中管理网络的首选。ip route命令(或其简写ip r)用于查看和操作路由表,功能强大且输出信息详尽。
基本用法
最简单的查看路由表命令是:
ip route show
或者使用更简洁的简写形式:
ip r
输出解读
执行ip r后,你会看到类似以下的输出:
default via 192.168.1.1 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100
为了更好地理解这些信息,我们可以将其分解为以下几个关键字段:
| 字段 | 含义 | 示例 |
|---|---|---|
| 目标网络 | 数据包的目的地址或网络段。default代表默认路由,即所有其他路由都无法匹配时的最终选择。 |
default, 168.1.0/24 |
| via (网关) | 发往该目标网络的数据包需要经过的下一跳路由器地址,对于直连网络,此字段可能不存在。 | 168.1.1 |
| dev (设备) | 发送数据包所使用的网络接口。 | eth0 |
| proto (协议) | 该路由的来源协议。kernel表示内核自动配置的直连路由,static表示静态配置的路由,dhcp表示通过DHCP获取。 |
static, kernel |
| scope (作用域) | 路由的有效范围。link表示该路由仅在此链路上有效,global表示全局有效。 |
link |
| src (源地址) | 当发送数据包到该目标网络时,系统优先使用的源IP地址。 | 168.1.100 |
| metric (跃点数) | 路由的优先级或成本,数值越小,优先级越高,当存在多条到达同一目的地的路由时,系统会选择metric值较小的那条。 | 100 |
实用技巧

ip route命令还提供了许多有用的子命令,要查找访问特定IP地址(如8.8.8)将使用哪条具体路由,可以使用get子命令:
ip route get 8.8.8.8
输出会明确指出将使用的源IP、出接口以及网关,这对于排查特定连接问题非常有帮助。
传统经典:route 与 netstat 命令
在iproute2普及之前,net-tools工具包是标准配置。route和netstat命令常被用来查看路由信息,尽管它们被认为是“遗留”工具,但由于其简洁性和许多管理员的长期使用习惯,至今仍在许多系统中被频繁使用。
基本用法
使用route命令时,强烈推荐加上-n参数,该参数的作用是以数字形式显示IP地址和主机名,避免了耗时的DNS反向解析过程,尤其是在路由表庞大或DNS服务异常时,能显著提升命令响应速度。
route -n
输出解读
route -n的输出格式与ip r有所不同,更为经典:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
下表解释了各列的含义:

| 列名 | 含义 | 示例 |
|---|---|---|
| Destination | 目标网络或主机。0.0.0代表默认路由。 |
0.0.0, 168.1.0 |
| Gateway | 网关地址。0.0.0表示没有网关,是直连网络。 |
168.1.1, 0.0.0 |
| Genmask | 子网掩码,用于定义目标网络的范围。 | 255.255.0, 0.0.0 |
| Flags | 路由标志。U表示路由是启用的(Up),G表示该路由指向一个网关。 |
UG, U |
| Metric | 跃点数,与ip r中的metric含义相同。 |
100 |
| Ref | 路由引用次数(在现代内核中通常为0)。 | 0 |
| Use | 该路由被查找的次数(是一个动态计数值)。 | 0 |
| Iface | 网络接口。 | eth0 |
另一个可以查看路由的命令是netstat -rn,其输出与route -n几乎完全相同,-r表示显示路由表,-n同样表示不解析主机名。
命令对比与选择
为了更直观地理解这两个工具集的差异,下表进行了小编总结对比:
| 特性 | ip route (iproute2) |
route -n (net-tools) |
|---|---|---|
| 所属工具包 | iproute2 (现代标准) |
net-tools (遗留工具) |
| 推荐度 | 强烈推荐 | 兼容性或习惯性使用 |
| 输出默认格式 | CIDR表示法 (如 168.1.0/24) |
IP与子网掩码分离 (如 168.1.0 255.255.0) |
| 信息丰富度 | 更高,提供proto, scope, src等详细信息 |
相对基础,信息较少 |
| 功能范围 | 功能全面,支持策略路由、隧道等高级网络配置 | 功能有限,仅支持基本路由操作 |
| 性能 | ip route get等子命令有性能优势 |
route -n因避免DNS解析,性能尚可 |
对于新的脚本和日常操作,应优先使用ip route命令,它不仅输出更清晰、信息更全面,而且代表了Linux网络管理的未来方向。route -n则作为一个可靠的备用,或在需要快速查看默认网关等简单信息时依然可用。
相关问答FAQs
问题1:为什么在使用route或netstat查看路由时,推荐使用-n参数?
解答: 使用-n参数的主要目的是为了提升命令的执行速度和可靠性,如果不加-n,命令会尝试对路由表中出现的每一个IP地址进行反向DNS查询,将其解析为主机名,这个过程会带来两个问题:第一,DNS查询本身需要时间,当路由条目很多时,会导致命令输出变得非常缓慢;第二,如果服务器的DNS配置不正确或DNS服务器无响应,命令可能会长时间卡住,最终超时失败,无法及时获取到关键的路由信息,加上-n后,命令会直接显示原始的IP地址,绕过DNS查询,从而实现秒级响应,确保在网络排错的紧急时刻能够快速获取信息。
问题2:ip route和route -n命令显示的默认网关信息不一致,可能是什么原因?
解答: 这种情况通常比较少见,但如果发生,可能源于以下几个原因:
- 多路由表:Linux支持基于策略的路由,即可以存在多个路由表。
ip route默认显示的是main路由表,而route命令的行为可能受系统配置影响,可以尝试使用ip rule list查看路由策略,以及ip route show table <table_name>来查看特定路由表的内容。 - 缓存问题:系统内核中存在路由缓存,虽然现代内核已经弱化了路由缓存的概念,但在某些特定场景下,旧信息可能暂时存在,可以尝试清理网络缓存或重启网络服务。
- 工具版本或Bug:极少数情况下,可能是
net-tools或iproute2包的特定版本存在Bug导致显示异常,可以检查软件包版本并考虑更新。 - 配置动态更新:如果网络环境中有动态路由协议(如OSPF, BGP)在运行,或者有网络管理脚本在后台运行,路由表可能在两个命令执行的间隙发生了变化,可以尝试连续执行几次命令,观察结果是否稳定,在绝大多数情况下,
ip route的输出是更准确、更值得信赖的。