基于开源路由技术的低功耗无线路由器研究
Wi-Fi无线接入技术基于IEEE802.11协议,是目前无线通信中最常用的无线接入技术。然而,Wi-Fi无线接入技术有一个致命弱点——功耗高。因此,如何降低Wi-Fi无线接入技术的功耗成为了急需解决的问题。移动终端通过无线路由器提供的Wi-Fi信号接入互联网或者进行定位服务,然而由于Wi-Fi的高功耗使得无线路由器必须一直连接电源才能保持正常工作,这就严重限制了人们的使用范围。我们希望在没有电源接入的地方(比如古老景区、历史遗迹)也可以使用无线路由器,为移动终端提供服务。
1、IEEE802.11协议
IEEE802.11协议是由美国电气与电子工程师学会(IEEE)开发的一组无线传输协议。这些协议定义了无线站点(或接入点)之间两个或多个无线站点之间的通信的接口。该协议主要包含物理层和MAC层,主要工作在ISO协议的最低两层上,本文主要研究该协议的MAC层。
IEEE802.11协议定义帧包含以下几个部分:
◆MAC头部。包含帧控制、持续时间、地址和排队控制信息。
◆有效长度的帧体。包含帧信息、帧类型。
◆FCS。包含CRC校验的信息。
控制帧:主要用于协助数据帧的传递,所有控制帧都使用相同的Frame Control字段。
管理帧:负责在工作站和AP之间建立初始的通信,提供认证和连接服务,包括连接请求/响应、轮询请求/响应、Beacon帧等。
Beacon帧:主要声明网络的存在。定期传送的信标可以让移动式工作站得知该网络的存在,从而调整加入该网络所必需的参数。在基础结构网络中,接入点负责传送Beacon帧。
由图1的IEEE802.11协议帧结构可以看出,如果仅仅保留IEEE802.11协议广播Beacon帧功能的话,则只需发送很少的数据,可以大大地降低功耗,而且我们还可以通过开源路由技术修改IEEE802.11协议来达到降低功耗的目的。
2、开源路由技术
图2为TCP/IP与OSI参考模型的对应关系,可以看出路由器是工作在OSI模型中的第3层,即网络层。同时也是TCP/IP协议的第3层,即网际层。路由器利用网络层定义的“逻辑”网络地址(即IP地址)来区别不同的网络,实现网络的百联和隔离,保持各个网络的独立性。路由器不转发广播消息,而把广播消息限制在各自的网络内部。发送到其他网络的数据均被送到路由器,再由路由器转发出去。
无线路由器是基于开源的Linux操作系统,然而商业路由器为了保护自己的技术是不会把固件源码公开的,因此不能由第三方软件开发者直接对其固件进行开发。自从Linksys释放WRT54G/GS的源码后,开源软件爱好者开发出很多不同版本的固件,以增强原有的功能或者增加原来没有的功能。下面是主流的无线路由的Linux发行版:
①Open-WRT。国内最早兴起刷固件行动的人基本上都是将自己的设备刷新成Open-WRT,由此可见Open-WRT具有极大的影响力。该固件通过SSH加密协议来配置,与Cisco设备在很多指令和操作上类似。
②DD-WRT。该固件是国内外目前最为流行的固件之一,它是在Open-WRT固件的基础上改进后发布的,很多功能都是取自Open-WRT。存应用范同上DD-WRT支持极多的硬件平台,并且新版本的发布也很及时。
③Hyper-WRT。该固件是以稳定著称的第三方同件,不过功能上要比前两种稍逊一筹。从核心代码上看,它是最接近Linksys官方固件的固件。对很多用户来说,新功能、新应用的出现是他们刷新同件的主要动力,如果只是要求单一的稳定,那么直接使用官方默认固件即可。
④Tomato。这是一款逐渐流行的固件,个头比较小,实际使用起来非常稳定,而且基于SVG的图形化流量图非常有特色。它是由Hyper-WRT研发团队中的一个组员开发的。
本文选用的第三方固件是Open-WRT,之所以选择Open-WRT是因为它是完全开源的,方便编译和配置,有对应路由器所需要的固件,重新刷固件也很方便。
3、低功耗无线路由器的实际应用
众所周知,在古老历史遗迹和古老景区内是很难实现网络接入的,主要原因是布线困难,因为布线会对历史遗迹产生损害。这时候就需要离线的导游导览系统来实现智慧景点的建设。本文研究的系统就是基于离线移动互联网没备(Mobile Internet Device,MID)的导游导览系统。在这个系统中,无线路由器所要实现的功能是以固定间隔发送广播帧,游客在游玩的时候,MID会根据广播帧的信号强度和SSID号来判断游客所在的位置,同时自动播放游客所到景点的视频和语音介绍信息。
在这个系统中无线路由器只需要提供以同定间隔发送广播帧的功能即可。由路由器的工作原理和IEEE802.11协议帧结构可以看出,无线路由器的功耗主要在数据传输和实现其路由功能上面,而发送广播帧的功耗很低。由此想到,如果将路由器的路由功能禁止并且不让其传输数据,只让其以固定间隔发送广播帧,那么将会大大降低功耗,而我们需要的这些功能是可以通过修改第三方固件Open-WRT实现的。
4、无线路由器和Open-wRT固件的选择
经调查研究各种路由器,最终选择了中兴公司的H118B路由器,使用的是BCM5354芯片,支持DD-WRT、Open-WRT等主流第三方固件,此款路由器的硬件配置是:8 MB Flash、32 MB ROM、BCM5354 CPU。
从Open-WRT官网上查得支持BCM5354芯片的固件是openwrt-brcm47xx-squashfs. trX。准备好路由器和固件之后,就是将固件刷入路由器以覆盖原来的固件,使用tftp方式进行刷机。当刷机成功后,用telnct登录路由器会显示结果。刷机成功界面如图3所示。
刷机成功之后是锂电池的准备,选择的是输入电压12.6 V、输出电压12 V、容量为5000 mAh的锂电池进行测试。
5 Open-WRT固件的修改和测试
Open-WRT固件配置的修改
首先,Open-WRT固件的SSID广播是默认隐藏的,需要修改其显示为SSID。修改方式如下:
◆执行vi/etc/config/wireless命令;
◆将option disabled 1改为option disabled 0;
◆修改过之后发现笔记本的无线网络列表里面显示的路由器的SSID名称为openwrt。
然后需要做的事情是禁止路由器的路由功能。修改方式如下:
◆输入vi/etc/sysctl.conf命令;
◆将net.ipv4.ip_forward=1改为net.ipv4.ip_for ward=0。
最后需要做的就是改变路由器发送广播帧的间隔时间,路由器的默认发送广播帧的间隔是100ms,而对于我们的导览系统是不需要这么频繁地发送广播帧的。对于游客来说在100ms之内移动的距离太短了,所以经过研究最终决定将发送广播帧的间隔改为2 s。在实际的游览景区中游客行走的很慢,2 s的时间只能行走很短的距离,恰好符合系统的需求。通过给Open-WRT固件的无线配置文件加上控制帧,可以改变发送的间隔。
修改方式如下:
◆输入vi/etc/config/wireless命令;
◆在配置文件中加入option beacon_int 2000,次命令行是将Beacon帧的发送间隔设置为2 s。
修改过程中的测试结果
测试过程共分为两次:第一次是在刷入固件后不做任何修改的情况下测试无线路由器的使用时间,在12 V、5 000 mAh供电的情况下,路由器可以使用约8 h。第二次是禁止路由功能只发送广播帧的情况下,经测试路由器可以持续工作约42 h。