网线和Wi-Fi同时连接,数据到底走哪边?从一次OpenWrt配置说起
配置 OpenWrt 时,我的电脑一边通过网线连接 RAX3000M,一边用 Wi-Fi 保持联网。
这样操作很方便:路由器配置过程中,电脑不必跟着断网。但是,它也制造了一个容易误判的场景:后台能打开,网页也能打开,我是不是就把路由器配置好了?
不一定。这两个操作可能根本没有走同一个出口。
这篇不急着改接口优先级,先用只读查询弄清楚:Windows 对不同目标,到底准备走哪条路。
1. 不问“电脑走哪边”,而问“去哪里时走哪边”
2026 年 10 月 4 日,我在这台电脑上查询了三个固定目标,采集脚本运行于 PowerShell 7.6.5。查询没有断开接口,没有修改路由器,也没有发起端口扫描。
| 目标 | 系统选择的接口 | 匹配的路由 | 源地址 |
|---|---|---|---|
RAX 管理地址192.168.10.1 | 以太网 2 | 192.168.10.0/24 | 192.168.10.192 |
公网 IPv41.1.1.1 | WLAN | 0.0.0.0/0 | 192.168.1.5 |
公网 IPv62606:4700:4700::1111 | WLAN | ::/0 | 已脱敏 |
后两个地址是用来查询选路的固定目标,不代表已经访问成功,更不代表所有网站都采用这条路径。
图是根据选路查询画的示意,不是抓包结果。Wi-Fi 网关的具体设备身份也不靠这个地址推断:192.168.1.1只是本次查询显示的下一跳。
这就能解释为什么电脑可以同时管理 RAX、又通过另一条链路上网。“管理面可达”和“上网流量经过这台路由器”,是两件不同的事。
2. 路由表不是给网线和Wi-Fi排一个总名次
先只讨论普通 IPv4 选路,不考虑应用主动绑定接口、代理和额外隧道。
Windows 要处理一个目标地址时,先找能匹配它的路由。匹配前缀越长,描述的范围越具体。
例如,这次访问192.168.10.1,至少可以想到两种描述:
192.168.10.0/24 -> 这个局域网 0.0.0.0/0 -> 默认路由,其他地方/24描述的范围比/0更具体,所以不能因为 Wi-Fi 的默认路由度量更低,就把这个局域网目标也送给 Wi-Fi。
先比较匹配的具体程度,再在同等最长匹配的候选中比较度量。Windows 的 IP 路由说明也按这个顺序解释选路。微软 IP 路由说明
这次以太网直连路由的下一跳显示为0.0.0.0,表示 on-link,不是让数据包发往一个地址为零的路由器。
3. 同样是默认路由,为什么公网目标选择Wi-Fi?
这台电脑当时有两条 IPv4 默认路由:
| 接口 | 下一跳 | RouteMetric | InterfaceMetric | 合计 |
|---|---|---|---|---|
| WLAN | 192.168.1.1 | 0 | 60 | 60 |
| 以太网 2 | 192.168.10.1 | 0 | 500 | 500 |
两条都是/0,匹配长度相同;在这个对照里,Wi-Fi 的合计度量更小。
不要只看Get-NetRoute的RouteMetric:这两条路线的值都是 0,差异来自接口度量。Windows 文档说明,路由度量要结合接口度量考察。微软路由结构说明
还有一个必须交代的实验背景:以太网接口的 AutomaticMetric 当时关闭,InterfaceMetric 已经手动设为 500;WLAN 则启用了自动度量。我本次只读取这个状态,没有修改它。
因此,这不是“系统天生优先 Wi-Fi”的证据,也不能用来证明“无线网速比有线快”。自动度量会参考链路速度,但它不是实时测速,不会因为某条链路此刻下载较快,就自动把每个连接迁过去。微软自动度量说明
4. 在自己的电脑上怎么查?
下面均为 Windows PowerShell 的只读命令。把第一个目标换成自己的路由器管理地址,不要照抄我的内网地址。
先查询一个明确的目标:
Find-NetRoute -RemoteIPAddress 192.168.10.1 Find-NetRoute -RemoteIPAddress 1.1.1.1Find-NetRoute会返回选中的本地 IP 地址对象和路由对象,所以输出里会出现两组信息,不是系统给出了两个互相矛盾的答案。Find-NetRoute 官方文档
再把路由度量和接口度量分别取出来:
Get-NetRoute -DestinationPrefix '0.0.0.0/0' | Select-Object InterfaceIndex, InterfaceAlias, NextHop, RouteMetric | Format-Table -AutoSize Get-NetIPInterface -AddressFamily IPv4 | Where-Object ConnectionState -eq Connected | Select-Object InterfaceIndex, InterfaceAlias, InterfaceMetric, AutomaticMetric | Format-Table -AutoSize用InterfaceIndex对应两组信息。别把一个接口的路由度量加到另一个接口上,也不要跨 IPv4、IPv6 拼表。
如果读取报“拒绝访问”,先检查当前执行环境的权限。本次在受限执行环境中就遇到这个错误,切换到正常用户上下文后读取成功。查询权限失败不是网络不通。
5. 查到了选路,就证明浏览器这样走了吗?
还没有。这个问题值得单独停一下。
Find-NetRoute回答的是:对给定 IP,当前系统选出的本地地址和路由是什么。它不是对某个浏览器请求的追踪记录。
两者之间至少有几个区别:
- 网站域名可能解析出多个 IPv4/IPv6 地址;查一个固定 IPv4 地址不能覆盖全部连接。
- 应用如果使用代理,系统实际处理的连接目标可能是代理服务器,而不是原始网站。
- 应用可以绑定源地址,隧道或其他软件也可能引入额外路径。
- 路由查询时刻与实际连接时刻不同,期间配置可能已经变化。
这次公网 IPv6 查询同样选中 WLAN,但我没有据此声称“浏览器总是选 IPv6”。地址族的选择与选定地址之后的路由判断,不是同一个步骤。
想证明实际连接,需要针对一个明确目标的新连接,记录源地址和出接口,必要时抓包。本篇没有完成抓包,所以不放模拟终端输出冒充网络数据包证据。
6. 回到OpenWrt:怎样避免测错对象?
我会先把实验问题写完整:
我要验证的是:这台电脑通过 RAX 的上游能否联网。 不是:这台电脑在任意可用链路上能否联网。然后依次检查:
- 记录目标地址以及 IPv4/IPv6 类型。
- 检查这个目标选中了哪个接口、源地址和下一跳。
- 用实际连接验证对应路径,而不是仅凭网页能打开。
- 若路径不经过 RAX,当前结果就不能用于验收 RAX 的上网配置。
临时断开其他接口是一种简化实验的方法,但不是第一步。配置期间可能还依赖它保持联网,也可能影响另一个正在进行的任务。这次我没有断开 Wi-Fi,也没有把接口度量调回去。
双连接本身没有错:它让管理和上网可以走不同出口。真正容易出错的是,把方便操作的网络拓扑,误当成已经控制好变量的实验拓扑。
7. 这一篇留下什么?
对于刚接触网络的人,先记住:电脑不是只选一个接口用于全部通信,而是针对目标查询路由。
对于已经会配路由的人,这次结果提醒我:测试前要确定测量位置和数据路径。路由器自身的 IPv6 外网测试、电脑通过路由器的测试、外部手机连回家的测试,分别证明不同的事情,不能互相代替。
本篇完成了真实的只读选路检查;还没有完成抓包、断接口对照或独立外网连通实验。后续继续补实验时,也应该把这些证据分开记录,而不是靠一句“已经能上网”全部带过。