《深刻理解Android:Wi-Fi,NFC和GPS》章節連載[節選]--第七章 深刻理解Wi-Fi P2P

首先感謝各位兄弟姐妹們的耐心等待。根據今天獲得的消息,本書預計在下週各大網店提供預訂。注意,此處連載的是未經出版社編輯的原始稿件,因此樣子會有些非專業。html

注意,以下是本章目錄,本文節選7.1~7.2.2 7.4~7.4.1.2節,7.5sass

 

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

  

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

               

第七章  深刻理解Wi-Fi P2P

 

 

 

 

 

本章主要內容:

  • 介紹Wi-Fi P2P相關知識;
  • 介紹AndroidWifiP2pServicewpa_supplicant的相關代碼。

7.1  概述

承接第6章介紹的WSC,本章將繼續介紹Wi-Fi AllianceWi-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相關的模塊,包括SettingsWifiP2pService以及WPAS

下面,先來認識一下P2P框架

7.2  P2P基礎知識介紹

WFA定義的P2P協議文檔全名爲「Wi-Fi Peer-to-PeerP2P Technical Specification」,目前的版本爲1.1,全長160頁。P2P技術使得多個Wi-Fi設備在沒有AP的狀況下也能構成一個網絡(P2P Network,也被稱之爲P2P Group)並相互通訊。less

Wi-Fi P2P技術是Wi-Fi Display(也稱之爲Miracast,詳情請參考做者的一篇博文http://blog.csdn.net/innost/article/details/8474683)的基礎。在Miracast應用場景中,一臺支持P2P的智能手機可直接鏈接上一臺支持P2P的智能電視,智能手機隨後將本身的屏幕,或者媒體資源傳送給電視機去顯示或播放。顯然,藉助P2P技術,Wi-Fi設備之間的直接相連將極大拓展Wi-Fi技術的使用場景。socket

注意:根據筆者本身的判斷,隨着支持愈來愈多的設備支持P2PMiracast,智能終端設備之間的多屏共享和互動功能將很快得以實現。另外,恰逢本章撰寫之際,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 OwnerGroup 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:nClients鏈接。
  • 因爲GO的功能相似於AP,因此周圍那些不支持P2P功能的STA也能發現並關聯到GO。這些STA被稱之爲Legacy Clients

注意:「不支持P2P功能」更準確的定義是指不能處理P2P協議。在P2P網絡中,GO等同於AP,因此Legacy Clients也能搜索到GO並關聯上它。不過,因爲Legacy Clients不能處理P2P協議,因此P2P一些特有功能在這些Legacy Clients中沒法實現。

經過上述介紹讀者會進一步發現P2P GroupInfrastructure BSS的類似性:

  • P2P Device在構建P2P Group時,它將首先經過WSC來獲取安全信息。
  • 而後,Client將利用協商好的安全設置信息去關聯[2]GO(即P2P Group中的AP)。

這部份內容和Infrastructure BSSSTA利用WSC先協商安全信息而後再關聯至AP的流程徹底同樣。正是這種類似性,使得P2P能充分利用現有的一些技術規範。圖7-2所示爲P2P及其依賴的技術項:

7-2  P2P及其依賴的技術項

由圖7-2可知:

  • 爲了保證必定的傳輸速率,P2P要求P2P Device必須支持802.11g及以上的規範。其中,安所有分必須支持WPA2。因爲P2P技術一個主要的應用場景就是設備之間共享媒體數據(例如前面提到的Miracast應用場景),因此P2P Device還必須支持WMMWi-Fi Multimedia的縮寫,它是一種源自802.11eQoS服務,主要針對實時視音頻數據的傳輸)。
  • P2P Client關聯到GO以前,須要先經過WSC來協商安全信息,因此WSC也是P2P的依賴技術項。
  • 在上述技術基礎上,P2P規範定義了一些特有的技術項,圖7-2列出了其中三種必須實現的技術項,它們分別是P2P DiscoveryP2P Group Operation以及P2P PowerManagerment。除了這三個必選技術項外,P2P規範還定義了一個可選技術項,名爲Managed P2P Device Operation(該技術項定義瞭如何在企業級環境中由對應的IT部門來統一配置和管理P2P設備)。

