理解IPv4路由表输出 | AI生成和翻译
理解你的 ip route 输出
这是来自你 Linux 系统的 IPv4 路由表(很可能使用的是 iproute2 中的 ip 命令)。它显示了你的机器如何根据目标 IP 来决定数据包的发送路径。路由按最长前缀(最具体的优先)进行匹配,而默认路由则捕获所有其他情况。
我将逐条解析这些条目,以表格形式清晰说明,然后总结其整体含义。这与我们之前的讨论相关:这是一个真实世界中简单路由表的例子,包含直连路由(本地子网)和用于互联网连接的默认网关。
| 目标网络 | 网关 | 设备 | 协议 | 作用域 | 源 IP | 度量值 | 说明 |
|---|---|---|---|---|---|---|---|
| 0.0.0.0/0 (默认) | 192.168.1.1 | enp4s0 | dhcp | global | (无) | 100 | 所有不匹配其他路由的流量都发往这里。指向你的路由器(很可能是你的家庭网关),位于以太网接口 enp4s0 上。通过 DHCP 发现。 |
| 169.254.0.0/16 | (直连) | enp4s0 | kernel | link | (无) | 1000 | 链路本地地址范围,用于 DHCP 失败时的自动配置。高度量值意味着它是备用路由——仅在无更好路由时使用。 |
| 172.17.0.0/16 | (直连) | docker0 | kernel | link | 172.17.0.1 | (无) | Docker 的默认桥接网络。”linkdown” 表示接口已关闭(没有活跃的容器?)。你的主机充当此子网的网关。 |
| 172.18.0.0/16 | (直连) | br-c33e38e216df | kernel | link | 172.18.0.1 | (无) | 另一个 Docker 桥接网络(用户定义的网络?)。处于活动状态,因此在此桥接上的容器可以通过 172.18.0.1 访问主机。 |
| 192.168.1.0/24 | (直连) | enp4s0 | kernel | link | 192.168.1.35 | 100 | 你的本地 LAN 子网。通过 enp4s0 直连——发送到 192.168.1.x 上其他设备的数据包保持在本地(例如,发送到位于 .1 的路由器)。你的机器的 IP 是 192.168.1.35。 |
关键洞察
- 本地/直连路由:172.x.x.x 和 192.168.1.0/24 条目是用于直连网络的 “kernel” 路由(不需要下一跳网关)。这与你描述的简单迭代过程相匹配——你的系统检查目标 IP 是否属于这些范围,并通过匹配的设备(例如,用于 LAN 的 enp4s0)发送出去。
- Docker 的影响:你安装/运行了 Docker,它创建了虚拟桥接(docker0 和 br-…)。这些允许容器拥有自己隔离的网络。docker0 上的 “linkdown” 表明当前没有容器使用默认桥接。
- 默认路由:其他所有流量(例如,google.com)都通过 enp4s0 上的 192.168.1.1 发送。度量值 100 较低(优先);链路本地路由的度量值为 1000,表示其优先级较低。
- 无远程路由:此表是基础的——没有动态路由协议(如 OSPF)添加远距离网络的条目。如果你 ping 192.168.1.0/24 之外的某个地址,它将命中默认路由。
快速验证测试
ping 192.168.1.1→ 应使用 enp4s0 上的本地路由。ping 8.8.8.8→ 使用默认路由;使用traceroute 8.8.8.8跟踪路径。ip addr show enp4s0→ 确认你的接口 IP。- 如果涉及 Docker:
docker network ls列出桥接网络。
如果这是来自你的设置,并且某些功能无法正常工作(例如,无法上网?),常见的修复方法包括:检查电缆/DHCP 续订(dhclient enp4s0),或刷新路由(ip route flush cache)。是遇到了连接问题需要排查,还是只是对某个特定条目感到好奇?