背景
公司研发的硬件, 运行自行定制的Android ROM(基于AOSP 4.4), 偶尔会发生一个怪异的网络问题
- 主机wifi首先接入当前网络A, 一切没问题(可以访问IDC服务器); 切换接入到另一个网络B, 无法访问IDC服务器, 但此时在网络B的主机访问其他的Internet服务并无问题
- 主机wifi首先接入网络B, 一切没问题; 切换接入到一个网络A, 一切没问题; 再切回到网络B, 无法访问IDC服务器, 访问其他Internet服务并无问题
这个问题在办公室环境下发生频率较高(但并非100%), 也有部分客户会抱怨切换网络后不能访问服务器
公司网络A的结构不同于一般家用网络, 默认网关和对外的出口路由器并不是同一台设备, 结构示意如下
DHCP
Network: 192.168.0.0/24
Gateway: 192.168.0.1, 负责公司内部各网络间的数据交换
DNS: 192.168.0.201
Router: 192.168.0.254, 负责提供Internet接入
先说原因/结论: 主机的ROM不能正确释放由ICMP Redirect报文控制生成的临时路由
下文都是一些分析流水, 如果你有些网络经验的话, 应该可以不用继续往下看了