《深刻理解Android:Wi-Fi,NFC和GPS》章節連載[節選]--第三章 Wi-Fi基礎知識

首先感謝各位兄弟姐妹們的耐心等待。本書預計在3月中旬上市發售。從今天開始,我將在博客中連載此書的一些內容。注意,此處連載的是未經出版社編輯的原始稿件,因此樣子會有些非專業。html

注意,以下是本章目錄,本文節選3.1-3.3.4  3.4~3.4.2 及3.5節linux

 

爲了方便讀者深刻學習,本系列連載都會將做者研究過數據庫

  

程中所學習的參考文獻列出來編程

 

                                                                                      第3章  Wi-Fi基礎知識數組

 

本章主要內容:

  • 介紹IEEE 802.11協議相關知識;
  • 介紹Linux Wireless Extension和NL80211編程。

本章所涉及的源代碼文件名及位置:

  • wireless.h  external/kernel-headers/original/linux/wireless.h
  • driver_wext.c:external/wpa_supplicant_8/src/drivers/driver_wext.c
  • netlink.h:external/kernel-headers/original/linux/netlink.h
  • driver_nl80211.c:external/wpa_supplicant_8/src/drivers/driver_nl80211.c
  • nl80211_copy.h:external/wpa_supplicant8/wpa_supplicant/src/drivers/nl80211_copy.h

3.1  概述

Wi-FiWireless Fidelity)是一個無線網絡通訊技術的品牌,由Wi-Fi聯盟(Wi-Fi Alliance,縮寫爲WFA)擁有。WFA專門負責Wi-Fi認證與商標受權工做。嚴格得說,Wi-Fi是一個認證的名稱,該認證用於測試無線網絡設備是否符合IEEE 802.11系列協議的規範。經過該認證的設備將被授予一個名爲Wi-Fi CERTIFIED的商標。不過,隨着得到Wi-Fi認證的設備普及,人們也就習覺得常得稱無線網絡爲Wi-Fi網絡了。緩存

提示:IEEE 802.11規範和Wi-Fi的關係很難用一兩句話說清楚,讀者可閱讀參考資料[1]進行了解。簡單來講,IEEE 802.11是無線網絡技術的官方標準,而WFA則參考802.11規範制訂了一套Wi-Fi測試方案(Test Plan)。不過,Test Plan802.11的內容並不徹底一致。有些Test項包含了目前802.11還未涉及的內容。另外,Test Plan也未覆蓋802.11全部內容。因此參考資料[1]Wi-Fi定義爲802.11規範子集的擴展。安全

本章擬從如下幾方面向讀者介紹Wi-Fi技術:網絡

  • 首先介紹IEEE 802.11協議涉及到的理論知識,包括無線頻譜資源、IEEE 802.11/802.X協議中的相關內容、關鍵概念(例如Acess Point等)、MAC幀、無線網絡安全等。
  • 介紹如何在Linux系統中經過Linux Wireless Extension以及nl80211 API操做無線網絡設備。

提示:因爲篇幅問題,本書將不擬討論WFA制訂的一些標準如Wi-Fi DisplayWi-Fi Simple Configuration等。不過作爲Wi-Fi技術的重要組成部分,筆者將在博客中對它們進行系統介紹[1]數據結構

首先來看無線電頻譜和802.11協議的發展歷程。架構

3.2  無線電頻譜和802.11協議的發展歷程

本節將介紹無線電頻譜和802.11協議發展歷程。

3.2.1  無線電頻譜知識介紹[2]

Wi-Fi依靠無線電波來傳遞數據。絕大多數狀況下,這些能收發無線電波的設備每每被強制限制在某個無線頻率範圍內工做。這是由於無線頻譜(即無線電波的頻率,Radio Spectrum,單位爲Hz)是一種很是重要的資源。因此目前大部分國家對無線頻譜的使用都有國家級的管制。如下是幾個主要國家的管制機構:

  • 美國的FCCFederal Communication Commission),美國聯邦通訊委員會。
  • 歐洲的EROEuropean Radiocommunication Office),歐洲無線電通訊局。
  • 中國的MIITMinistry of industry and Information Technology),中國工信部下屬的無線電管理局。
  • 國際電信聯盟ITUInternational Telecomunication Union)。

上述這些機構是如何管理無線頻譜資源的呢?通常而言,無線頻譜資源將按照無線電頻率的高低進行劃分。有一些頻率範圍內的頻譜資源必須獲得這些管制機構的受權纔可以使用,而有些頻率範圍的頻譜資源無需管制機構的受權就可以使用。這些無需受權的頻譜大部分集中在所謂的ISM國際共用頻段中。

ISMIndustrial Scientific Medical的縮寫。如其名所示,位於ISM頻段的頻譜資源被工業、科學和醫學三個主要機構使用。ISM一詞最先由FCC定義。不過,各國的ISM頻段並不徹底一致。例如,美國有三個頻段屬於ISM,分別是902-908MHz2400-2483.5MHz5725-5850MHz。另外,各國都將2.4GHz頻段劃分於ISM範圍,因此Wi-Fi、藍牙等都可工做在此頻段上。

注意:雖然無需受權就可使用這些頻段資源,但管制機構對設備的功率卻有要求,由於無線頻譜具備易被污染的特色,而較大的功率則會干擾周圍其餘設備的使用。

3.2.2  IEEE 802.11發展歷程介紹

使用過Wi-Fi的讀者或多或少都接觸過IEEE 802.11這個詞,它到底表明什麼呢?

IEEEInstitute of Electrical and Electronics Engineers)是美國電氣和電子工程師協會的簡稱。802是該組織中一個專門負責制定局域網標準的委員會,也稱爲LMSCLAN/MAN Standards Committee,局域網/城域網標準委員會)。該委員會成立於19802月,其任務就是制定局域網和城域網標準。

因爲工做量較大,該委員會被細分紅多個工做組(Working Group),每一個工做組負責解決某個特定方面問題的標準。工做組也會被賦予一個編號(位於802編號的後面,中間用點號隔開),故802.11表明802項目的第11個工做組[3]。它專門負責制訂無線局域網(Wireless LAN)的介質訪問控制協議(MACMedium Access Control)及物理層(PHYPhysical Layer)技術規範。

和工做組劃分相似,工做組內部還會細分爲多個任務組(Task Group)。TG的任務是修改、更新標準的某個特定方面。TG的編號爲英文字母,如abc等。

提示:TG編號可以使用大小寫字母,但其含義不一樣。小寫字母的編號表明該標準不能單獨存在。例如802.11b表明它是在802.11上進行的修訂工做,其自己不能獨立存在。而大寫字母的編號表明這是一種體系完備的獨立標準,如802.1X則是處理安全方面的一種獨立標準。

