当Linux遇上802.11b ——WLAN AP替代方案测试
刘超
----当802.11b无线网应用越来越广泛,和传统以太网络的连接和融合就成了大家所关心的话题。而在与有线以太网络互联的过程中,扮演重要角色的就是Access Point(AP)。普通的AP工作在HostAP模式,作为一个以太网桥接器使用(见图1)。和传统的有线以太网桥接器不同的是,AP会将有线端和无线端的报文进行相互转发,同时也能够连接多个无线节点。用户所能感觉到的就是比有线以太网稍微大一些的延迟,而以前在有线以太网络上的所有应用也可以原封不动地保留下来。
图1 无线网络于有线网络连接
系统配置
----在WLAN中,AP所完成的最重要的3个功能就是:和无线节点通讯、桥接所有的无线节点、桥接无线网络和有线网络。因此要构建一个完整的WLAN,实现无线网络和有线网络的连接和融合,AP是必不可少的,而在WLAN设备中,AP的价格无疑是比较高的。
----那么我们除了AP以外,还有没有其他方式可以实现AP的功能,取代AP呢?那就是开放源代码社区了。事实上,开放源代码社区很早就开始关注无线通讯这一领域,不管是在对网络功能的支持,还是硬件设备驱动的发展,都已经进入了实用阶段,其中发展非凡迅速的操作系统——GNU/Linux,就提供了包括对以太网桥接在内的很多强大的网络功能。这样一来,也就给我们自己动手搭建一个系统实现AP的基本功能创造了条件。
----其实,现在市面上出售的802.11b产品,不管是网卡还是AP,芯片厂商大都使用相同的核心无线芯片组,只是AP在此基础上还增加了一些嵌入式微控制系统,让整个芯片组工作在普通的Station模式或HostAP模式,通过在相同的芯片组上提供不同的固件实现不同的功能,基于Prism2 802.11b(带有HFA3841/HFA3841 MAC处理器)芯片组的解决方案就是非常典型的例子。
----不过现在能够在GNU/Linux下顺利工作的HostAP模式驱动还很少,而Prism2正是最佳的选择,因为通过直接对Prism2的寄存器进行操作,可以在不对固件进行任何操作的情况下就进入HostAP模式。而且可以和原来作为网关/出口的GNU/Linux系统集成到一起,非常方便地进行治理。
----要搭建一个Linux AP,我们需要哪些东西呢?
一、硬件部分
一台能够运行GNU/Linux的计算机(笔记本电脑或台式机)。假如只是用来做AP,一些闲置已久的老Pentium台式电脑就可以满足需求。
一个以太网适配器用来连接有线网络。多数常见的以太网网卡能在GNU/Linux下工作得很好。
一个基于Prism2芯片组的PCI/PCMCIA的无线网卡。(经过我们确认能够在Prism2 HostAP模式下工作得很好的适配器型号有Compaq WL100/WL200、D-Link DWL-650、Linksys WPC11和Samsung SWL2000 N/P)。
----我们选用的测试平台的硬件配置见表1。
二、软件部分
一个能够正常运行的的2.4.x核心的Linux系统,glibc应该在2.2版本以上。
GNU C/C++编译器 gcc 2.95以上,对应的开发工具。
PCMCIA-CS卡驱动服务 3.1.33(PCMCIA接口的适配器才用得到)。
Prism2 HostAP模式驱动 2002-04-05。
linux kernel source源码。
桥接工具bridge-utils 和能同时使用桥接和Iptables的补丁。
----我们选用的测试平台的软件系统见表2。
系统搭建及测试
----在预备好所有软硬件设备后,我们就开始搭建系统了。
第一步:预备系统核心
----由于标准发行的GNU/Linux内核源码中,桥接功能和netfiliter是不能一起正常工作的。因此为了要在其同一台计算机上同时运行桥接功能和IPtables,需要对核心源码进行修补,相关补丁可以从http://bridge.sourceforge.net 上下载。
首先我们用make config来配置GNU/Linux核心的源码。在配置核心的时候,我们用PCMCIA CardServic的方式来驱动PCMCIA,同时添加有线以太网卡等其他设备的驱动和文件系统模块。
----配置完成后,用Make dep;make bzImage来产生核心的二进制镜像。同时用make modules;make modules_install来产生和安装核心模块,至此系统内核已经基本预备就绪。
第二步:安装Prism2的HostAP驱动程序
----在同一个目录内解开PCMCIA-CS 3.1.33和Prism2 HostAP的驱动程序包,并将Prism2驱动程序目录下的drivers中所有文件复制到PCMCIA-CS的目录中。这样会在PCMCIA-CS中多出一个Prism.mk,且会在编译PCMCIA-CS的时候一同编译Prism2的驱动程序。
----然后,我们需要在PCMCIA-CS的目录中用make config进行配置,选择从核心源码读取配置,其他都用默认选项即可。接下来我们用Make all:make install来编译/安装PCMCIA-CS模块。
----随后用第一步中编译好的核心镜像启动系统。lilo的用户应该先把/usr/src/linux/arch/i386/boot/bzImage复制到lilo能读取的地方(前1024个柱面的位置),并在你的lilo配置文件中加入对应的配置命令行,看起来像是这样:
----image=/boot/bzImage
----label=wlan_kernel
----root=/dev/sda1
----read-only
----然后执行lilo,重写引导纪录,启动系统。
----在启动过程中我们可以看到,系统已经找到了PCMCIA转接设备和无线网卡。假如这个时候有无线节点在四周,而且所指定的AP essid为ANY时,就可以找到这个AP了。不过这个时候我们还只是连接到AP而已,我们还需要构建一个桥接设备,把无线和有线网络桥接到一起。
第三步:构建桥接功能
----解开bridge-utils.tar.gz,这时可以用ifconfig-a来查看你的所有网络接口,现在至少有3个接口:lo——本地loopback设备;eth0——第一个以太网卡;wlan0——无线网卡。你需要用ifconfig < 设备 > 0.0.0.0 来改变除了lo以外所有网络接口的工作方式,以迫使系统进入杂乱模式,可以接收所有数据包。然后执行brctl addbr br0来添加一个名字为br0的桥接设备,再用“brctl addif br0 eth0”和“brctl addif br0 wlan0”把无线端和有线端的接口分别加入到桥接里面去。接着用ifconfig br0 0.0.0.0 up让桥接设备生效。这样一个具有最基本功能的AP就能工作了,只需要稍等一会,让桥接设备学习到2个网络端的MAC地址,无线端和有线端就能互相访问了。
----在完成搭建后,我们通过对这个Linux AP进行FTP文件传输(在没有对数据进行加密的方式下传输数据)性能测试,并和采用标准AP设备的方式进行了比较,表3为2种方式的测试数据结果。
----这样可以看出,在不对数据加密传输的情况下,我们的这个LinuxAP和标准的AP测试数据非常接近,也就是说,我们的自制LinuxAP成功了。
----在我们使用当中,也发现了LinuxAP很多和标准的AP不同的地方,这次搭建的LinuxAP在工作中有效距离甚至大于某些品牌的AP,这也和适配器工作时的功率和天线有关,在LinuxAP下用Windows做无线客户端并且用文件共享方式进行文件传输的时候,效率会非常的低,甚至会无法完成一次完整的传输,而在使用FTP进行数据传输则没有这种现象。
----结论:
----在实际的环境中,我们可以通过这种方式,借助各种闲置的台式计算机或者是笔记本电脑来组建一些简单的无线网络,性能并不会低于专用的AP,假如已经有运行于Linux下的平台,还可以把无线应用整合一起。(当然在接入点较少时候,你还可以简单的让几个节点的无线适配器都工作在AdHoc的方式,然后把所有节点的SSID设置为相同,就可以直接通讯了。本次测试中,我们也用3台IBM笔记本电脑就此做了试验。由于此方案实现起来的确非常简单,所以本文就不再加以具体介绍,读者有爱好的可以自己尝试。)要害的一点是这个LinuxAP仅仅实现了AP的基本功能:无线接入和桥接,其他的移动IP分配(Mobil IP),动态主机配置(DHCP)和各种治理功能都是和Linux系统结合到一起的,对于普通的用户来说,实现起来也许会有些复杂,但是随着这一类的开放源代码计划的成熟,相信这些问题会逐渐的解决,出现更多,更好的选择,让802.11b带我们走入更轻松自如的无线时代。