当前位置: 首页 > news >正文

Android开发板与Windows网络不通?原来是策略路由在作祟

问题背景最近在调试一个CCU Android开发板与Windows PC的网络连接问题。开发板通过USB网卡与Windows直连之前使用192.168.103.x网段时一切正常但切换到192.168.100.x网段后双方竟然ping不通了问题现象Windows ping Android板子超时Android板子 ping WindowsNetwork is unreachable网络配置Android板子IP为192.168.100.17/24Windows PC IP为192.168.100.10/24排查过程第一层检查网络配置脚本首先怀疑是网络配置脚本setup_android_net.sh没有更新到新网段。检查脚本发现# 原脚本内容 ip route add 192.168.100.0/24 dev eth0 ip route add default via 192.168.100.1 dev eth0发现问题脚本里竟然没有给eth0设置IP地址只有路由配置没有ip addr add命令。修复在脚本中添加IP地址配置ip addr add 192.168.100.17/24 dev eth0执行后确认eth0有了正确的IP但ping仍然不通。第二层确认Windows端配置让用户在Windows端确认USB网卡已配置为192.168.100.10/24防火墙已关闭或添加了例外规则网络连接状态正常Windows端配置正确但问题依旧。第三层深入Android网络栈执行ip rule show查看路由策略发现了关键线索# Android策略路由规则简化版 0: from all lookup local 10000: from all fwmark 0xc0000/0xd0000 lookup legacy_system 13000: from all fwmark 0x10063/0x1ffff lookup local_network 15000: from all fwmark 0x0/0x10000 lookup legacy_system 16000: from all fwmark 0x0/0x10000 lookup legacy_network 17000: from all fwmark 0x0/0x10000 lookup local_network 23000: from all fwmark 0x0/0xffff uidrange 0-0 lookup main 32000: from all unreachable # 兜底规则直接返回不可达接着检查各个策略路由表的内容# 检查三个关键策略路由表 ip route show table local_network # 空的 ip route show table legacy_network # 空的 ip route show table legacy_system # 空的 # 检查main表我们配置的路由在这里 ip route show table main # 输出192.168.100.0/24 dev eth0 scope link src 192.168.100.17根本原因分析Android策略路由机制Android从5.0开始使用复杂的策略路由来支持多网络并发。与传统的Linux系统不同Android不会直接使用main路由表而是通过一系列策略路由表来决定数据包的走向。路由表优先级对比路由表表ID说明local​255系统自动维护存放本地IP和广播地址路由local_network​-Android策略路由表优先级较高legacy_network​-Android策略路由表优先级中等legacy_system​-Android策略路由表优先级较低main​254Linux默认路由表ip route show显示的就是这个default​253默认路由表路由查找流程Android的数据包路由查找顺序完全由ip rule show的输出决定规则0先查local表 → 没匹配因为目标不是本地地址规则10000-17000查三个策略路由表local_network、legacy_network、legacy_system→全部为空没匹配规则23000查main表 →这里有我们的路由但优先级太低规则32000from all unreachable→直接返回Network is unreachable关键问题虽然我们在main表中正确配置了192.168.100.0/24 dev eth0但Android的策略路由机制根本不会查到这个表因为前面的策略路由表都是空的数据包在匹配到main表之前就被unreachable规则拦截了。问题总结两个问题叠加导致网络不通脚本缺陷初始脚本缺少ip addr add命令eth0没有IP地址Android特性Android使用策略路由需要将路由同时写入多个策略路由表解决方案修正网络配置脚本同时解决两个问题#!/system/bin/sh # 修正后的setup_android_net.sh # 1. 设置IP地址之前缺失的关键步骤 ip addr add 192.168.100.17/24 dev eth0 # 2. 在主路由表中添加路由传统方式 ip route add 192.168.100.0/24 dev eth0 table main # 3. 在Android的三个策略路由表中都添加路由关键 ip route add 192.168.100.0/24 dev eth0 table local_network ip route add 192.168.100.0/24 dev eth0 table legacy_network ip route add 192.168.100.0/24 dev eth0 table legacy_system # 4. 添加默认路由如果需要上网 ip route add default via 192.168.100.1 dev eth0 # 5. 刷新路由缓存 ip route flush cache # 6. 启动接口 ip link set eth0 up验证命令执行修正后的脚本后使用以下命令验证# 检查IP地址 ip addr show eth0 # 检查所有路由表 ip route show table main ip route show table local_network ip route show table legacy_network ip route show table legacy_system # 测试连通性 ping -c 4 192.168.100.10 # 查看路由决策过程 ip route get 192.168.100.10经验总结Android网络配置的特殊性Android不是标准的Linux它的网络栈经过深度定制特别是策略路由机制。路由表要写全在Android上配置网络时不能只写main表还要考虑策略路由表。排查思路先检查基础配置IP地址、接口状态再检查路由表ip route show关键步骤检查路由策略ip rule show和各策略路由表调试命令组合# 快速诊断网络问题 ip addr show # 查看IP配置 ip route show # 查看主路由表 ip rule show # 查看路由策略 ip route show table 表名 # 查看特定路由表 ip route get 目标IP # 查看具体路由决策脚本健壮性网络配置脚本应该包含完整的配置步骤特别是容易被忽略的ip addr add。扩展知识Android策略路由表的作用local_network处理本地网络流量legacy_network处理传统网络应用的流量legacy_system处理系统服务的网络流量这些表的存在使得Android能够为不同应用、不同UID、不同网络标记fwmark的数据包提供不同的路由路径实现精细化的网络管理。为什么Android要这样设计Android作为移动操作系统需要同时处理蜂窝数据4G/5GWiFi以太网VPN热点共享策略路由机制让Android能够根据数据包的来源、目的、标记等因素智能地选择最佳的网络路径实现多网络并发和网络切换的无缝体验。结语这次排查经历再次证明了解系统底层机制的重要性。表面上看是简单的网络不通问题深挖下去却是Android策略路由机制在作祟。希望这篇分享能帮助遇到类似问题的开发者少走弯路。记住在Android上配网络别忘了策略路由表
http://www.zskr.cn/news/1398176.html