如上所述,802.11制定了無線網絡技術的規範,其發展歷經好幾個版本。如下是IEEE 802.11各版本的簡單介紹[4]

  • 802.111997年發佈,原始標準(2Mbit/s,工做在2.4GHz頻段)。因爲它在速率和傳輸距離上都不能知足人們的須要,所以,IEEE小組又相繼推出了802.11b802.11a兩個新標準。
  • 802.11a1999年發佈,新增物理層補充(54Mbit/s,工做在5GHz頻段)。
  • 802.11b1999年發佈,新增物理層補充(11Mbit/s,工做在2.4GHz頻段)。802.11b是全部無線局域網標準中最著名也是普及最廣的標準。有時候它被稱做Wi-Fi。不過根據前文的介紹,Wi-FiWFA的一個商標。
  • 802.11c:它在媒體接入控制/鏈路鏈接控制(MAC/LLC)層面上進行擴展,旨在制訂無線橋接運做標準,但後來將標準追加到既有的802.1中,成爲802.1d
  • 802.11d:它和802.11c同樣在媒體接入控制/鏈路鏈接控制(MAC/LLC)層面上進行擴展,對應802.11b標準,解決Wi-Fi在某些不能使用2.4GHz頻段國家中的使用問題。
  • 802.11e:新增對無線網絡服務質量(Quality of ServiceQoS)的支持。其分佈式控制模式可提供穩定合理的服務質量,而集中控制模式可靈活支持多種服務質量策略,讓影音傳輸能及時、定量、保證多媒體的順暢應用,WFA將此稱爲WMM(Wi-Fi Multi-Media
  • 802.11f:追加了IAPPinter-access point protocol)協定,確保用戶端在不一樣接入點間的漫遊,讓用戶端能平順、無形地切換區域。不過,此規範已被廢除。
  • 802.11g2003年發佈,它是IEEE 802.11b的後繼標準,其傳送速度爲54Mbit/s802.11g是爲了更高的傳輸速率而制定的標準,它採用2.4GHz頻段,使用CCK技術與802.11b後向兼容,同時它又經過採用OFDM技術支持高達54Mbit/s的數據流,所提供的帶寬是802.11a1.5倍。
  • 802.11h:是爲了與歐洲的HiperLAN2相協調的修訂標準。因爲美國和歐洲在5GHz頻段上的規劃、應用上存在差別,故802.11h目的是爲了減小對同處於5GHz頻段的雷達的干擾。802.11h涉及兩種技術,一種是動態頻率選擇(DFS),另外一種技術是傳輸功率控制(TPC)。
  • 802.11i2004年發佈,新增無線網絡安全方面的補充。於20047月完成。其定義了基於AES的全新加密協議CCMPCTR with CBC-MAC Protocol),以及向前兼容RC4的加密協議TKIPTemporal Key Integrity Protocol)。
  • 802.11j:它是爲適應日本在5GHz頻段以上的應用不一樣而定製的標準。
  • 802.11k:它爲無線局域網應該如何進行信道選擇、漫遊服務和傳輸功率控制提供了標準。
  • 802.11l:因爲「11L」字樣與安全規範「11i」容易混淆,而且很像「111」,所以被放棄編號使用。
  • 802.11m:該標準主要對802.11家族規範進行維護、修正、改進,以及爲其提供解釋文件。m表示Maintenance
  • 802.11n20041IEEE宣佈成立一個新的單位來發展802.11標準,其標稱支持的數據傳輸速度可達540Mbit/s。新增對MIMOMultiple-Input Multiple-Output)的支持。MIMO支持使用多個發射和接收天線來支持更高的數據傳輸速率和無線網絡涵蓋範圍。
  • 802.11p:又稱WAVEWireless Access in the Vehicular Environment,)是一個由IEEE 802.11標準擴充的通訊協議,主要用於車載電子無線通訊。它本質上是IEEE 802.11的擴充延伸,符合智能交通系統(ITSIntelligent Transportation Systems)的相關應用。
  • 802.11r2008年發佈,新增快速基礎服務轉移(Fast Transition),主要是用來解決客戶端在不一樣無線網絡AP間切換時的延遲問題。
  • 802.11s:制訂與實現目前最早進的MESH網絡,提供自主性組態(self-configuring),自主性修復(self-healing)等能力。無線Mesh網能夠把多個無線局域網連在一塊兒從而能覆蓋一個大學校園或整個城市。Mesh本意是指全部節點都相互鏈接。無線Mesh網的核心思想是讓網絡中的每一個節點均可以收發信號。它能夠增長無線系統的覆蓋範圍和帶寬容量。
  • 802.11t:提供提升無線廣播鏈路特徵評估和衡量標準的一致性方法。
  • 802.11u:也稱"與外部網絡互通(InterWorking with External Networks)",它定義了不一樣種類的無線網絡之間的網絡安全互連功能,讓802.11無線網絡可以訪問蜂窩網絡(Cellular Network)或者WiMax等其它無線網絡。
  • 802.11v:該標準主要針對無線網絡的管理。它提供了簡化無線網絡部署和管理的重要和高效率機制。無線終端設備控制、網絡選擇、網絡優化和統計數據獲取與監測都屬於802.11v建議的功能。
  • 802.11w:其任務是經過保護管理幀(無線網絡MAC幀的一種類型,還有數據幀和控制幀。詳情見3.3.5.2節),以進一步提高無線網絡的安全性。由於802.11i所涉及的安全技術只覆蓋了數據幀,而隨着無線技術的發展,愈來愈多的敏感信息(如基於位置的標識符以及快速傳播的信息)倒是經過管理幀來傳播的,因此安全保護也須要拓展到管理幀。
  • 802.11y:該標準的目標是對在與其餘用戶共享的美國3.65GHz3.7GHz頻段中802.11無線局域網通訊的機制進行標準化。

提示:讀者可從IEEE官方網站中下載802.11-2012標準PDF全文(下載地址爲http://standards.ieee.org/about/get/802/802.11.html),長達2793頁,包含並整理了從802.11a802.11z各個版本(包括abdeghijknprsuvwyz)所涉及的技術規範。

3.3  802.11無線網絡技術介紹

從本節開始,咱們將向讀者介紹802.11涉及到的無線網絡技術。首先要介紹的是OSI基本參考模型。

3.3.1  OSI基本參考模型及相關基本概念

1.  OSI/RM介紹

ISOInternational Organization for Standardization,國際標準化組織)和IECInternational Electrotechnical Commission國際電工技術委員會)於1983年聯合發佈了ISO/IEC 7498標準。該標準定義了著名的Open Systems Interconnection Reference Model(開放系統互聯參考模型,簡寫爲OSI/RM[5])。

在OSI/RM中,計算機網絡體系結構被劃分紅7層,其名稱和對應關係如圖3-1所示:

                               

3-1  OSI RMTCP/IP結構圖

3-1繪製了OSI/RM以及另一個經常使用的網絡體系TCP/IP的結構。先來看OSI/RM,它將網絡劃分紅7層,由上到下分別是[6]

  • Application Layer(應用層):應用層能與應用程序界面溝通以達到向用戶展現的目的。常見的協議有HTTPHTTPSFTPSMTP等。其數據單位爲APDUApplication Protocol Data Unit)。
  • Presentation Layer(表示層):表示層能爲不一樣客戶端提供數據和信息的語法轉換,使系統能解讀成正確的數據,同時它還能提供壓縮解壓、加密解密等服務。例如不一樣格式圖像(如GIFJPEGTIFF等)的顯示就是由位於表示層的協議來支持的。其數據單位爲PPDUPresentation Protocol Data Unit)。
  • Session Layer(會話層):會話層用於爲通訊雙方制定通訊方式,建立和註銷會話(雙方通訊)等。其數據單位爲SPDUSession Protocol Data Unit)。常見的協議有ZIPAppleTalkSCP等。
  • Transport Layer(傳輸層):傳輸層用於控制數據流量,同時能進行調試及錯誤處理,以確保通訊順利。發送端的傳輸層會爲數據分組加上序號,以方便接收端把分組重組爲有用的數據或文件。傳輸層的常見協議有TCPUDP等。其數據單位爲TPDUTransport Protocol Data Unit)。
  • Network Layer(網絡層):網絡層爲數據傳送的目的地尋址,而後再選擇一個傳送數據的最佳路線。網絡層數據的單位爲PacketDatagram。常見的設備有路由器等。常見協議有IPIPv6
  • Data Link Layer(數據鏈路層):在物理層提供比特流服務的基礎上,創建相鄰結點之間的數據鏈路。經過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸。數據鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的做用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等。數據鏈路層數據的單位爲Frame(幀)。常見的設備有二層交換機、網橋等。
  • Physical Layer(物理層):物理層定義了通訊設備機械、電氣、功能和過程等方面的特性,用以創建、維護和拆除物理鏈路鏈接。物理層數據的單位爲bit

