劉超
----當802.11b無線網應用越來越廣泛,和傳統以太網絡的連接和融合就成了大家所關心的話題。而在與有線以太網絡互聯的過程中,扮演重要角色的就是Access Point(AP)。普通的AP工作在HostAP模式,作為一個以太網橋接器使用(見圖1)。和傳統的有線以太網橋接器不同的是,AP會將有線端和無線端的報文進行相互轉發,同時也能夠連接多個無線節點。用戶所能感覺到的就是比有線以太網稍微大一些的延遲,而以前在有線以太網絡上的所有應用也可以原封不動地保留下來。
Linux遇上802.11b ——WLAN 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帶我們走入更輕松自如的無線時代。