在如圖7-2所示的技術項中,P2P DiscoveryP2P所特有的,也是其核心。本章將主要圍繞它進行介紹。首先來看P2P Discovery

提示:

1P2P Group Operation講得是GO如何管理一個Group,也就是GO的工做職責。這部份內容請讀者自行學習參考資料[2]一節。

2P2P PowerManagementP2P設備的電源管理有關,用於節省沒必要要的電力損耗。因爲篇幅關係,本章不擬討論它。請感興趣的讀者自行學習參考資料[3]

7.2.2  P2P Discovery介紹[4]

P2P Discovery的目的很簡單,就是使得多個P2P Device可以互相發現並構建一個Group。根據規範,它包括四個主要技術子項:

  • Device Discovery:用於P2P設備搜索周圍其餘支持P2P的設備。
  • Service Discovery:該Device Discovery基礎上,P2P還支持搜索指定的服務。這部分功能屬於可選項,筆者以爲它和第二章2.2.5.1Apple Bonjour技術介紹」中提到的Bonjour相似。
  • Group Formation:用於決定兩個P2P Device誰來扮演GO,誰來扮演Client
  • P2P Invitation:用於激活一個Persistent Group(見下文解釋),或者用於邀請一個Client加入一個當前已存在的Group

提示:GroupPersistent(永久性) GroupTemporary(臨時性) Group兩種。咱們舉二個簡單例子來講明兩者的區別:

Temporary Group:當你有份文件要傳給一個同事時,雙方打開手機的Wi-Fi P2P功能,創建一個Group,而後傳輸文件,最後關閉Wi-Fi P2P。在這個過程當中,GOClient的角色分配由Group Formation來決定,這一次的GO多是你的設備,下一次則多是其餘人的設備。對於這種Group,在創建Group過程當中所涉及的安全配置信息以及和Group相關的信息(之後咱們會見到它)都是臨時的,即下一次再組建Group時,這些安全配置信息都將發生變化。

Persistent Group:在這種Group中,GO由指定設備來扮演,並且安全配置信息及Group相關信息一旦生成,後續就不會再發生變化(除非用戶從新設置)。Persistent Group中的GO多見於固定用途的設備,例如打印機等。如此,除了第一次經過P2P鏈接到打印機時相對麻煩一點(須要利用WSC協商安全配置信息)外,後續使用的話,因爲P2P設備將保存這些安全信息,因此下一次再使用打印機時就能利用這些信息直接和打印機進行關聯了。

因爲篇幅關係,本章將僅介紹上述四個知識點中最爲基礎的Device DiscoveryGroup Formation,而Service DiscoveryP2P Invitation的內容請讀者學習完本章後再仔細研讀P2P規範。

1.  P2P Device Discovery介紹

P2P Device Discovery雖然也是利用802.11中的Probe RequestProbe Response幀來搜索周圍的P2P設備,但其步驟卻比Infrastructure BSS中的無線網絡搜索要複雜。舉一個簡單的例子,一個P2P Device除了本身要發送Probe Request幀外,還得接收來自其餘設備的Probe Request幀並回復Probe Response幀。而在Infrastructure BSS中,只有AP會發送Probe Response幀。

爲了加快搜索速度,P2PDevice Discovery定義了兩個狀態和兩個階段。

1  Device Discovery工做流程介紹