3-1中左邊所示爲另一個經常使用的網絡體系,即TCP/IP模型。對比圖3-1中的兩個模型,咱們可簡單認爲TCP/IP ModelOSI/RM的一個簡化版本。

提示,關於OSI/RM的詳細信息,請讀者閱讀本章參考資料[5]

2.  LLCMAC子層介紹

雖然ISO/IEC 7498標準所定義的OSI/RM只將網絡劃分爲七層。但實際上每一層還可劃分爲多個子層(Sub Layer)。全部這些Sub Layer中,最爲人熟知的就是ISO/IEC 8802[7]規範劃分Data Link Layer而獲得的Logic Link Control Sub Layer(簡稱LLC)和Medium Acess Control Sub Layer(簡稱MAC)。它們的信息如圖3-2所示:

3-2  MACLLC SubLayer

3-2中,ISO/IEC 8802Data Link Layer劃分紅了兩個Sub Layer,其中:

  • MAC Sub LayerMedia Acess Control SubLayer:媒介訪問控制子層):該子層的目的是爲了解決局域網(Local Area Network,之後簡寫爲LAN)中共用信道的使用產生競爭時,如何分配信道的使用權問題。目前LAN中經常使用的媒介訪問控制方法是CSMA/CD(爭用型介質訪問控制)。因爲無線網絡的特殊性,MAC的控制方法略有不一樣。咱們將在下文介紹相關內容。
  • LLC Sub Layer(邏輯鏈路控制子層):該子層實現了兩個站點之間幀的交換,實現端到端(源到目的),無差錯的幀傳輸和應答功能及流量控制功能。

Data Link層劃分的這兩個子層中,802.11只涉及到MAC層。因爲物理介質的不一樣,無線和有線網絡使用的MAC方法有較大差異,主要區別以下[8]

  • 有線(wired)網絡最常使用的方法(此處僅考慮以太網)是CSMA/CDCarrier Sense Multiple Access/Collision Detect,載波監聽多路訪問/衝突檢測機制)。其主要工做原理是:工做站發送數據前先監聽信道是否空閒,若空閒則當即發送數據。而且工做站在發送數據時,邊發送邊繼續監聽。若監聽到衝突,則當即中止發送數據並等待一段隨機時間,而後再從新嘗試發送。
  • 無線網絡主要採用CSMA/CACarrier Sense Multiple Access/Collision Avoidance,譯爲載波監聽多路訪問/衝突避免機制)方法。無線網絡沒有采用衝突檢測方法的緣由是:若是要支持衝突檢測,必需要求無線設備能一邊接受數據信號一邊傳送數據信號,而這種設計對無線網絡設備來講性價比過低。另外,衝突檢測要求邊發送數據包邊監聽,一旦有衝突則中止發送。很顯然,這些因發送衝突而被中斷的數據發送將會浪費很多的傳輸資源。因此,802.11CSMA/CD基礎上進行了一些調整,從而獲得了CSMA/CA方法。其主要工做原理見下節內容。

值得指出的是:CSMA/CA協議信道利用率低於CSMA/CD協議信道利用率。信道利用率受傳輸距離和空曠程度的影響,當距離遠或者有障礙物影響時會存在隱藏終端問題,下降信道利用率。在802.11b WLAN中,在1Mb/s速率時最高信道利用率可到90%,而在11Mb/s時最高信道利用率只有65%左右。

3.  CSMA/CA介紹[8]

CSMA/CA主要使用兩種方法來避免碰撞:

  • 設備發送數據前,先監聽無線鏈路狀態是否空閒。爲了不發生衝突,當無線鏈路被其餘設備佔用時,設備會隨機爲每一幀選擇一段退避(backoff)時間。這樣就能減小衝突的發生。
  • RTS-CTS握手(handshake):設備發送幀前,先發送一個很小的RTSRequest to Send)幀給目標端,等待目標端迴應CTSClear to Send)幀後,纔開始傳送。此方式能夠確保接下來傳送數據時,其餘設備不會使用信道以免衝突。因爲RTS幀與CTS幀長度很小,使得總體開銷也較小。

下面咱們經過圖3-3來介紹RTSCTS的做用。

3-3  RTS/CTS原理

在圖3-3中:

  • 以工做站AB之間傳輸數據爲例,站B、站C、站E在站A 的無線信號覆蓋的範圍內,而站D不在其內。站A、站E、站D在站B的無線信號覆蓋的範圍內,但站C不在其內。
  • 若是站A要向站B發送數據,那麼,站A在發送數據幀以前,要先向站B發送一個請求發送幀RTSRequest To Send)。在RTS幀中會說明將要發送的數據幀的長度。站B收到RTS幀後就向站A迴應一個容許發送幀CTSClear To Send)。在CTS幀中也附上A欲發送的數據幀的長度(從RTS幀中將此數據複製到CTS幀中)。站A收到CTS幀後就可發送其數據幀了。

那麼怎麼保證其餘站不會干擾AB之間的數據傳輸呢?

  • 對於站C,站C處於站A的無線傳輸範圍內,但不在站B的無線傳輸範圍內。所以站C可以收聽到站A發送的RTS幀,但通過一小段時間後,站C收聽不到站B發送的CTS幀。這樣,在站A向站B發送數據的同時,站C也能夠發送本身的數據而不會干擾站B接收數據(注意:站C收聽不到站B的信號代表,站B也收不聽到站C的信號)
  • 對於站D,站D收聽不到站A發送的RTS幀,但能收聽到站B發送的CTS幀。所以,站D在收到站B發送的CTS幀後,應在站B隨後接收數據幀的時間內關閉數據發送操做,以免干擾站B接收自A站發來的數據。
  • 對於站E,它能收到RTS幀和CTS幀,所以,站E在站A發送數據幀的整個過程當中不能發送數據。

整體而言,使用RTSCTS幀會使整個網絡的效率有所降低。但因爲這兩種控制幀都很短(它們的長度分別爲2014字節)。而802.11數據幀則最長可達2346字節,相比之下的開銷並不算大。相反,若不使用這種控制幀,則一旦發生衝突而致使數據幀重發,則浪費的時間就更大。

另外,802.11提供了三種狀況供用戶選擇以處理:

  • 使用RTSCTS幀。
  • 當數據幀的長度超過某一數值時才使用RTSCTS幀。
  • 不使用RTSCTS幀。

儘管協議通過了精心設計,但衝突仍然會發生。例如:站B和站C同時向站A發送RTS幀。這兩個RTS幀發生衝突後,使得站A收不到正確的RTS幀於是站A就不會發送後續的CTS幀。這時,站B和站C像以太網發生衝突那樣,各自隨機地推遲一段時間後從新發送其RTS幀。