相关文章:

  • 保姆级教程:手把手教你安装配置Ultimaker Cura 4.8中文版(Win系统)
  • PX4Ctrl起飞逻辑深度解析:get_rotor_speed_up_des函数里的6.0和7.0参数到底怎么调?
  • 【LeetCode 热题 100】移动零
  • 别再傻傻重启Word了!Windows 11/10字体安装后立即生效的正确姿势
  • 从“富足的一生”到代码人生:技术人的精神富足与价值重构
  • 用NEAT-Python搞定XOR问题:一个隐藏节点就够了?手把手教你调参与可视化
  • AI 营销越做越累?因为你还没用上 GEO 思维
  • 基于 Python + LangChain + MCP(新闻查询)
  • 2026年实用AI写作辅助软件全攻略(含保姆级操作教程)
  • 从DC-9靶场实战,聊聊那些容易被忽略的‘敲门’服务(knockd)与SSH端口隐藏技巧
  • CTF新手必看:从PolarCTF靶场实战,手把手教你搞定DOCX隐写和伪加密压缩包
  • 数据库死锁分析与解决实战
  • 有哪些真正好用的降AIGC平台?能同时不降文笔还能清零AI疑似率的那种
  • 网络排障手记:同网段内两个IP,为何Ping的结果一好一坏?
  • A51宏汇编器预定义宏详解与应用技巧
  • 住宅 IP 和机房 IP 有什么区别?跨境账号为什么不能只看 IP 国家
  • SAP接口分页功能添加
  • 别再乱接线了!ESP8266-01s连接USB转TTL模块的保姆级避坑指南(附外部电源方案)
  • 数据分析师必备:用Python/Pandas实操贾俊平《统计学》里的那些核心概念(附代码)
  • 2026乐山美食攻略:乐山本地人推荐的小吃/乐山本地人美食推荐/乐山特色小吃店/乐山特色小吃有哪些/乐山美食什么好吃/选择指南 - 优质品牌商家
  • 基于LDA的Olivetti人脸降维与身份识别
  • 湿式双离合变速器微滑控制方法【附代码】
  • 从工具到AI操作系统:Agent技术演进全解析(2026)
  • 趣味智能陪伴!基于魔珐星云的宠物专属数字助手
  • 情感分析入门踩坑实录:我用知网词典+Python分析微博,结果翻车了…
  • 【鲁棒】分布式港口-哈密顿系统(Port–Hamiltonian)鲁棒调控的李雅普诺夫方法附Matlab代码
  • 2026年玫瑰爽肤水优质推荐榜:清爽型洗面奶/滋润型洗面奶/精华保湿水/美白洗面奶/美白补水提亮肤色爽肤水/美白补水收缩毛孔爽肤水/选择指南 - 优质品牌商家
  • 用Python和蒙特卡洛树搜索(MCTS)从零实现一个会自我对弈的五子棋AI
  • 从微分方程到算法稳定性:Gronwall不等式在数值计算中的实战应用(附Python代码)
  • 告别调参玄学:手把手教你用CSPStage和四检测头优化YOLOv8,轻松复现GC10-DET涨点