P2P Device Discovery的工做流程包含兩個狀態和兩個階段。先來看兩個狀態,它們分別是:

  • Search State:在該狀態中,P2P Device將在2.4GHz1,6,11頻段上分別發送Probe Request幀。這幾個頻段被稱爲Social Channels。爲了區別非P2PProbe 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:雖然從中文翻譯來看,ScanFind意思比較接近,但P2PFind Phase卻和Scan Phase大不相同。在這一階段中,P2P Device將在Search StateListen 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 DeviceDiscovery流程,其中:

  • Discovery啓動後,Device首先進入Scan Phase。在這一階段,P2P設備在其支持的全部頻段上都會發送Probe Request幀。
  • Scan Phase完成後,Device進入Find Phase。在這一階段中,Device將在ListenSearch State中切換。根據前面的介紹,每個設備的Listen ChannelDiscovery開始前就已肯定。例如,圖7-3Device 1Listen Channel1,而Device 2Listen Channel6
  • Find Phase中,P2P規範對Device處於Listen State的時間也有所規定,其時間是100TU的整數倍,倍數值是一個隨機數,位於minDiscoverableIntervalmaxDiscoverableInterval之間。這兩個值默認爲13,而廠商能夠修改。選擇隨機倍數的緣由是爲了防止兩個Device進入所謂的Lock-Step怪圈,即兩個Device同時進入Listen State,等待相同的時間後又同時進入Search State。如此,雙方都沒法處理對方的Probe Request信息(Search State中,Device只發送Probe Request)。圖7-3中,Device 1第一次在Listen State中待了2100TU,而第二次在Listen State中待了1100TU
  • Device處於Find Phase中的Search State時,它將在1,6,11頻段上發送Probe Request幀。注意,只有當兩個設備處於同一頻段時,一方發送的幀才能被對方接收到。

提示:P2P規範對兩個狀態及兩個階段的描述很是細緻,甚至於對每一個狀態能幹什麼和不能幹什麼都有詳細說明。不過,從如何快速掌握P2P框架的角度來看,筆者以爲這些內容過於囉嗦。

瞭解了Device Discovery的大致工做流程後,下面咱們將經過實例來看看P2P使用到的Probe RequestProbe Response幀。


[1]假設這設備將只組成一個P2P Network

[2]注意,此處的關聯指得是RSNA,其工做流程包括包括4-WayHandshake

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

7.4  wpa_supplicant中的P2P介紹

在第55.2.3中「WifiNative介紹」一節中曾介紹了wpa_supplicant的啓動,在那一節中,讀者會發現wpa_supplicant進程由WifiStateMachine啓動。在Android官方代碼中,雖然Java層有WifiServiceWifiP2pService兩個幾乎徹底不一樣的Wifi服務,但兩者都只和Native層的惟一一個wpa_supplicant進程交互。簡單點說,Android原生代碼中,一個wpa_supplicant進程將同時支持WifiServiceWifiP2pService

上述這種設計方法使得wpa_supplicant負擔較重,因此,一些手機廠商會爲WifiServiceWifiP2pService各建立一個wpa_supplicant進程,使得它們能各司其職而互不干擾。以筆者的Galaxy Note2爲例,它的,WifiService將和wpa_supplicant進程交互,而WifiP2pService將和一個名爲p2p_supplicant(通過筆者測試,p2p_supplicant實際上就是wpa_supplicant,只不過名字不一樣罷了)的進程交互。

7-26所示爲Galaxy Note2 init配置文件中關於p2p_supplicant服務的示意圖:

7-26  Galaxy Note2p2p_supplicant服務配置項

由圖7-26可知:

  • init配置文件定義了一個名爲p2p_supplicant的服務,該服務啓動的進程爲p2p_supplicant。根據筆者的測試,p2p_supplicant其實就是wpa_supplicant,只不過換了一個名字而已。
  • p2p_supplicant使用的配置文件名爲/data/misc/wifi/p2p_supplicant.conf文件,其內容如圖7-27所示。

7-27  p2p_supplicant.conf內容

提示:關於init配置文件中wpa_supplicant服務的說明,請讀者參考第44.3wpa_supplicant初始化流程分析」一節。