根據802.11協議,CSMA/CA具體運做時由所謂的協調功能(Coordination Function)來控制。協議規定有四種不一樣的協調功能,分別是分佈式協調功能(Distributed CF,簡稱DCF)、基於DCF之上的Point CFPoint CF,簡稱PCF)、混合型協調功能(Hybrid CF,簡稱HCF)以及用於Mesh網絡的(Mesh CF,簡稱MCF)。因爲無線網絡是共享介質,因此,協調功能的目的就是用於控制各個無線網絡設備使用無線媒介的時機以免衝突發生。形象點說,這就比如在一個會議室裏,全部人均可以發言,但若是多我的同時發言的話又不知道誰和誰在說話。因此,每一個打算髮言的人都須要檢查下當前發言的狀況。本章不擬詳細介紹802.11CF相關的內容。感興趣的讀者可閱讀802.11協議第9節「MAC sublayer functional description」。

另外,規範還定義了基於競爭的服務(contention-based service,使用DCF進行數據交換)和一種基於無競爭的服務(contention-free service,使用PCF進行數據交換)。本章也不擬討論它們。

4.  MACService及其餘概念介紹[5][9]

ISO/IEC 7498及相關的一些標準文檔除了對網絡體系進行了層次劃分外,還定義了層和層之間交互方式及其餘一些基本組件。它們可用圖3-4來表示:

3-4  MAC EntityServiceClients

3-4繪製了MAC層相關的組件及交互方式,其中:

  • 協議規定了每一層所提供的功能,這些功能統一用Service來表示。圖3-4中,MAC層爲上層提供MAC Service。從Java編程角度來看,就比如定義了一個名爲MACServiceJava Package
  • 每一層內部有數個EntityEntity表明封裝了一組功能的模塊。上面提到的Service就是由Entity提供的。根據OSI/RM的層次關係,第N層爲第N+1層提供服務。因此,圖3-4中,MAC Entity對上一層提供MAC Service。從Java編程角度來看,MAC Entity就比如MAC Service Package中定義的類,不一樣的Entity表明該Package中實現不一樣的功能類。一個Package中的Entity能夠相互調用以完成某個功能。
  • N+1層要使用第N層服務時,必須經由Service Acess Point來完成。圖3-3中,MACService必須藉由MAC Service Access Point(縮寫爲MSAP)來訪問。

根據上面的介紹,Entity定義了一個類,那其中是否認義了相應的功能函數呢?在標準文檔中,和功能函數對應的術語是primitives(譯爲原語)及它們的parameters(參數)。圖3-4列舉了MAC Service的兩個重要函數,分別是:

  • M_UNITDATA.requestClient調用該primitive發送數據。該primitive的參數是destination_address(目標地址)、source_address(源地址)、MSDUMAC Service Data Unit,即數據)、priority(優先級)。
  • M_UNITDATA.indication:當位於遠端機器的MAC層收到上面發送的數據後,將經過indication原語來通知上一層以處理該數據。

關於MAC層的服務詳細定義,請讀者閱讀本章3.3.5.1節。

值得指出的是,規範只是從邏輯上定義了上述內容,它並無指定具體的實現。關於MAC Service的詳細定義,讀者可閱讀本章參考資料[10],即ISO/IEC 15802-1

