Windows存在两条默认路由时如何判断数据包从哪个接口出站
Windows双默认路由场景下的出站接口选择
执行默认路由查询的命令及返回结果如下:
> Get-NetRoute -DestinationPrefix 0.0.0.0/0 ifIndex DestinationPrefix NextHop RouteMetric ifMetric PolicyStore ------- ----------------- ------- ----------- -------- ----------- 14 0.0.0.0/0 0.0.0.0 0 1 ActiveStore 6 0.0.0.0/0 172.20.24.1 256 25 ActiveStore
路由优先级判断规则
Windows选择出站路由按固定顺序判定,前序规则命中后直接生效,不再判断后续规则:
- 第一步:匹配最长目的前缀,前缀长度越长优先级越高。以上两条路由目的前缀均为
0.0.0.0/0,前缀长度一致,进入下一判断环节。 - 第二步:计算路由总度量值,总度量值=路由条目自身的RouteMetric + 对应接口的ifMetric,数值越小优先级越高。
对两条路由分别计算总度量值:
- ifIndex 14对应路由:总度量值=0+1=1,下一跳为
0.0.0.0,属于直连路由,含义是系统判定目标地址和该接口在同一个二层网络下,不需要三层网关转发。 - ifIndex 6对应路由:总度量值=256+25=281,下一跳为
172.20.24.1,属于三层转发路由,数据包需要发给该网关完成跨网段转发。
实际出站逻辑
正常状态下所有匹配默认路由的出站数据包,默认优先从ifIndex为14的网络接口发出:
- 如果目标IP确实属于ifIndex14接口所在的二层直连网段,系统会直接在该接口发送ARP请求获取目标MAC地址,完成二层转发,通信正常。
- 如果目标IP不在ifIndex14的直连网段(比如访问公网、其他三层网段),该接口发出的ARP请求无法得到对应回应,数据包会直接丢弃。系统默认不会自动切换到ifIndex6的接口转发,只有当死网关检测(Dead Gateway Detection)机制判定ifIndex14的路径完全不可用时,才会临时降级使用度量值更高的第二条路由。
这类下一跳为0.0.0.0的默认路由大多是虚拟网卡、VPN客户端、网络共享类软件自动添加的异常条目,如果ifIndex14不是实际接入网络的物理/虚拟业务接口,会导致跨网段、公网访问失败,可以手动删除该异常路由恢复正常网络。
内容的提问来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