7-27中,p2p_supplicant對於的ctrl_iface路徑爲/data/misc/wifi/sockets。因此,若是要使用wpa_clip2p_supplicant交互的話,必須指定正確的ctrl_iface路徑。圖7-28所示爲筆者用wpa_cli測試p2p_supplicant時的示例截圖:

7-28  wpa_clip2p_supplicant交互

下面來分析wpa_supplicant中和P2P相關的代碼。

注意:以Galaxy Note2爲例,p2p_supplicant就是wpa_supplicant,只是編譯時打開了P2P相關的選項。下面的分析將以wpa_supplicant中和P2P相關的代碼及工做流程爲主。

7.4.1  P2P模塊初始化

首先來看WPASP2P相關模塊的初始化。該初始化工做咱們在第44.3.4中「wpa_supplicant_init_iface分析之五」曾提到過,其對應的函數wpas_p2p_init,立刻來看它

[p2p_supplicant.c::wpas_p2p_init]

int wpas_p2p_init(struct wpa_global *global, struct wpa_supplicant *wpa_s)

{

    struct p2p_config p2p; //p2p變量指向一個p2p_config對象,表明P2P模塊的配置信息

    unsigned int r;  int i;

    //①WPA_DRIVER_FLAGS_P2P_CAPABLE:表明Wifi驅動對P2P支持的能力,詳情見下文解釋

    if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_P2P_CAPABLE))  return 0;

 

    if (global->p2p)  return 0;

    //若是wifi driver能完成P2P功能,就不用勞駕WPAS了

    if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_P2P_MGMT) {......}

 

    //②初始化並設置p2p_config對象

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

    p2p.msg_ctx = wpa_s;  p2p.cb_ctx = wpa_s;

    p2p.p2p_scan = wpas_p2p_scan; //P2P對應的掃描函數

    .......//設置一些回調函數

    p2p.get_noa = wpas_get_noa; p2p.go_connected = wpas_go_connected;

    //設置P2P Device address。

    os_memcpy(wpa_s->global->p2p_dev_addr, wpa_s->own_addr, ETH_ALEN);

    os_memcpy(p2p.dev_addr, wpa_s->global->p2p_dev_addr, ETH_ALEN);

   //設置P2P模塊配置信息,包括device name,model name,uuid等

    p2p.dev_name = wpa_s->conf->device_name;

    p2p.manufacturer = wpa_s->conf->manufacturer;

    p2p.model_name = wpa_s->conf->model_name;

    p2p.model_number = wpa_s->conf->model_number;

    p2p.serial_number = wpa_s->conf->serial_number;

    if (wpa_s->wps) {

        os_memcpy(p2p.uuid, wpa_s->wps->uuid, 16);

        p2p.config_methods = wpa_s->wps->config_methods;

    }

    //設置Operation Channel信息和listen channel信息

    if (wpa_s->conf->p2p_listen_reg_class &&

        wpa_s->conf->p2p_listen_channel) {

        p2p.reg_class = wpa_s->conf->p2p_listen_reg_class;

        p2p.channel = wpa_s->conf->p2p_listen_channel;

    } else {......//設置默認值}

   ......

     //設置國家碼

    if (wpa_s->conf->country[0] && wpa_s->conf->country[1]) {

        os_memcpy(p2p.country, wpa_s->conf->country, 2);

        p2p.country[2] = 0x04;

    } else//配置文件中沒有設置國家,因此取值爲"XX\x04"

        os_memcpy(p2p.country, "XX\x04", 3);//讀者可回顧圖7-7

     //判斷wifi 驅動是否支持配置文件中設置的operationg channel和listen channel

    if (wpas_p2p_setup_channels(wpa_s, &p2p.channels)) {......}

 

    os_memcpy(p2p.pri_dev_type, wpa_s->conf->device_type,WPS_DEV_TYPE_LEN);

 

    p2p.num_sec_dev_types = wpa_s->conf->num_sec_device_types;

    os_memcpy(p2p.sec_dev_type, wpa_s->conf->sec_device_type,

             p2p.num_sec_dev_types * WPS_DEV_TYPE_LEN);

    //是否支持concurrent operation

    p2p.concurrent_operations = !!(wpa_s->drv_flags&WPA_DRIVER_FLAGS_P2P_CONCURRENT);

 

    p2p.max_peers = 100;//最多能保存100個對端P2P Device信息

    //配置文件中沒有設置p2p_ssid_postfix,但P2pStateMachine在initializeP2pSettings函數中

   //將設置P2P SSID後綴。以筆者的Galaxy Note2爲例,其P2P SSID後綴爲「Android_4aa9」

    if (wpa_s->conf->p2p_ssid_postfix) {......}

 

    p2p.p2p_intra_bss = wpa_s->conf->p2p_intra_bss;

    //③global->p2p指向一個p2p_data結構體,它是WPAS中P2P模塊的表明

    global->p2p = p2p_init(&p2p);

    ......

    for (i = 0; i < MAX_WPS_VENDOR_EXT; i++) {//拷貝vendor廠商特定的WSC屬性信息

        if (wpa_s->conf->wps_vendor_ext[i] == NULL)  continue;

        p2p_add_wps_vendor_extension(global->p2p, wpa_s->conf->wps_vendor_ext[i]);

    }

 

    return 0;

}

