HelloX路由器功能验证总结
HelloXV1.82发布已三个月了,这个版本提供了完善的网络功能,主要有IP路由,地址转换(NAT),DHCPServer,PPPoE拨号等等面向接入路由器的网络功能。为了对其功能进行充分的测试,我搭建了一个家庭网络环境,家中的所有联网设备,包括数台手机,笔记本电脑,智能台灯,儿童护卫手表等,都通过这套环境接入运营商的互联网。经过近三个月的连续测试,总体表现稳定。现简单总结如下。
HelloX路由器网络环境介绍
搭建的网络环境,其逻辑结构如下:
大概来说,就是用一台笔记本电脑,运行HelloX。这台笔记本电脑提供两个USB接口,分别连接两个USB转以太网的网络接口。其中一个接口连接运营商(应该是长城宽带)部署到家中的网络接口,另外一头连接一台WiFi网关(图中的无线AP)。之所以额外增加一台WiFi网关,是因为当前没有找到合适的WiFi发射模块。不过这个WiFi网关工作在二层模式,只负责WiFi无线信号的收发,所有的网络处理,都是在HelloX GW上完成的。
下图示意了真实的情况:
HelloX GW通过PPPoE拨号,接入到运营商的网络中,并获得一个运营商分配的IP地址(后续称为公网地址)。PPPoE拨号方式便于运营商计费,因此是大多数宽带接入采用的方式。同时,HelloX GW运行一个DHCP服务器的核心线程,为通过WiFi接入的终端设备,分配私有的IP地址。HelloX GW上同时启用NAT功能,把分配给终端的私有IP地址,转换为公网IP地址,这样才能被运营商的大网所寻址到,从而能够访问Internet。这也是大多数宽带接入路由器的工作方式。
接入到这个网络后,HelloX GW会为终端分配IP地址,以及DNS服务器地址,缺省网关等信息。下图是我的笔记本电脑(运行WIN10系统)接入之后,自动获取到的配置信息:
最多的时候,接入这个网络环境的终端数量,超过了10台。家人的手机,家里的电脑,Pad,以及一台小米的智能台灯,一个儿童护卫手表等,都通过这个环境接入Internet,并能够正常访问网络。
验证情况介绍
几个月以来,在家中一直用这套网络环境上网。虽然中间曾出现过一些问题(详细在下一节介绍),但没有太大的意外,一直应用下来,上网体验与原来的专业路由器一样:
1. 尚未碰到无法打开的网页,这里的无法打开,指的是在原来的路由器上能够打开,而在HelloX GW上无法打开;
2. 常见的手机应用,比如微信,QQ,微博,视频软件,网购软件(京东/淘宝...),银行客户端,等等都表现良好。因我个人不喜欢玩手机游戏,因此没有对手机游戏进行测试;
3. 在笔记本电脑上下载文件,各类云盘,或者通过公共邮箱(比如QQ,outlook等)发送邮件和附件,都没有问题;
4. 进入WiFi覆盖范围,手机可自动接入,并获得与上一次接入相同的IP地址。这一点对物联网的应用很重要,很多路由器都无法做到;
5. 长连接稳定不中断。所谓长连接,是建立后一直维持的连接,比如智能台灯,会注册到后台服务器上,手机通过服务器查看和管理智能灯。不在家里时,曾多次通过手机查看家中的智能台灯的状态,都处于在线状态。
对于上网速度来说,HelloX GW不是瓶颈,瓶颈是向运营商购买的接入带宽。比如,我购买的是10M带宽接入服务,下面是在笔记本电脑上的网速测试结果:
下载速度已超过13M(感谢运营商,可能把接入带宽给我稍稍调大了一点:-)),一般宽带接入都是不对称的,下行远大于上行,因此上载速度在2M左右。总体来说,超过98%的用户。
这个测试,说明HelloX GW本身不是瓶颈,如实的反映了运营商做的带宽限制。在测试网速的时候,查看HelloX GW的CPU占用率,大概在1%左右。如果是普通的路由器,这时候的CPU占用率估计要到50%了。虽然这主要是硬件原因造成,但充分说明,如果用Intel CPU做路由器,会有大量的富余计算能力,用于其它用途。这在将来的物联网场景,边缘计算场景,是很重要的。
综合来说,采用HelloX GW上网,与成熟的宽带接入路由器体验一致,甚至更好。对我个人来说,还可以做一些恶作剧。比如,可以取消WLAN的密码,这样任何人就可以接入。HelloX GW会记录下每个接入终端的信息(MAC地址,IP地址,等等),这时候就可以通过查看这些信息,判断蹭网的数量。如果你愿意,可以把选定的蹭网终端的通信报文,都抓取和保存下来。但是这样做不道德,甚至违法,因此我从未做过。
测试过程中出现的问题
当然,在这个测试过程中,也出现过一些问题,主要是代码的BUG引起,都已经过修改代码解决:
1. 最开始的时候,某些SSL网站(加密网站)访问很慢。比如12306网上购票等,响应很慢,有时候甚至打不开。经过抓包排查,发现是TCP连接的建立过程有丢包,少于46字节的IP包,在传输过程中会被丢弃。经过深入分析,发现是HelloX OS在做NAT的时候,对TCP的校验和计算法上,存在BUG,导致小包的校验和计算错误,从而导致接收端丢包。修改代码后,该问题解决;
2. 偶发性死机现象,该问题偶尔出现,概率很低,不是必现。一旦出现,电脑的CPU占用率会达到100%,并无法响应输入。在代码中实现了一个定位方法,具体就是打印出各个核心线程的CPU占用率,以及当时所执行的指令位置。通过这个定位手段,发现是处理TCP选项(TCP option)的一个函数导致。这个函数在处理TCP选项的时候,有一种选项没做考虑,一旦出现就会进入死循环。修改代码后解决;
3. 提供服务的运营商,每隔24个小时,会把建立的PPPoE连接中断一次。中断之后,HelloX没有重建,因此导致网络中断。需要重新手工拨号解决(通过命令行操作)。后续会增加PPPoE会话中断后的重新自动建立机制;
4. DHCP Server的decline消息没有处理,导致有时候无法分配IP地址。这在HelloX GW重启的情况下,尤其明显。因为这时候已经为某些终端分配了IP地址,重新启动之后,HelloX GW上记录的信息丢失,于是重新开始分配。结果会把已经分配出去的地址,重新分配给不同的终端。这样终端就会发送decline消息,而最开始的时候,HelloX没有处理这个消息,导致无法获取地址。
当然,还有一些其它的小问题,都已经解决。
经过这一长时间的测试,对HelloX的稳定性的提升,也有重要意义。
验证结论及后续计划
经过此番长时间的实际应用验证,我们认为,采用HelloX OS做软件的路由器,已经达到可以实际应用的程度。而且作为一个通用的物联网操作系统平台,HelloX OS还提供其它路由器所不具备的功能,比如可编程,能力开放等。
当然,由于硬件限制,并没有直接在HelloX GW上实现WLAN发射功能,这也是后续要重点实现的功能。
后续我们会开发专用的硬件平台,依托HelloX OS,做出专门的面向物联网的路由器。这种路由器不但具备传统宽带接入路由器的所有功能,而且还具备更强的计算能力,更高的安全性,更加灵活的定制能力,同时集成物联网开发框架,适应将来物联网的需求。下图示意了这个设计思想:
最新的HelloX OS代码,已上传到github上,欢迎朋友们参考:github.com/hellox-project/HelloX_OS
同时欢迎对物联网和HelloX操作系统感兴趣的朋友加入我们,QQ群:38467832,微信/QQ:89007638