提醒:協議還定義了SDUPDU兩個概念。當上一層調用MACrequest原語時,會把要發送的數據傳給MAC層。這個數據被稱爲MAC Service Data Unit(簡寫爲MSDU)。對MAC層來講,MSDU其實就是MAC要發送的數據,即載荷(Payload)。MAC層處理Payload時還會封裝MAC層本身的一些頭信息。這些信息和MSDU共同構成了MAC層的Protocol Data Unit(簡寫爲MPDU)。從OSI/RM角度來看,通過N+1層封裝後的數據是(N+1-PDU。該數據傳遞給N層去處理時,對N層來講就是(N-SDUN層封裝這個SDU後就變成本身的(N-PDU了。

5.  MIB介紹[11]

在閱讀802.11相關規範時,常常會碰到MIB一詞,其全稱是Management Information Base(譯爲管理信息庫)。MIB是一個虛擬的數據庫,裏邊存儲了一些設備信息供查詢和修改。MIB較常見的使用之處是網管利用SNMP協議管理遠程主機、路由器等。

MIB內部採用樹形結構來管理其數據。內部的每個管理條目(Entry)經過一個叫object identifier(簡稱OID)來訪問。MIB定義了Entry的屬性和可取的值。因爲屬性及其可取值的定義採用了與具體編程語言無關的方式,因此一個MIB庫能夠很輕鬆經過編譯器(compiler)將其轉換成對應的編程語言源碼文件。

MIB的定義比較繁瑣,本章不擬拘泥於這些細節。讀者可閱讀參考資料[11]中所引用的資料列表以學習完整的MIB知識。

從筆者角度來看,對802.11來講,MIB就是定義了一組屬性。802.11定義的MIB屬性在http://www.ieee802.org/11/802.11mib.txt中。下載後將得一個名爲802.11mib.txt文件。讀者可經過JMIBBrowser工具(下載地址爲http://sourceforge.net/projects/jmibbrowser/,它是一個用Java語言編寫的可利用SNMP協議查看和設置指定設備MIB的小工具)去加載並查看其內容。如圖3-5所示:

3-5  802.11 MIB內容示意

讀者須要首先點擊圖3-5所示左下角的「Load MIB」按鈕以加載802.11mib.txt文件,而後查看802.11mib定義的一些屬性。由圖3-5可知:

  • 左側顯示當前查看的是dot11MACAddress的條目。
  • 右側顯示該條目的信息,Acess中的"read only"表示只讀。Description表示該條目的意義。

802.11mib定義了一個較全的屬性集合,通常而言,設備可能只支持其中一部分屬性。圖3-6所示爲筆者Note2wlan0設備的MIB信息截圖(因爲篇幅問題,圖3-6只包含部分Note2 wlan0設備的MIB屬性):

3-6 NOTE2 wlan0設備的MIB屬性示意

以圖3-6中第一條屬性dot11RSNAOptionImplemented爲例,其在802.11mib.txt的定義如圖3-7所示:

3-7  dot11RSNAOptionImplemented內容示意

相比直接瀏覽802.11mib.txt文本文件而言,利用JMIBBrowser工具查看屬性會更加方便和直觀一些。

提示:之後分析wpa_supplicant源碼時,會碰到802.11mib定義的屬性,讀者不妨在閱讀本節時就下載相關文件和工具程序。

6.  知識總結

本節首先對OSI/RM進行了簡單介紹,由此引出了MAC層的知識點。接着對802.11使用的MAC方法CSMA/CA進行了介紹。最後本節對MACService及其相關概念以及MIB進行了介紹。

提醒:以上內容涉及到的知識點是讀者之後閱讀802.11協議時必然會碰到的。因爲802.11協議引用的參考資料很是多,故筆者在本節整理了其中最基礎的知識點。請讀者務必認真閱讀本節內容。

 

3.3.2  802.11知識點介紹導讀

802.11規範全稱爲《Part 11Wireless LAN Medium Acess ControlMAC and Physical LayerPHY Specifications》。從其標題可知,802.11規範定義了無線局域網中MAC層和PHY層的技術標準。2012年版的802.11協議全文共2793頁,包含20個小節(clause),23個附錄(從AW)。圖3-8所示爲802.11協議原文目錄的一部分。

3-8  802.11協議原文目錄示意圖

由圖3-8所示目錄可知802.11協議內容很是豐富。讀者可嘗試去閱讀該文檔,但估計很快會發現這將是一件很是枯燥和使人頭疼的事情。主要緣由是此規範相似於手冊,它很是重視細節的精準,但各技術點先後邏輯上的連貫性較差,使得讀者極難從散落在協議中各個角落的技術點中整理出一個內容有序,難度由淺入深的核心知識框架來。

基於上述緣由,本章後續小節擬打算從如下幾個知識點向讀者介紹802.11規範中的一些核心內容:

  • 3.3.3節將介紹802.11中的物理組件和網絡結構。
  • 在物理組件和網絡結構基礎上,3.3.4節將介紹802.11爲無線網絡所定義的服務。這些服務對咱們從總體上理解無線網絡的功能有重要意義。
  • 3.3.5節將介紹802.11 MAC服務和幀方面的內容。這部分知識比較具體,相信讀者理解起來沒有問題。
  • 3.3.6節將介紹MAC層管理實體方面的內容。搞清楚這部份內容有助於讀者理解後續有關Linux Wi-Fi編程的知識。
  • 3.3.7節將爲讀者介紹802.11安全性方面的知識點。

因爲篇幅緣由,本書不可能囊括規範的全部內容。但相信讀者在理解本節內容的基礎上,可以輕鬆開展更加深刻的研究。另外,爲幫助讀者理解規範,本章會在重要知識點之處添加「規範閱讀提示」的內容。

提醒:因爲802.11物理層涉及大量和無線電、信號處理相關的知識。這些知識不只內容枯燥繁雜,並且對軟件工程師來講並沒有太大意義,故本章不擬介紹它們。願意深刻研究的讀者可閱讀相關資料。


 

[1]筆者博客地址爲blog.csdn.net/innost或者http://my.oschina.net/innost/blog

 

3.3.3  802.11組件介紹

本節介紹802.11規範中的物理組件和相關網絡結構。首先來看無線網絡中的物理組件。

1.  物理組件[12]

802.11無線網絡包含四種主要物理組件,如圖3-9所示:

3-9  802.11四大主要物理組件

3-9中定義了四個組件,它們分別是:

  • Wireless Medium(譯爲無線媒介):規範中縮寫爲WM。其本意指能傳送無線MAC幀數據的物理層。規範最先定義了射頻和紅外兩種物理層,但目前使用最多的是射頻物理層。
  • Station(譯爲工做站):規範中縮寫爲STA,其英文定義是「A logical entity that is a singly addressable instance of a MAC and PHY interface to the WM」。通俗點說,STA就是指攜帶有無線網絡接口卡(即無線網卡)的設備,例如筆記本、智能手機等。另外,無線網卡和有線網卡的MAC地址均分配自同一個地址池以確保其惟一性。。
  • Acess Point(譯爲接入點):規範中縮寫爲AP,其原文定義是「An entity that contains one STA and provides access to the distribution services, via the WM for associated STAs」。由其定義可知,AP自己也是一個STA,只不過它還能爲那些已經關聯的(associatedSTA提供分佈式服務(distribution services)。什麼是Distribution Services呢?請讀者閱讀下文。
  • Distribution system(譯爲分佈式系統):規範中縮寫爲DS,其英文定義爲「A system used to interconnect a set of basic service setsBSSsand integrated local area networksLANsto create an extended service setESS)」。DS的定義涉及到BSSESS等後文才介紹的無線網絡架構,其解釋見下文。

上述四個物理組件中最難解釋清楚的就是DS了。筆者在仔細閱讀規範後,感受其對DS的解釋並不直觀。此處將列舉一個常見的應用場景以幫助讀者理解:

通常家用無線路由器一端經過有線接入互聯網,另外一端經過天線提供無線網絡。當打開Android手機上的Wi-Fi功能,併成功鏈接到此無線路由器提供的無線網絡(假設其網絡名爲「TP-LINK_1F9C5E」,可在路由器中設置)時,咱們將獲得:

  • 路由器一端經過有線接入互聯網,故可認爲它整合(integrate)了LAN
  • 不論路由器是否接入有線網絡(即本例中的互聯網),手機(扮演STA的角色)和路由器(扮演AP的角色)之間創建了一個小的無線網絡。該無線網絡的覆蓋範圍由AP即路由器決定。這個小網絡就是一個BSS。另外,定義中說起的ESS是對BSS的擴展。一個ESS可包含一或多個BSS。在本例中,ESS對應的ID就是「TP-LINK_1F9C5E」,即咱們爲路由器設置的網絡名。

上述內容中將BSSLAN結合到一塊兒以構成一個ESS的「東西」就是DS。雖然規範中並未明示DS究竟是什麼,但絕大部分狀況下,DS是指有線網絡(經過它能夠接入互聯網)。後文咱們將介紹DS所提供的分佈式服務(即DSS)。如今對讀者來講,更重要的概念是其中和無線網絡架構相關的BSSESS等。這部份內容將在下節介紹。

規範閱讀提示:

1 上文介紹的APSTADS的定義都來自於802.113.1節。筆者我的以爲該節所列的定義是最精確的。以DS爲例,此節所定義的DS涉及到和有線網絡的結合。但規範中其餘關於DS的說明均未明示是否必定要和LAN結合。

2 關於STA,其定義只說明它是一個可singly addressable的實體,而沒有說明其對應的功能。因此,讀者會發現AP也是一個STA。另外還有提供QoSQuality of Service)的STA。除此以外,從可移動性的角度來看,還有Mobile STAPortable STA之分。Portable STA雖然能夠移動,但只在固定地點使用(例如AP就是一個典型的Portable STA)。而Mobile STA表示那些只要在Wi-Fi覆蓋範圍內,均可以使用的STA(例如手機、平板等設備)。

2.  無線網絡的構建[12]

有了上節所述的物理組件,如今就能夠搭建由它們構成的無線網絡了。802.11規範中,基本服務集(Basic Service Set,簡寫爲BSS)是整個無線網絡的基本構建組件(basic building block)。BSS如圖3-10所示:

3-10  BSS的兩種方式

由圖3-10可知,BSS有兩種類型,分別是:

  • Independent BSS(獨立型BSS):這種類型的BSS不須要AP參與。各STA之間可直接交互。這種網絡也叫ad-hoc BSS(通常譯爲自組網絡或對等網絡)。
  • Infrastructure BSS(基礎結構型BSS):全部STA之間的交互必須通過APAP是基礎結構型BSS的中控臺。這也是家庭或工做中最多見的網絡架構。在這種網絡中,一個STA必須完成諸如關聯、受權等步驟後才能加入某個BSS。注意,一個STA一次只能屬於一個BSS

提示:

1 Independent BSS縮寫爲IBSS。而Infrastructure BSS沒有對應的縮寫。不過,通常用BSS表明Infrastrucutre BSS

2 根據前文所述,AP也是一個STA。但此處STAAP顯然是兩個不一樣的設備。

由圖3-10BSS的結構可知,其網絡覆蓋範圍由該BSS中的AP決定。在某些狀況下,須要幾個BSS聯合工做以構建一個覆蓋面更大的網絡,這就是一個ESSExtended Service Set:擴展服務集)。如圖3-11所示:

3-11  ESS示意圖

ESS在規範中的定義是「A set of one or one interconnected BSSs that appears as a single BSS to the LLC layer at any STA associated with one of those BSSs」。此定義包含幾個關鍵點:

  • 一個ESS包含一到多個BSS。如圖3-11中所示的BSS1BSS2
  • BSS1BSS2原本各自組成了本身的小網絡。但在ESS結構中,它們在邏輯上又構成了一個更大的BSS。這意味着最初在BSS2中使用的STA4(利用STA3,即BSS2中的AP上網)能跑到BSS1的範圍內利用它的AP(即STA2)上網而不用作任何無線網絡切換之類的操做。此場景在手機通訊領域很常見。例如在移動的汽車上打電話。此時手機就會根據狀況在物理位置不一樣的基站間切換語音數據傳輸而不影響通話。

注意ESS中的BSS擁有相同的SSIDService Set Identification,詳細內容見下文),而且彼此之間協同工做。這和目前隨着Wi-Fi技術的推廣,家庭和工做環境中存在多個無線網絡(即存在多個ESS)的狀況有本質不一樣。在多個ESS狀況下,用戶必須手動選擇才能切換到不一樣的ESS。因爲筆者平常工做和生活中,ESS只包含一個BSS,當某個AP停機時,筆者就得手動切換到其餘無線網絡中去了。

