WiFi學習知識點整理
WiFi
Wi-Fi(Wireless Fidelity)是一個無線網路通訊技術的品牌,由Wi-Fi聯盟(Wi-Fi Alliance,WFA)擁有。WFA專門負責Wi-Fi認證與商標授權工作。嚴格地說,Wi-Fi是一個認證的名稱,該認證用於測試無線網路裝置是否符合 IEEE 802.11 系列協議的規範。通過該認證的裝置將被授予一個名為Wi-Fi CERTIFIED的商標。不過,隨著獲得Wi-Fi認證的裝置普及,人們也就習以為常得稱無線網路為Wi-Fi網路了。
IEEE 802
又稱為LMSC(LAN /MAN Standards Committee, 區域網/都會網路標準委員會),致力於研究區域網和都會網路的物理層和MAC層中定義的服務和協議,對應OSI網路參考模型的最低兩層(即物理層和資料鏈路層)。
於工作量較大,該委員會被細分成多個工作組(Working Group),每個工作組負責解決某個特定方面問題的標準。工作組也會被賦予一個編號(位於802編號的後面,中間用點號隔開)。
IEEE 802.11
802.11代表802專案的第11個工作組 ,專門負責制訂無線區域網(Wireless LAN)的介質訪問控制協議(Medium Access Control,MAC)及物理層(Physical Layer,PHY)技術規範。
和工作組劃分類似,工作組內部還會細分為多個任務組(Task Group,TG),任務是修改、更新標準的某個特定方面。TG的編號為英文字母,如a、b、c等。
典型的有:
IEEE 802.11b
IEEE 802.11四種主要物理元件
- 工作站(Station)
構建網路的主要目的是為了在工作站間傳送資料。所謂工作站,是指配備無線網路介面的計算裝置(也就是配有無線網絡卡的計算裝置)。 - 接入點(Access Point)
802.11網路所使用的幀必須經過轉換,方能被傳遞至其他不同型別的網路。具備無線至有線的橋接功能的裝置稱為接入點,接入點的功能不僅於此,但橋接最為重要。 - 無線媒介(Wireless Medium)
802.11標準以無線媒介在工作站之間傳遞幀。其所定義的物理層不只是一種,802.11最初標準化了兩種射頻物理層以及一種紅外線物理層。 - 分散式系統(Distribution System)
當幾個接入點串聯以覆蓋較大區域時,彼此之間必須相互通訊以掌握移動式工作站的行蹤。分散式系統屬於802.11的邏輯元件,負責將幀轉送至目的地。
WiFi晶片
傳統的在手機、平板等產品中常見的那種WiFi晶片主要來自國外的博通、高通、Marvell和我國臺灣MTK等廠商。手機上的WiFi晶片只負責連線和傳輸訊號,對RF訊號的處理和TCP/IP 傳輸協議的解析則交給效能強大的AP端。
》》海華科技(AzureWave)
》》總部:臺灣
》》主營:提供Wi-Fi、Bluetooth、3G、GPS、DTV、Digital Camera 等模組產品的創新研發,可廣泛應用於消費性電子產品、嵌入式系統、手持式裝置、行動連網產品、家電產品及工業用裝置等領域。
》》【WiFi模組主控晶片】:Marvell、博通、高通Atheros、MTK雷凌
Android WiFi系統架構
Android平臺中WIFI系統從上到下主要包括java框架類、Android介面卡庫、wpa_supplicant守護程序、驅動程式和協議,結構如下圖:
Android WiFi核心程序互動
Android WIfi 核心程式碼目錄
WPA簡介
WPA全名為Wi-Fi Protected Access,中文含義為“WiFi網路安全存取”,有WPA和WPA2兩個標準,是一種保護無線裝置網路(Wi-Fi)安全的系統,它是應研究者在前一代的系統有線等效加密(WEP)中找到的幾個嚴重的弱點而產生的。WPA是一種基於標準的可互操作的WLAN安全性增強解決方案,可大大增強現有以及未來無線區域網絡的資料保護和訪問控制水平。
wpa_supplicant簡介
-
wpa_supplicant是一個開源專案,已經被移植到Linux,Windows以及很多嵌入式系統上。它是WPA的應用層認證客戶端,負責完成認證相關的登入、加密等工作。
-
wpa_supplicant是一個獨立執行的守護程序,其核心是一個訊息迴圈,在訊息迴圈中處理WPA狀態機、控制命令、驅動事件、配置資訊等。
-
經過編譯後 的 wpa_supplicant源程式可以看到兩個主要的可執行工具:wpa_supplicant 和 wpa_cli。wpa_supplicant是核心程式,它和wpa_cli的關係就是服務和客戶端的關係:後臺執行wpa_supplicant,使用wpa_cli來搜尋、設定、和連線網路。
-
Android使用一個修改版wpa_supplicant作為daemon來控制WIFI,它是一個安全中介軟體,為各種無線網絡卡提供統一的安全機制,wpa_supplicant是通過socket與hardware/libhardware_legacy/wifi/wifi.c通訊
wpa_supplicant軟體內容
原始碼目錄:android/external/wpa_supplicant_8
目錄下還包含四個子資料夾:
- hostapd :hostapd能夠使得無線網絡卡切換為master模式,模擬AP(通常可以認為是路由器)功能,也就是我們說的軟AP(Soft AP)。Hostapd的功能就是作為AP的認證伺服器,負責控制管理stations(通常可以認為帶無線網絡卡的PC)的接入和認證。
- hs20 :Hotspot 2.0(HS 2.0)由WiFi聯盟和無線寬頻聯盟開發,旨在實現行動網路和WiFi網路之間的無縫流量切換,它不需要額外的使用者註冊和驗證。其實Hotspot 2.0只是802.11u標準中的一個子項功能——即利用802.11u提供無縫的自動WiFi身份識別和切換,這一個新興的協議將可幫使用者省去了連線到WiFi網路和服務的麻煩和乏味的過程。Hotspot 2.0的出現,意味著我們將可以自動由3G、4G切換到WiFi網路,使用者將不用手動發現熱點、輸入身份驗證來獲得WiFi。而且從一個網路切換到另一個網路的時候都不會間斷, 使用者甚至感覺不到。這種無縫認證和交接以及空中傳送的安全性,將使得WiFi有如蜂窩網路那般易於使用,並提供一致的使用者體驗與新增加的WiFi網路速度上的優勢,你根本感受不到自己某刻正在連線的是WiFi還是3G網路。
- wpa_supplicant:是Android使用者空間中無線網路部分的核心模組,所有Framework層中和
Wi-Fi相關的操作最終都將藉由wpa_supplicant來完成。 - src :包含了一些通用的資料結構和處理方法.其他三個目錄均有可能使用到。
wpa_supplicant架構
wpa_supplicant 啟動引數
usage:
wpa_supplicant [-BddhKLqqtvW] [-P<pid file>] [-g<global ctrl>] \
[-G<group>] \
-i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \
[-b<br_ifname>] [-e<entropy file>] \
[-o<override driver>] [-O<override ctrl>] \
[-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \
[-m<P2P Device config file>] \
[-p<driver_param>] [-b<br_ifname>] [-I<config file>] ...]
drivers:
nl80211 = Linux nl80211/cfg80211
options:
-b = optional bridge interface name
-B = run daemon in the background
-c = Configuration file
-C = ctrl_interface parameter (only used if -c is not)
-d = increase debugging verbosity (-dd even more)
-D = driver name (can be multiple drivers: nl80211,wext)
-e = entropy file
-g = global ctrl_interface
-G = global ctrl_interface group
-h = show this help text
-i = interface name
-I = additional configuration file
-K = include keys (passwords, etc.) in debug output
-L = show license (BSD)
-m = Configuration file for the P2P Device interface
-N = start describing new interface
-o = override driver parameter for new interfaces
-O = override ctrl_interface parameter for new interfaces
-p = driver parameters
-P = PID file
-q = decrease debugging verbosity (-qq even less)
-t = include timestamp in debug messages
-v = show version
-W = wait for a control interface monitor before starting
example:
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf
wpa_supplicant 啟動流程
wpa_supplicant 初始化
wpa_cli
- 連線上某個網絡卡的wpa_supplicant服務
- 搜尋網路並列出結果
- 新增一個網路
- 配置一個網路,並儲存配置
- 檢視儲存的網路並切換到一個已儲存的網路
- 斷開該網絡卡的網路
參考:
wpa_cli使用方法
WIFI適配層
裡面定義很多字串變數和適配層的介面實現,是對wpa_supplicant程式通訊的介面封裝,用來完成上層和wpa_supplicant的通訊, 標頭檔案在libhardware/include/hardware下,這裡的函式用來向JNI的本地實現提供呼叫介面。
這裡的函式,我把它們分為四類函式:
- 命令相關的(控制)函式,就是在JNI層android_XXX_Command()函式所呼叫 的Wifi_Command()函式,呼叫流程如下:
android_XXX_command()=>docommand()=>wifi_command()=>wifi_send_command()=>wpa_ctrl_require()。 - 監聽函式,即Wifi_wait_for_event()函式,呼叫流程如下:android_net_wifi_Waitforevent()=>wifi_wait_for_event()=>wpa_ctrl_recv()。
- WPA_SUPPLICANT的啟動,連線,關閉函式
- 驅動的載入和解除安裝函式
Android啟動WiFi流程
參考資料:
<< 深入理解Android:WiFi模組+NFC和GPS卷>>
wifi技術從瞭解到熟悉
WiFi晶片廠商
Hostapd簡介
Hotspot 2.0是什麼?
WIFI系統架構