由上述代碼可知,wpas_p2p_init的工做很是簡單,主要內容包括:

  • 初始化一個p2p_config對象,而後根據p2p_supplicant.conf文件的信息來設置其中的內容,同時還須要爲P2P模塊設置一些回調函數。
  • 調用p2p_init函數以初始化P2P模塊。

下面來介紹上述代碼中涉及到的一些知識。

1.  Driver Flags和重要數據結構介紹

先來看上述代碼中提到的drv_flags變量。WPAS中,Wifi驅動對P2P功能的支持狀況就是由它來表達的。筆者的Galaxy Note2中該變量取值爲0x2EAC0,其表達的含義以下:

[-->driver.h]

#define WPA_DRIVER_FLAGS_AP        0x00000040  //Wifi driver支持AP。它使得P2P設備能扮演GO

/*

  標誌標明association成功後,kernel driver須要設置WEP key

  這個標誌出現的緣由是因爲kernel API發生了變更,使得只能在關聯成功後才能設置key

*/

#define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE    0x00000080

#define WPA_DRIVER_FLAGS_P2P_CONCURRENT    0x00000200 //Wifi驅動支持STA和P2P的併發運行

#define WPA_DRIVER_FLAGS_P2P_CAPABLE    0x00000800 //Wifi驅動支持P2P

/*

  7.2.2.1.2「Probe Request幀設置」一節曾提到過說P2P包含Device Address和Interface Address

  兩種類型的地址。在實際實現過程當中,這兩個地址分別表明兩個virtual interface。顯然,P2P中第一個和一直

  存在的是擁有Device Address的vitural interface。下面這個標誌表示該virtual interface能夠參與

  P2P管理(除P2P Group Operation以外的工做)工做以及非P2P相關的工做(例如利用這個virtual

  interface 加入到一個BSS)

*/

#define WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P  0x00002000

/*

 該標誌主要針對associate操做。當關聯操做失敗後,若是driver支持該選項,則代表driver能處理失敗之

 後的各類收尾工做(Key、timeout等工做)。不然,WPAS須要本身處理這些事情

*/

#define WPA_DRIVER_FLAGS_SANE_ERROR_CODES        0x00004000

//下面這個標誌和off channel機制有關。讀者可參考第4章4.3.4中「capability介紹」一節。當802.11

//MAC幀經過off channel發送的話,下面這個標誌表示driver會反饋一個發送狀況(TX Report)消息給WPAS

#define WPA_DRIVER_FLAGS_OFFCHANNEL_TX            0x00008000

//下面這兩個標誌表示kernel中的driver是否能反饋Deauthentication/Disassociation幀

//發送狀況(TX Report)

#define WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS        0x00020000