另外,切換相關的知識點屬於Roaming(漫遊)範疇,讀者可閱讀「Secure Roaming in 802.11 Networks」一書來了解相關細節。

上述網絡都有所謂的Identification,它們分別是:

  • BSSID:每個BSS都有本身的惟一編號,稱爲BSS Identification。在基礎結構型網絡中,BSSID就是APMAC地址,該MAC地址是真實的地址。IBSS中,其BSSID也是一個MAC地址,不過這個MAC地址是隨機生成的。
  • SSIDService Set Identification。通常而言,BSSID會和一個SSID關聯。BSSIDMAC地址,而SSID就是網絡名。網絡名每每是一個可讀字符串,由於網絡名比MAC地址更方便人們記憶。
  • ESS包括一到多個BSS,而它對外看起來就像一個BSS。因此,對ESS的編號就由SSID來表達。只要設置其內部BSSSSID爲同一個名稱便可。通常狀況下,ESSSSID就是其網絡名(network name)。

規範閱讀提示:

1 上述網絡結構中,並未說起如何與有線網絡(即LAN)的整合。規範中其實還定義了一個名爲portal的邏輯模塊(logical component)用於將WLANWireless LAN)和LAN結合起來。因爲WLANLAN使用的MAC幀格式不一樣,因此直白得說,portal的功能相似翻譯,它在WLANLAN間轉換MAC幀數據。目前,portal的功能由AP實現。

2 規範中還定義了QoS BSS。這主要爲了在WLAN中支持那些對QoS有要求的程序。因爲無線網絡自己固有的特性,WLAN中的QoS實現比較複雜,效果也不如LAN中的QoS。初學者可先不接觸這部份內容。

==============================================================================================略略略略略略略略略略略略略略===================================

3.4  Linux Wi-Fi編程API介紹

前面小節一直在介紹Wi-Fi規範方面的內容。從本節開始,咱們將向讀者介紹Linux平臺中Wi-Fi編程方面的知識。

提醒:相比前文而言,本節內容讀起來將顯得較爲輕鬆。但從筆者我的經驗來講,編程只不過是規範的某種實現,掌握規範纔是理解無線網絡技術的核心。這也是本書內容組織和編排的指導原則。但願讀者能認真體會。

Linux平臺上目前經常使用的專門針對無線網絡設備編程的API有兩套[40]

  • 最先的一套APIHP公司員工Jean Tourrilhes1997年開發,全稱爲Linux Wireless Extensions。通常縮寫爲wexwext。這套API使得用戶空間的程序能經過ioctl函數來控制無線網卡驅動。
  • 因爲利用ioctl開展編程的方式不太符合Linux驅動開發的要求,因此後來Linux又提供了cfg80211nl80211兩套編程接口用於替代wext。其中,cfg80211用於驅動開發,而nl80211 API供用戶空間進程使用以操做那些利用cfg80211 API開發的無線網卡驅動。

注意:ioctl不符合Linux驅動開發要求主要體如今:

1 ioctl的原型爲int ioctl(int fd, unsigned long cmd, ...),最後三個點表明它支持可變個數的參數。但對於一個通過嚴格定義的系統調用來講,支持可變個數參數的作法彷佛顯得有些隨性。

2 ioctl的參數不只個數不固定,其參數類型也沒法經過函數原型來加以說明。這一樣對於一個嚴謹的系統調用來講,也是不可接受的。

本節將重點介紹用戶空間中的Wi-Fi APIwextnl80211。不過在介紹它們以前,筆者先請讀者思考這樣一個問題:

爲何Wi-Fi須要在用戶空間進行編程呢?

答案:

目前的無線網卡分爲兩種,一種爲SoftMAC。這類網卡中,MLME的處理基本上在軟件層(即驅動或用戶空間),這樣可帶來較大的靈活性。另外,一些認證相關的操做,也可由軟件來控制。另外一種網卡稱之爲FullMAC。這類網卡的MLME全在硬件處理。相比SoftMAC而言,其靈活性很小。因此目前市面上SoftMAC網卡佔絕大多數,而cfg80211就僅支持SoftMAC類型的網卡。

3.4.1  Linux Wireless Extensions介紹

從開發者角度來講,wext的用法至關簡單。Linux平臺中,wext API定義於wireless.h文件。Android平臺上,其文件位置在external/kernel-headers/original/linux目錄下,主要供驅動開發者使用。

注意,bionic/libc/kernel/common/linux目錄中也有一個wireless.h,不過此文件由工具程序根據kernel中的wireless.h自動生成而來,供用戶空間使用。兩個文件的區別主要是bionic下的wireless.h包含不多的註釋。因此本節將分析kernel中的wireless.hAndroid 4.2中的wext版本爲20,由wireless.h中的宏WIRELESS_EXT定義。

雖然前面提到說ioctl函數的一個缺點是其沒有指明參數類型,但wext卻比較嚴謹,它提供了本身的數據類型。

1.  經常使用數據結構介紹

首先,全部用戶空間發起的請求都統一包括在struct iwreq中,其原型以下:

[-->wireless.h::struct iwreq]

//wext API在設計時參考了系統中現有數據結構及命名方式。作爲區分,wext中幾乎全部數據結構、類型、宏

//等名字中都帶一個w以表明wireless。以下面的iwreq結構體,其對應的普通數據結構類型是ifreq。

//該結構體專門用於往socket句柄傳遞ioctrl控制參數。

struct    iwreq

{

    union

    {

        char    ifrn_name[IFNAMSIZ];    //用於指定要操做的網卡設備名,如wlan0

    } ifr_ifrn;

    union    iwreq_data    u; //用於存儲具體的參數信息

};

iwreq結構所示,具體的參數信息存儲在另一個聯合體iwreq_data中,其原型以下:

[-->wireless.h::union:iwreq_data]

