1. 问题现象与初步判断
最近在调试一块开发板时遇到了一个典型问题:开发板通过Windows共享网络上网时,执行apt update命令异常缓慢甚至失败。作为嵌入式开发者,我们经常需要让开发板通过宿主机共享网络来访问互联网,这种网络配置问题在实际工作中相当常见。
具体表现为:
- 开发板能ping通外网域名(如baidu.com)
- 但执行
apt update时卡在0% [Connecting to archive.ubuntu.com]或Waiting for headers - 偶尔能连接成功但下载速度极慢(<10KB/s)
- 直接wget下载.deb包同样出现连接超时
这种情况通常指向DNS解析或路由配置问题。但有趣的是,开发板能解析域名(ping域名能返回IP),说明基础网络是通的,问题出在更高层的网络传输上。
2. 基础网络连通性测试
2.1 验证基础网络状态
首先确认开发板的网络配置是否正确:
bash复制ifconfig eth0
确认IP地址、子网掩码和网关设置正确。在通过Windows共享网络时,开发板应该:
- IP与宿主机在同一网段
- 网关指向宿主机的共享网络IP(通常是192.168.137.1)
- DNS设置为公共DNS如8.8.8.8或114.114.114.114
2.2 测试关键网络节点
执行以下关键测试:
bash复制# 测试网关连通性
ping 192.168.137.1
# 测试DNS解析
nslookup archive.ubuntu.com
# 测试HTTP连接
curl -v http://archive.ubuntu.com
在我的案例中,前两项测试都正常,但curl测试显示TCP连接建立后数据传输异常缓慢。这提示问题可能出在:
- Windows共享网络的NAT转换效率
- MTU大小不匹配导致分片
- TCP窗口缩放参数问题
3. Windows共享网络特性分析
3.1 ICS服务的工作机制
Windows的Internet Connection Sharing(ICS)本质是一个NAT服务。它会:
- 创建一个虚拟网卡(通常命名为"本地连接*")
- 分配192.168.137.0/24网段