下面來看wpas_p2p_init中出現的幾個重要數據結構,首先是p2p_configp2p_data,它們的成員如圖7-29所示:

7-29  p2p_configp2p_data結構示意圖

7-29展現了p2p_configp2p_data兩個數據結構中一些重要的成員。其中:

  • p2p_config定義了20個回調函數。這些回調函數定義了P2P模塊和外界交互的接口。在wpas_p2p_init中,這些回調函數均指向p2p_supplicant.c中對應的函數,例如p2p_scan指向wpas_p2p_scandev_lost指向wpas_dev_lost。另外,因爲回調函數的參數比較複雜,因此圖中均省略了參數信息。
  • p2p_data指向一個p2p_config對象。

下面來看另外幾個重要數據結構的內容,如圖7-30所示:

7-30  p2p_device及其餘數據結構示意圖

7-30展現了五種數據結構,其中:

  • p2p_device表明一個P2P設備。其中一些諸如設備名,Device CapabilityBitmap等信息保存在一個類型爲p2p_peer_info的對象中。
  • p2p_group表明一個P2P Group的信息,其內部包含一個p2p_group_config對象和一個p2p_group_member鏈表。p2p_group_config表示該Group的配置信息,p2p_group_member表明Group MemberP2P Client的信息。

提示: WPAS中定義了很是多的數據結構類型,這極大增長了初學者的學習難度。根據筆者本身的經驗,建議讀者在學習過程當中先簡單瞭解這些數據結構的名字及做用,而後在具體代碼分析時再結合代碼邏輯來了解這些數據結構及其內部各個成員變量的具體做用。

 

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

7.5.1  本章總結

本章對Wi-Fi P2P進行了詳細介紹,主要內容包括:

  • P2P理論知識。從完整性來講,本章介紹的內容只是P2P規範中最基礎的部分。但對於初學者而言,這部分的難度也不算小。就筆者本身的學習經歷而言,這部份內容須要反覆琢磨和研究,有時候還須要結合代碼分析才能真正掌握其精髓。
  • 在學習完P2P理論知識後,咱們對WifiP2pSettings以及WifiP2pService進行了介紹。這部份內容比較簡單,讀者可輕鬆掌握相關知識。
  • 最後,咱們對WPAS中的P2P模塊及運行機制進行了介紹。就所涉及到的知識而言,這些內容並不複雜,但因爲P2P以及和wifi driver在具體實現時有諸多考慮(例如off channel的狀況,TX Report的處理),因此其工做流程反倒顯得比較繁瑣。

最後,但願讀者在本章的基礎上,完成下列的一些任務:

  • 通讀P2P規範,瞭解Group OperationInvitationDevice Discoverability以及P2P Power Management相關知識。
  • 繼續研究wpas_start_wps_go代碼,掌握WPASWSC Registrar以及AP的工做流程。

 

7.5.2  參考資料說明

P2P基礎知識介紹

本章參考資料主要是Wifi P2P規範1.1版,讀者可從http://www.doc88.com/p-908280242988.html上下載協議全文。

P2P架構介紹

[1]  WiFi P2P2節「Architectural Overview

[2]  WiFi P2P3.2節「P2P Group Operation

[3]  WiFi P2P3.3節「P2P Power Management

P2P Device DiscoveryGroup Formation

[4]  WiFi P2P3.1節「P2P Discovery

[5]  Part11:Wireless LAN Medium Access Control(MAC) and Phsyical Layer(PHY) Specifications附錄JCountry information element and regulatory classes

該文檔下載地址爲http://download.csdn.net/download/s_bird0529/2553723。附錄J詳細描述了國家碼和管制信息方面的內容

[6]  WiFi P2P4.2節「Management Frames

[7]  802.11-20128.4.1.11節「Action Field

該節介紹了ActionCategory字段的取值狀況

[8]  WiFi P2P4.1節「P2P Information Elements

[9]  WiFi P2P附錄AP2P State Machine

相關文章
相關標籤/搜索