/*

   iwreq_data是一個聯合體,其最大size爲16字節

   wext還自定義了一些小的數據結構,如iw_point、iw_param、iw_freq等。它們的做用是:

   1 iw_point:當參數信息的長度超過16字節時,就只能經過iw_point指向另一塊內存區域,而參數就存儲

     在那個區域中。這個就是咱們經常使用的指針方式。

   2 iw_param:當參數信息不超過16字節時,能夠把信息存儲在iw_param中。

   3 iw_freq:用於存儲頻率或信道值。其原型的介紹見本小節最後。

union    iwreq_data

{

    char        name[IFNAMSIZ];

    struct iw_point    essid;    //存儲essid,也就是ssid

    struct iw_param    nwid;     //network id

    //頻率或信道。取值爲0-1000時表明channel,大於1000則表明頻率,單位爲Hz

    struct iw_freq    freq;

    struct iw_param    sens;        //信號強度閾值

    struct iw_param    bitrate;    //碼率

    struct iw_param    txpower;    

    struct iw_param    rts;        //RTS閾值時間

    struct iw_param    frag;       

    __u32        mode;        //操做模式

    struct iw_param    retry;

    struct iw_point    encoding;

    struct iw_param    power;

    struct iw_quality qual;

 

    struct sockaddr    ap_addr;    //AP地址

    struct sockaddr    addr;        //目標地址

 

    struct iw_param    param;  //其餘參數

    struct iw_point    data;   //其餘字節數超過16的參數

};

當參數字節超過16的時候,wext還定義了和功能相關的參數類型,下面來看專門用於觸發無線網卡發起掃描請求的數據結構iw_scan_req,其原型以下所示:

[-->wireless.h::struct iw_scan_req]

struct    iw_scan_req

{

    __u8        scan_type; //可取值爲IW_SCAN_TYPE_{ACTIVE,PASSIVE},表明主動或被動掃描

    __u8        essid_len; //essid字符串長度

    __u8        num_channels; // 指明信道個數,若是爲0,則表示掃描全部可容許的信道

    __u8        flags; //目前僅用於字節對齊

    //bssid用於指明BSS的地址。若是全爲FF則爲廣播BSSID,即wildcard bssid

    struct sockaddr    bssid;

 

    __u8        essid[IW_ESSID_MAX_SIZE];    //essid

 

    /*

      min_channel_time:指示掃描過程當中在每一個信道等待到第一個回覆的時間。若是在此時間內沒有等到回覆,

      則跳到下一個信道去等待。若是等到一個回覆的話,則一共在該信道等待的最大時間爲max_channel_time。

      全部時間單位均爲TU(Time Units),即1024ms

     */

    __u32        min_channel_time;

    __u32        max_channel_time;

 

    struct iw_freq    channel_list[IW_MAX_FREQUENCIES];//IW_MAX_FREQUENCIES值爲32

};

下面來看最後一個常見的數據結構iw_freq,其原型以下:

[-->wireless.h::struct:iw_freq]

//當頻率小於109,m直接等於頻率。不然m=f/(10e)

struct    iw_freq

{

    __s32        m;       

    __s16        e;       

    __u8        i;        //該值表示此頻率對象在channel_list數組中的索引

    __u8        flags;   //固定或自動

};

wext中的數據結構和定義還有許多。建議讀者結合實際須要去學習wireless.h

提醒:wext API雖然簡單,但相信讀者已經體會到其背後所依賴的和802.11規範密切相關的理論知識了。

下面咱們經過一個實際的例子來看看用戶空間如何經過wext API來觸發無線網卡掃描工做的。

2.  wext API使用實例介紹

本例來源於wpa_supplicant,它是一個運行於用戶空間的專門和無線網卡進行交互的程序。其詳情將在下一章節進行介紹。本節僅經過一個函數看看wpa_supplicant如何利用wext API和無線網卡交互。

[-->driver_wext.c:wpa_driver_wext_scan]

int wpa_driver_wext_scan(void *priv, struct wpa_driver_scan_params *params)

{

    struct wpa_driver_wext_data *drv = priv;

 

    struct iwreq iwr;  //定義一個iwreq對象

    int ret = 0, timeout;

    struct iw_scan_req req; //定義一個iw_scan_req對象

 

   //獲取調用者傳遞的ssid等參數

    const u8 *ssid = params->ssids[0].ssid;

    size_t ssid_len = params->ssids[0].ssid_len;

   ......

    os_memset(&iwr, 0, sizeof(iwr));

    //爲iwr的ifr_name傳遞需操做的網卡設備名

    os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);

 

    if (ssid && ssid_len) {

        os_memset(&req, 0, sizeof(req));

        //設置iw_scan_req的信息

        req.essid_len = ssid_len;

        req.bssid.sa_family = ARPHRD_ETHER;

        //設置bssid的MAC地址全爲0XFF,表明這是一個wildcard BSSID搜索

        os_memset(req.bssid.sa_data, 0xff, ETH_ALEN);

        os_memcpy(req.essid, ssid, ssid_len);

        //經過data域指向這個iw_sca_req對象

        iwr.u.data.pointer = (caddr_t) &req;

        iwr.u.data.length = sizeof(req);

        //IW_SCAN_THIS_ESSID表示只掃描指定ESSID的無線網絡

        iwr.u.data.flags = IW_SCAN_THIS_ESSID;

    }

    /*

        ioctl_sock指向一個socket句柄,其建立時候的代碼以下:

        ioctl_sock = socket(PF_INET,SOCK_DGRAM,0)

        SIOCSIWSCAN用於通知驅動進行無線網絡掃描

    */

    if (ioctl(drv->ioctl_sock, SIOCSIWSCAN, &iwr) < 0) {

        //返回錯誤

     }

    ......//其餘處理

    return ret;

}

3.  wext知識總結

wext相對比較簡單,但其內部的數據結構定義、變量命名等都和規範中定義的原語有着莫大的關係。建議讀者結合規範去閱讀wireless.h以加深理解。

 

==============================================================================================略略略略略略略略略略略略略略===================================

 

 

3.5  本章總結和參考資料說明

3.5.1  本章總結

本章是全書關於Wi-Fi技術方面的一篇基礎文章,涉及的面很廣,內容也很雜,須要讀者耐心閱讀並理解。從大致上來講,本章按以下邏輯開展:

  • 首先簡單介紹了無線頻譜資源和802.11發展歷程。
  • 爲了幫助讀者之後能真正看懂802.11規範,本章介紹了OSI/RM模型以及其中關於EntitySAPMIB等基本概念。
  • 接着咱們正式介紹802.11規範中的一些重要內容,包括無線網絡組件,網絡結構、無線網絡提供的服務等。
  • 在上述基礎上,咱們着重對802.11 MAC層進行了介紹,包括MAC幀格式、MLME等。這部份內容是理解後續章節關於wpa_supplicant介紹的核心。
  • 最後一個關於802.11的知識點是其安全性問題。建議讀者從機密性、完整性和身份驗證三個考察點來理解其中的各類安全保護方法。
  • 本章最後對Linux Wi-Fi API進行了介紹,目前用得最多的應該是nl80211。不過讀者可先從簡單的wext開始學習。

本章是筆者從事Android寫做以來耗時最長的一篇文章了(包括學習時間一共長達3個多月,並且還有不少技術點未能覆蓋到)。在這個過程當中,筆者也經歷過煩惱和痛苦,感受其難度比純粹的代碼分析要大得多。這也是筆者但願讀者把注意力放到代碼背後的理論上來的初衷。

另外,從下一章開始,咱們將在分析wpa_supplicant的同時,經過背景知識介紹的方式來補充本節沒有涵蓋的內容。

3.5.2  參考資料說明

概述

[1]  Real 802.11 Security: Wi-Fi Protected Access and 802.11i 7.1節「Relationship Between Wi-Fi and IEEE 802.11

本書是筆者找到的關於802.11無線網絡安全技術方面知識面最完整的書籍。惋惜是英文版,並須要有Wi-Fi的基礎知識後才能真正理解。

無線電頻譜知識

[2]  802.11無線網絡權威指南(第二版)「無線網絡導論」一節,P16-P17,「無線電頻譜:關鍵資源」。

