歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Linux 無線網絡技術概述:WLAN

  當今,不考慮 Linux 和無線網絡技術的話,就無法談到計算機和網絡。在這篇文章中,Sreekrishnan Venkateswaran 用 Linux 觀點闡釋了通過 WLAN、Bluetooth、GPRS、GSM 以及 IrDA 實現無線聯網。他使用各種不同的無線設備和相應的內核層,以及用戶空間工具來示范它們在 Linux 下如何工作。     無線技術,例如 WLAN (Wireless Local Area Network)、Bluetooth、GPRS (General Packet Radio Service)、GSM (Global System for Mobile communications) 以及 IrDa (Infrared Data),在不同的環境下提供服務。雖然 WLAN 支持比 Bluetooth 更高的速度和更長的傳播距離,但是它也需要更多的費用並且耗電量更大。GPRS 雖然比 Bluetooth 和 WLAN 慢,但是可用於移動技術。盡管它們存在差異,或者是其他原因,但是具有多種無線功能的設備可以綜合利用它們。例如,根據 GPS 模塊的定位輸入,設備可以透明地將網絡連接從路上的 GPRS 切換到網吧中更便宜的 WLAN。移動電話可以通過 Bluetooth 與心律監視器通信,當病人心律超出某個極限時,就可以通過 GSM 向醫生發送警報。     目前,無線技術已經以 PCMCIA、Compact Flash (CF) 卡的形式廣泛應用,或者用於 USB 設備。大多數計算機系統,包括嵌入式設備,都有 PCMCIA、CF 或者 USB 接口,即使不含對無線技術的內置支持,也能夠立刻使用這些技術。這篇文章分析了無線設備的一些示例,並且研究了設備驅動程序的 Linux 實現、總線技術以及各種協議。     首先,通過跟蹤 WLAN 樣卡的代碼流,您將了解到 WLAN 設備是如何在 Linux 下工作的,然後還可以看到幾個 Bluetooth 設備如何與 Linux Bluetooth 棧和其他內核層連接。接下來,您將了解到如何使 GPRS 和 GSM 設備在 Linux 下工作。文章最後分析了 Linux 上的 IrDa 支持並簡要介紹了有關無線網絡設備的性能問題。     注意:本文涉及到的內核數據結構和文件名是當前 Linux 版本中所使用的。文件名相對於 Linux 內核源程序樹的根。     Linux 802.11 WLAN   WLAN 通信系統作為有線 LAN 以外的另一種選擇一般用在同一座建築內。WLAN 使用 ISM (Industrial、Scientific、Medical) 無線電廣播頻段通信。WLAN 的 802.11a 標准使用 5 GHz 頻段,支持的最大速度為 54 Mbps,而 802.11b 和 802.11g 標准使用 2.4 GHz 頻段,分別支持最大 11 Mbps 和 54 Mbps 的速度。     WLAN 類似於有線以太網,它們都是從同一地址池分配 MAC (Media Access Control) 地址,並且都是作為以太網設備出現在操作系統的網絡設備層。例如,ARP(Address Resolution Protocol) 表是用 WLAN MAC 地址和以太網 MAC 地址填充的。     然而 WLAN 與有線以太網在鏈路層有很大的區別。例如,802.11 標准使用沖突避免(CSMA/CA)代替有線以太網的沖突檢測(CSMA/CD)。而且,與以太網幀不同的是,WLAN 幀是被確認的。     由於 WLAN 工作站之間的模糊邊界,WLAN 鏈路層擁有在傳送前清除一個區域的協議。出於安全性考慮,WLAN 的 Wired Equivalent Privacy (WEP) 加密機制提供與有線網絡相同的安全級別。WEP 將 40 比特或 104 比特密鑰與隨機的 24 比特初始向量組合用以加解密數據。WLAN 支持兩種通信模式:Ad Hoc 模式 用於小群組工作站之間不必使用訪問點的短時間內通信,而 InfrastrUCture 模式 的所有通信必須通過訪問點。訪問點周期性地廣播一個服務集標識符(SSID),SSID 用於將一個 WLAN 網絡與其他網絡區別開來。     大多數可用的 WLAN 卡是基於 Intersil Prism 或 Lucent Hermes 芯片組的。Compaq、Nokia、Linksys 和 D-Link 卡使用 Prism 芯片組,而 Lucent Orinoco 卡和 Apple Airport 使用 Hermes 芯片組。     Linux WLAN 支持  Linux WLAN 支持由 WLAN API 實現和 WLAN 設備驅動程序組成。我將依次研究它們。     有兩個 Linux 項目定義一般的 WLAN API,並且提供工具讓用戶空間應用程序配置參數和存取來自 WLAN 設備驅動程序的信息。Wireless Extensions 項目為不同的無線網卡提供公共的 Linux 用戶空間接口。這個項目的工具包括 iwconfig 用以配置參數(比如 WLAN 驅動程序中的 WEP 關鍵字及 SSID)。linux-wlan 項目作為 Wireless Extensions 項目一部分,也支持一系列用於從用戶空間與 WLAN 設備驅動程序交互的工具。與基於 Wireless Extensions 的工具不同,這些工具使用類似於 SNMP (Simple Network Management Protocol) MIB (Management Information Base) 的語法,該語法反映 IEEE 802.11 規范。     繼續討論設備驅動程序,支持流行的 WLAN 卡的 Linux 設備驅動程序包括:     Orinoco WLAN 驅動程序:是 Linux 內核源代碼的一部分,支持基於 Hermes 的卡和基於 Intersil Prism 的卡。orinoco_cs 模塊提供了 PCMCIA 和 CF 卡所必需的 PCMCIA 卡服務支持。    linux-wlan 項目的 linux-wlan-ng 驅動程序:支持多種基於 Prism 芯片組的卡。這個驅動程序支持 linux-wlan API 並部分支持 Wireless Extensions。    Host AP 設備驅動程序:支持 Prism 芯片組的 AP 模式,可以使 WLAN 主機起訪問點的作用。    Linux Symbol Spectrum 設備驅動程序:支持 Symbol PCMCIA 卡。不同於 PCMCIA 卡,Symbol CF 卡缺乏板載固件,它依靠設備驅動程序來下載固件。該驅動程序的一個單獨版本適用於 CF 卡。Intel 將 Symbol PCMCIA 卡重新打包為 Intel PRO/Wireless 卡,而 Socket 通信重新打包了 Symbol CF 卡。    Atmel USB WLAN 驅動程序:利用 Atmel 芯片組支持許多 USB WLAN 設備。     Intersil Prism2 WLAN CF 卡   我將討論 Intersil Prism2 802.11b WLAN CF 卡來展示它如何與 Linux PCMCIA、網絡設備及協議層一起工作。     Linux PCMCIA/CF 層由 PCMCIA 主機控制器的設備驅動程序、不同卡的客戶機驅動程序、用戶模式程序、有助於熱拔的後台進程和與以上各部分交互並為它們提供服務的內核卡服務中樞組成。PCMCIA 控制器將卡連接到系統總線,將卡內存映射到主機 I/O 和內存窗口,並將卡產生的中斷路由到自由處理器中斷線。CF 卡較小,但與 PCMCIA 兼容,並且經常應用於手持設備。PCMCIA/CF 卡擁有兩個存儲空間:屬性內存(attribute memory)和 公共內存(common memory)。屬性內存類似於 Card Information Structure (CIS),用來保存配置注冊和描述符信息。Linux 卡服務核心與主機控制器設備驅動程序、卡設備驅動程序及用戶模式 cardmgr 後台進程交互。它在一些事件(比如卡插入、卡移出以及低電量)發生時調用卡驅動程序的事件處理程序例程。盡管卡服務從卡的 CIS 向上傳送信息到 cardmgr,但是 cardmgr 將為分配內存窗口和中斷級別而在用戶空間(/etc/pcmcia/config.opts)中定義的資源分配策略向下傳送到卡服務。查看 drivers/pcmcia/ds.c 可以了解與 cardmgr 交互的內核代碼,查閱 /etc/pcmcia/config.opts 可以了解用戶空間資源分配策略。     插入 Intersil WLAN CF 卡時,卡服務調用 orinoco_cs 模塊的 PCMCIA 事件處理程序。卡服務解析卡屬性內存中的 CIS 元組(tuples)並向上傳送信息到 cardmgr,這將從 /etc/pcmcia/config 文件(參閱清單 1)加載適當的設備驅動程序。由於卡的 CIS 中的 manfid 元組匹配 /etc/pcmcia/config 中的條目,所以 cardmgr 綁定帶有 orinoco_cs 驅動程序的卡。清單 1 中的設備條目規定 orinoco_cs 驅動程序由三個內核模塊組成:orinoco、orinoco_cs 和 hermes。此外,由於設備屬於無線的(wireless)一類,所以當啟動和停止設備時,cardmgr 執行腳本 /etc/wireless/wireless。這個腳本使用 WLAN 工具和實用程序來配置設備驅動程序參數,例如 WEP 關鍵字和 SSID。它還可以啟動 WLAN 上的網絡協議,例如 DHCP(Dynamic Host Configuration Protocol,動態主機配置通訊協議)。清單 1 中的示例使用 Wireless Extensions 工具來執行設備配置。     注意: PCMCIA 配置文件的確切位置取決於所用的 Linux 分布。     清單 1. Intersil WLAN CF 卡的 PCMCIA 設備條目     card "Intersil PRISM2 11 Mbps Wireless Adapter"  manfid 0x0156, 0x0002  bind "orinoco_cs"    device "orinoco_cs"  class "wireless" module "orinoco","orinoco_cs","hermes"     用 /etc/pcmcia/wireless 和 /etc/pcmcia/wireless.opts 腳本來配置 WEP 關鍵字和 SSID 這樣的參數。     清單 2. 配置 WLAN 特定參數     iwconfig ethX essid <wlan_name>   key AAAA-AAAA-AA [1] key BBBB-BBBB-BB [2] key CCCC-CCCC-CC [3] key DDDD-DDDD-DD [4]            : Set 64-bit WEP Keys and ESSID in the driver  iwconfig ethX   : Display WLAN parameters  iwpriv       : Get nongeneric, driver-specific parameters  iwlist       : List Information and statistics from an interface  iwspy       : Read quality of link for a set of addresses  /proc/net/wireless : Wireless Statistics from the device driver     在插入卡時,orinoco_cs 像傳統的網絡設備驅動程序一樣,調用 register_netdev 來獲得分配給 WLAN 接口的 ethX 網絡接口名。它還會注冊一個中斷服務例程的地址以服務收發無線數據時產生的中斷。中斷處理程序是 orinoco 模塊的一部分,並與 Linux 網絡棧交互。Linux 網絡棧使用主要的數據結構是 sk_buff 結構(定義在 include/linux/skbuff.h 中,該文件包括關於附加在它上的一個內存塊的控




Copyright © Linux教程網 All Rights Reserved