標籤:android style blog http color 使用 os io
本章主要內容:
- 介紹Wi-Fi P2P相關知識;
- 介紹Android中WifiP2pService、wpa_supplicant的相關代碼。
7.1 概述
承接第6章介紹的WSC,本章將繼續介紹Wi-Fi Alliance(Wi-Fi聯盟)推出的另外一項重要技術規範Wi-Fi P2P。該規範的商品名為Wi-Fi Direct,它支援多個Wi-Fi裝置在沒有AP的情況下相互串連。
在Android平台的Wi-Fi相關模組中,P2P的功能點主要集中在:
- Android Framework中的WifiP2pService,其功能和WifiService類似,用於處理和P2P相關的工作。
- wpa_supplicant中的P2P模組。
和WSC一樣,本章的分析擬採用如下方法:
- 首先將介紹P2P所涉及的基礎知識。
- 然後再分析和P2P相關的模組,包括Settings、WifiP2pService以及WPAS。
下面,先來認識一下P2P。
7.2 P2P基礎知識介紹
WFA定義的P2P協議文檔全名為“Wi-Fi Peer-to-Peer(P2P) Technical Specification”,目前的版本為1.1,全長160頁。P2P技術使得多個Wi-Fi裝置在沒有AP的情況下也能構成一個網路(P2P Network,也被稱之為P2P Group)並相互連信。
Wi-Fi P2P技術是Wi-Fi Display(也稱之為Miracast,詳情請參考作者的一篇博文http://blog.csdn.net/innost/article/details/8474683)的基礎。在Miracast應用情境中,一台支援P2P的智能手機可直接連接上一台支援P2P的智能電視,智能手機隨後將自己的螢幕,或者媒體資源傳送給電視機去顯示或播放。顯然,藉助P2P技術,Wi-Fi裝置之間的直接相連將極大拓展Wi-Fi技術的使用情境。
注意:根據筆者自己的判斷,隨著支援越來越多的裝置支援P2P和Miracast,智能終端裝置之間的多屏共用和互動功能將很快得以實現。另外,恰逢本章撰寫之際,Google發布了Android 4.3。在這次發布盛會上,Google推出了ChromeCast裝置。目前,ChromeCast的技術實現細節還不清楚,據說有可能是Google自己定義的Google cast協議(可參考developers.google.com/cast)。
下面先簡單介紹一下P2P的架構。
7.2.1 P2P架構介紹[1]
P2P架構中定義了三個組件,筆者將其稱之為一個裝置,兩種角色。這三個組件分別是:
- P2P Device:它是P2P架構中角色的實體,讀者可把它當做一個Wi-Fi裝置。
- P2P Group Owner:Group Owner(簡稱GO)是一種角色,其作用類似於Infrastructure BSS中的AP。
- P2P Client:另外一種角色,其作用類似於Infrastructure BSS中的STA。
相信對本書的讀者對上面這三個組件的概念並不陌生。實際上,P2P技術模仿了Infrastructure BSS網路結構:
- 在組建P2P Group(即P2P Network)之前,智能終端都是一個一個的P2P Device。
- 當這些P2P Device裝置之間完成P2P協商後,那麼其中將有一個並且只能有一個[1]Device來扮演GO的角色(即充當AP),而其他Device來扮演Client的角色。
最終構成的這個P2P Group組織圖7-1所示:
圖7-1 P2P Group
圖7-1展示了一個典型P2P Group的構成,其中:
- 和一個Infrastructure BSS類似,一個P2P Group中只能有一個GO。一個GO可以支援1個或多個(即圖中的1:n)Clients串連。
- 由於GO的功能類似於AP,所以周圍那些不支援P2P功能的STA也能發現並關聯到GO。這些STA被稱之為Legacy Clients。
注意:“不支援P2P功能”更準確的定義是指不能處理P2P協議。在P2P網路中,GO等同於AP,所以Legacy Clients也能搜尋到GO並關聯上它。不過,由於Legacy Clients不能處理P2P協議,所以P2P一些特有功能在這些Legacy Clients中無法實現。
通過上述介紹讀者會進一步發現P2P Group和Infrastructure BSS的相似性:
- P2P Device在構建P2P Group時,它將首先通過WSC來擷取安全資訊。
- 然後,Client將利用協商好的安全設定資訊去關聯[2]GO(即P2P Group中的AP)。
這部分內容和Infrastructure BSS中STA利用WSC先協商安全資訊然後再關聯至AP的流程完全一樣。正是這種相似性,使得P2P能充分利用現有的一些技術規範。圖7-2所示為P2P及其依賴的技術項:
圖7-2 P2P及其依賴的技術項
由圖7-2可知:
- 為了保證一定的傳輸速率,P2P要求P2P Device必須支援802.11g及以上的規範。其中,安全部分必須支援WPA2。由於P2P技術一個主要的應用情境就是裝置之間共用媒體資料(例如前面提到的Miracast應用情境),所以P2P Device還必須支援WMM(Wi-Fi Multimedia的縮寫,它是一種源自802.11e的QoS服務,主要針對即時視音頻資料的傳輸)。
- P2P Client關聯到GO之前,需要先通過WSC來協商安全資訊,所以WSC也是P2P的依賴技術項。
- 在上述技術基礎上,P2P規範定義了一些特有的技術項,圖7-2列出了其中三種必須實現的技術項,它們分別是P2P Discovery、P2P Group Operation以及P2P PowerManagerment。除了這三個必選技術項外,P2P規範還定義了一個可選技術項,名為Managed P2P Device Operation(該技術項定義了如何在企業級環境中由對應的IT部門來統一配置和管理P2P裝置)。
在7-2所示的技術項中,P2P Discovery是P2P所特有的,也是其核心。本章將主要圍繞它進行介紹。首先來看P2P Discovery。
提示:
1、P2P Group Operation講得是GO如何管理一個Group,也就是GO的工作職責。這部分內容請讀者自行學習參考資料[2]一節。
2、P2P PowerManagement和P2P裝置的電源管理有關,用於節省不必要的電力損耗。由於篇幅關係,本章不擬討論它。請感興趣的讀者自行學習參考資料[3]。
7.2.2 P2P Discovery介紹[4]
P2P Discovery的目的很簡單,就是使得多個P2P Device能夠互相發現並構建一個Group。根據規範,它包括四個主要技術子項:
- Device Discovery:用於P2P裝置搜尋周圍其他支援P2P的裝置。
- Service Discovery:該Device Discovery基礎上,P2P還支援搜尋指定的服務。這部分功能屬於可選項,筆者覺得它和第二章2.2.5.1“Apple Bonjour技術介紹”中提到的Bonjour類似。
- Group Formation:用於決定兩個P2P Device誰來扮演GO,誰來扮演Client。
- P2P Invitation:用於啟用一個Persistent Group(見下文解釋),或者用於邀請一個Client加入一個當前已存在的Group。
提示:Group分Persistent(永久性) Group和Temporary(臨時性) Group兩種。我們舉二個簡單例子來說明二者的區別:
Temporary Group:當你有份檔案要傳給一個同事時,雙方開啟手機的Wi-Fi P2P功能,建立一個Group,然後傳輸檔案,最後關閉Wi-Fi P2P。在這個過程中,GO和Client的角色指派由Group Formation來決定,這一次的GO可能是你的裝置,下一次則可能是其他人的裝置。對於這種Group,在建立Group過程中所涉及的安全配置資訊以及和Group相關的資訊(以後我們會見到它)都是臨時的,即下一次再組建Group時,這些安全配置資訊都將發生變化。
Persistent Group:在這種Group中,GO由指定裝置來扮演,而且安全配置資訊及Group相關資訊一旦產生,後續就不會再發生變化(除非使用者重新設定)。Persistent Group中的GO多見於固定用途的裝置,例如印表機等。如此,除了第一次通過P2P串連到印表機時相對麻煩一點(需要利用WSC協商安全配置資訊)外,後續使用的話,由於P2P裝置將儲存這些安全資訊,所以下一次再使用印表機時就能利用這些資訊直接和印表機進行關聯了。
由於篇幅關係,本章將僅介紹上述四個知識點中最為基礎的Device Discovery和Group Formation,而Service Discovery和P2P Invitation的內容請讀者學習完本章後再仔細研讀P2P規範。
1. P2P Device Discovery介紹
P2P Device Discovery雖然也是利用802.11中的Probe Request和Probe Response幀來搜尋周圍的P2P裝置,但其步驟卻比Infrastructure BSS中的無線網路搜尋要複雜。舉一個簡單的例子,一個P2P Device除了自己要發送Probe Request幀外,還得接收來自其他裝置的Probe Request幀並回複Probe Response幀。而在Infrastructure BSS中,只有AP會發送Probe Response幀。
為了加快搜尋速度,P2P為Device Discovery定義了兩個狀態和兩個階段。
(1) Device Discovery工作流程介紹
P2P Device Discovery的工作流程包含兩個狀態和兩個階段。先來看兩個狀態,它們分別是:
- Search State:在該狀態中,P2P Device將在2.4GHz的1,6,11頻段上分別發送Probe Request幀。這幾個頻段被稱為Social Channels。為了區別非P2P的Probe Request幀,P2P Device Discovery要求必須在Probe Request幀中包含P2P IE。
- Listen State:在該狀態下,P2P Device將隨機播放在1,6,11頻段中的一個頻段(被選中的頻段被稱為Listen Channel)監聽Probe Request幀並回複Probe Response幀。值得指出的是,Listen Channel一旦選擇好後,在整個P2P Discovery階段就不能更改。另外,在這個階段中,P2P Device只處理那些包含了P2P IE資訊的Probe Request幀。
再來看兩個階段,它們分別是:
- Scan Phase:掃描階段。這一階段和前面章節介紹的無線網路掃描一樣,P2P Device會在各個頻段上發送Probe Request幀(主動掃描)。P2P Device在這一階段中不會處理來自其他裝置的Probe Request幀。這一階段過後,P2P Device將進入下一個階段,即Find Phase。
- Find Phase:雖然從中文翻譯來看,Scan和Find意思比較接近,但P2P的Find Phase卻和Scan Phase大不相同。在這一階段中,P2P Device將在Search State和Listen State之間來回切換。Search State中,P2P Device將發送Probe Request幀,而Listen State中,它將接收其他裝置的Probe Request幀並回複Probe Response幀。
圖7-3所示為P2P Device Discovery的流程。
圖7-3 P2P Device Discovery流程
圖7-3所示為兩個P2P Device的Discovery流程,其中:
- Discovery啟動後,Device首先進入Scan Phase。在這一階段,P2P裝置在其支援的所有頻段上都會發送Probe Request幀。
- Scan Phase完成後,Device進入Find Phase。在這一階段中,Device將在Listen和Search State中切換。根據前面的介紹,每一個裝置的Listen Channel在Discovery開始前就已確定。例如,圖7-3中Device 1的Listen Channel是1,而Device 2的Listen Channel是6。
- 在Find Phase中,P2P規範對Device處於Listen State的時間也有所規定,其時間是100TU的整數倍,倍數值是一個隨機數,位於minDiscoverableInterval和maxDiscoverableInterval之間。這兩個值預設為1和3,而廠商可以修改。選擇隨機倍數的原因是為了防止兩個Device進入所謂的Lock-Step怪圈,即兩個Device同時進入Listen State,等待相同的時間後又同時進入Search State。如此,雙方都無法處理對方的Probe Request資訊(Search State中,Device只發送Probe Request)。圖7-3中,Device 1第一次在Listen State中待了2個100TU,而第二次在Listen State中待了1個100TU。
- 當Device處於Find Phase中的Search State時,它將在1,6,11頻段上發送Probe Request幀。注意,只有當兩個裝置處於同一頻段時,一方發送的幀才能被對方接收到。
提示:P2P規範對兩個狀態及兩個階段的描述非常細緻,甚至於對每個狀態能幹什麼和不能幹什麼都有詳細說明。不過,從如何快速掌握P2P架構的角度來看,筆者覺得這些內容過於囉嗦。
瞭解了Device Discovery的大體工作流程後,下面我們將通過執行個體來看看P2P使用到的Probe Request和Probe Response幀。
[1]假設這裝置將只組成一個P2P Network。
[2]注意,此處的關聯指得是RSNA,其工作流程包括包括4-WayHandshake。
Android Wi-Fi Display(Miracast)介紹
http://blog.csdn.net/innost/article/details/8474683