此書是目前市面上關於802.11無線網絡書籍的聖經。不過其排版奇特,連章節號都沒有,讀起來着實有些費勁。讀者可首先閱讀這本書以對Wi-Fi有個基本瞭解。另外,該書涉及到和物理層有關的內容能夠略去不讀。

[3]  802.11無線網絡權威指南(第二版)「無線網絡導論」一節,P20-P22

[4]  http://baike.baidu.com/view/345218.htm 

摘抄自百度百科詞條「802.11」。筆者對其內容作了必要的增刪改。

OSI基本參考模型及相關基本概念

[5]  ISO/IEC 7498-1 Basic Reference ModelThe Basic Model

OSI模型的官方文檔,不過和其餘官方文檔同樣,極難理清楚其間的邏輯關係,作手冊用還能夠。

[6]  http://baike.baidu.com/view/486949.htm

百度百科詞條「開放系統互連參考模型」。

[7]  ISO/IEC 8802-2 Part 2 Logical Link Control

Logical Link Control層的官方標準。不過讀者只需閱讀第一節「Overview」便可。

CSMA/CA介紹

[8]  http://baike.baidu.com/view/645723.htm

百度百科詞條「CSMA/CA」,以很是通俗的方式解釋了CSMA/CA的工做原理。除非特別須要,讀者也可參考「802.11無線網絡權威指南(第二版)」一書第三章「802.11 MAC基礎」,P47-P55

MACService及其餘概念介紹

[9]  IEEE 802.1X-2010 Port-Based Network Access Control」,Annex D Basic architectural concepts and terms

大名鼎鼎的802.1X規範。不過這些規範引用的其餘標準很是多,因此802.1X在附錄D中對一些基本概念和術語進行了一番介紹。建議讀者閱讀此文檔。

[10]  http://www.doc88.com/p-696270935777.html

SO/IEC 15802-1電子文檔,由doc88提供。全名爲「Part 1 Medium Access ControlMAC service definition」。定義了MAC service和相關的原語。

MIB介紹

[11]  http://en.wikipedia.org/wiki/Management_information_base

維基百科詞條「Management Information Base」,英文介紹,還算比較好理解。

802.11組件介紹

[12]  802.11-20124.1節「General description of the architecture」、4.2節「How WLAN systems are different」、4.3節「Components of the IEEE 802.11 architecture

802.11 Service介紹

[13]  802.11-20124.5節「Overview of the Services」。

注意,802.11-20124節「General description」很是重要,裏邊的許多基本概念都須要瞭解。注意,該節包括的內容很是多,讀者應有選擇的閱讀。

802.11 MAC服務和幀介紹

[14]  802.11-20125節「MAC service definition

802.11 MAC服務進行了完整說明。

[15]  802.11-20128節「Frame formats

802.11 MAC幀完整說明。固然,讀者可把它當作手冊來用。

[16]  http://technet.microsoft.com/en-us/library/cc757419(v=ws.10).aspx

微軟技術文章「How 802.11 Wireless Works」。很是通俗易懂,包含的知識面也比較全。讀者可經過它對802.11有一個大體的認識。

[17]  802.11無線網絡權威指南(第二版)第四章「802.11成幀細節」,P78-P127

[18]  802.11無線網絡權威指南(第二版)第八章「管理操做」中的「節省電力」,P200-P208

很是詳細得介紹了Power Save的原理和過程。

[19]  802.3-2008CSMA/CD Access Method and Physical Layer Specifications」第3.2.3節「Address fields

LANMAC層的官方文檔。其中有對MAC地址格式的說明。

[20]  http://www.doc88.com/p-905531556977.html

doc88上關於MAC組播地址的中文說明。建議讀者閱讀此文檔。

[21]  802.11無線網絡權威指南(第二版)第三章「802.11 MAC幀基礎」中的「802.11對上層協議的封裝」,P65-P66

802.11 MAC管理實體介紹

[22]  802.11-20126節「Layer management

MLME的官方說明,很是詳細。請讀者當手冊使用。

[23]  802.11無線網絡權威指南(第二版)第八章「管理操做」,P182-P224

邏輯還算清晰,建議讀者結合[22]一塊兒閱讀。

[24]  802.11-20124.10節「IEEE Std 802.11 and IEEE Std 802.1X-2004

介紹802.1X如何與802.11相結合。

WEP介紹

[25]  802.11無線網絡權威指南(第二版)第五章「有線等效加密」,P127-P142

關於WEP的詳細介紹。但有些內容用得很是少(例如關於動態WEP密匙的說明)。

[26]  802.11-201211.2.2節「Wired equivalent privacy (WEP)

官方對WEP的說明,很是詳細。

[27]  802.11-201211.2.3節「Pre-RSNA authentication

官方對WEP中身份驗證方法的說明。

[28]  http://documentation.netgear.com/reference/ita/wireless/pdfs/FullManual.pdf

Wireless Networking Basics」,Netgear貴公司提供的關於Wi-Fi安全方面的一些簡單介紹。

RSN數據加密及完整性校驗介紹

[29]  802.11-201211.4節「RSNA confidentiality and integrity protocols

官方文檔關於TKIPCCMP的介紹。

[30]  802.11無線網絡權威指南(第二版)第七章「802.11RSNTKIPCCMP」,P162-P176

請讀者結合[29]一塊兒研究。

EAP802.1X介紹

[31]  RFC3748 Extensible Authentication Protocol (EAP)

EAP的官方文檔,總長68頁,難度不是特別大,建議讀者閱讀全文。

[32]  http://en.wikipedia.org/wiki/IEEE_802.1X

維基百科詞條「IEEE 802.1X」。圖文並茂,讀者可仔細閱讀此文。

[33]  802.11無線網絡權威指南(第二版)第六章「802.1X 用戶身份驗證」,P142-P154

[34]  http://www.h3c.com.cn/Products___Technology/Technology/Security_Encrypt/Other_technology/Technology_recommend/200812/624138_30003_0.htm

H3C公司關於802.1X的介紹,很是詳細,難度較小。讀者可先閱讀此文檔。

[35]  802.1X-201011節「EAPOL PDUs

官方對EAPOL格式的詳細說明。

RSNA介紹

[36]  http://www.docin.com/p-439759696.html

「一種針對RSNA無線網絡的安全等級回滾攻擊研究」,來自豆丁網。3頁內容,比較容易理解。

[37]  Real 802.11 Security: Wi-Fi Protected Access and 802.11i,第7章「WPA, RSN, and IEEE 802.11i」和第9章」WPA and RSN Key Hierarchy

此書是目前筆者找到的關於Wi-Fi安全性方面覆蓋面最齊全的資料。建議讀者深刻閱讀。

[38]  802.11-201211.6節「Keys and key distribution

官方文檔關於密匙派生的說明。

[39]  802.11無線網絡權威指南(第二版)第七章「802.11RSNTKIPCCMP」,P176-P182

介紹了RSN的運做方式,對密匙派生和緩存有較爲詳細的說明。

Linux Wi-Fi編程API介紹

[40]  http://wireless.kernel.org/en/developers/Documentation/Wireless-Extensions

Linux Wireless Kernel官方網站,內容很是豐富。建議讀者仔細閱讀。

netlink編程介紹

[41]  http://www.infradead.org/~tgr/libnl/

libnl官方網站,文檔較爲豐富。讀者可閱讀其中關於libnl的文檔。

相關文章
相關標籤/搜索