深入理解Wi-Fi P2P

作者&投稿:爱婷 (若有异议请与网页底部的电邮联系)
~

介绍Wi-Fi联盟推出的另外一项重要技术规范WiFi P2P。 该规范的商品名为Wi-Fi Direct, 它支持多个Wi-Fi设备在没有AP的情况下相互连接.
在Android平台的Wi-Fi相关模块中, P2P的功能点主要集中在:
· Android Framework中的WifiP2pService, 其功能和WifiService类似, 用于处理
和P2P相关的工作。
· wpa_supplicant中的P2P模块。

Wi-Fi P2P技术是Wi-Fi Display 的基础。
http://blog.csdn.net/innost/article/details/8474683

P2P架构中定义了三个组件, 笔者将其称为“ 一个设备, 两种角色” , 分别如下
P2P Device : 它是P2P架构中角色的实体, 可把它当做一个Wi-Fi设备
P2P Group Owner : Group Owner( GO) 是一种角色, 其作用类似于Infrastructure BSS中的AP
P2P Client : 另外一种角色, 其作用类似于Infrastructure BSS中的STA

组建P2P Group( 即P2P Network) 之前, 智能终端都是一个一个的
P2P Device。 当这些P2P Device设备之间完成P2P协商后, 其中将有一个并且只能有一个Device来扮演GO的角色( 即充当AP) , 而其他Device来扮演Client的角色

P2P Discovery的作用很简单, 就是使多个P2P Device能够互相发现并构建一个
Group。 根据规范, 它包括四个主要技术子项
·** Device Discovery : 用于P2P设备搜索周围其他支持P2P的设备。
· Service Discovery
: 该Device Discovery基础上, P2P还支持搜索指定的服务。 这
部分功能属于可选项。
· Group Formation : 用于决定两个P2P Device谁来扮演GO, 谁来扮演Client。
· P2P Invitation**: 用于激活一个Persistent Group( 见下文解释) , 或者用于邀请一个Client加入一个当前已存在的Group

P2P Device Discovery虽然也是利用802.11中的Probe Request和Probe Response
帧来搜索周围的P2P设备
为了加快搜索速度, P2P为Device Discovery定义了两个状态和两个阶段。
( 1) 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和ListenState之间来回切换。 Search State中, P2P Device将发送Probe Request帧, 而ListenState中, 它将接收其他设备的Probe Request帧并回复Probe Response帧

两个P2P Device的Discovery流程:
· Discovery启动后, Device首先进入Scan Phase。 在这一阶段, P2P设备在其支持的所有频段上都会发送Probe Request帧。
· Scan Phase完成后, Device进入Find Phase。 在这一阶段中, Device将在Listen和Search State中切换。

当Device处于Find Phase中的Search State时, 它将在1、 6、 11频段上发送Probe
Request帧。 注意, 只有当两个设备处于同一频段时, 一方发送的帧才能被对方接收到

P2P规范中对Probe Request帧的要求
· SSID IE必须设置为P2P Wildcard SSID, 即"DIRECT-"。
· 必须包含P2P IE。
· 802.11 MAC帧头的地址域① 中, Destination Address域( Address1) 必须为广播
地址( FF: FF: FF: FF: FF: FF) 或者为目标设备的P2P Device Address , BSSID域( Address3) 必须为广播地址

(P2P规范定义了两种类型的地址, 一种是P2P Device Address, 另外一种
是P2P Interface Address。 一个P2P Device在加入P2P Group前, 将使用Device Address开展Device Discovery等工作。 对一个P2P Device而言, 其P2P Device Address是唯一的( 作用等同于MAC地址) 。 而当P2P Device加入P2P Group后, 它和Group中其他成员交互时将使用P2P Interface Address。 另外, 由于一个P2P Device可同时加入多个P2P Group, 所以在每个P2P Group中, 该设备必须使用不同的P2P Interface Address。 最后, 当一个Group结束后, Device在该Group中使用的P2PInterface Address也就相应作废了)
Probe Response帧
P2P Probe Response帧包含WSC IE和P2P IE

当P2P Device A通过Device Discovery找到周围的一个P2P Device B后, Device A
就可以开展Group Formation流程以准备构造一个P2P Group。 Group Formation也包含
两个阶段, 分别如下。
· GO Negotiation : 在这一阶段中, 两个Device要协商好由谁来做GO。
· Provisioning : GO和Client角色确定后, 两个Device要借助WSC来交换安全配置
信息。 此后, Client就可以利用安全配置信息关联上GO。

GO Negotiation过程中P2P设备会利用一种名为P2P Public Action类型的帧交换信

( 1) P2P Public Action帧
GO Negotiation流程, 包含三次P2P Public Action帧交换
GO Negotiation( 以后简称GON) 流程包括GON Request、 GON
Response和GON Confirmation三次帧交换。 这三次帧交换并不涉及什么复杂的计算, 只
是双方交换一些信息, 从而谁来扮演GO

P2P Public Action帧中还存在着"Provision Discovery Request/Response"类型的帧,P2P规范定义了Provision Discovery( PD) 流程, 该流程就是为了确定交互双方使用的WSC方法

WifiP2pSettings是Settings应用中负责处理P2P相关UI/UE逻辑的主要类, 与之交互
的则是位于SystemServer进程中的WifiP2pService

WifiService处理和WLAN网络连接相关的工作, 而WifiP2pService则专门负责处理和Wi-Fi P2P相关的工作
#######P2pStateMachine是WifiP2pService的核心

1.CMD_ENABLE_P2P处理流程
1.1WifiStateMachine将创建一个名为mWifiP2pChannel的AsyncChannel对象用于向P2pStateMachine发送消息
1.2在Android平台中, 如果用户打开Wi-Fi功能, P2pStateMachine就会收到第一个消息CMD_ENABLE_P2P。 该消息是WifiStateMachine进入DriverStartedState后, 在其EA中借助mWifiP2pChannel向P2pStateMachine发送的.(P2pDisabledState: enter)
1.3处理完CMD_ENABLE_P2P消息后, P2pStateMachine将创建一个WifiMonitor用于接收来自wpa_supplicant的消息, 同时状态机将转入P2pEnablingState.
1.4WifiMonitor连接wpa_supplicant之后, WifiMonitor会发送一个SUP_CONNECTION_EVENT给P2pStateMachine。 该消息将由P2pEnablingState处理
2.SUP_CONNECTION_EVENT处理流程
WifiP2pService.java: : P2pEnablingState: processMessage
2.1.当状态机转入InactiveState后, 首先执行的是其父状态P2pEnabledState的EA, 然后才是InactiveState自己的EA.
WifiP2pService.java: : P2pEnabledState: enter
2.2.P2pStateMachine就算初始化完毕, 接下来的工作就是处理用户发起的操作
3.DISCOVER_PEERS处理流程
用户在界面中进行操作以搜索周围的设备,WifiP2pSettings中WifiP2pManager的discoverPeers函数, 它将发送DISCOVER_PEERS消息给P2pStateMachine
3.1.P2pStateMachine当前处于InactiveState, 不过DISCOVER_PEERS消息却是由其父状态P2pEnabledState来处理的
3.2.当WPAS搜索到周围的P2P Device后, 将发送以下格式的消息给WifiMonitor。

3.3.WifiMonitor将根据这些信息构建一个WifiP2pDevice对象, 然后发送
P2P_DEVICE_FOUND_EVENT给P2pStateMachine
4.P2P_DEVICE_FOUND_EVENT处理流程
P2P_DEVICE_FOUND_EVENT也由InactiveState的父状态P2pEnabledState来处理
5.CONNECT处理流程
5.1.当用户在WifiP2pSettings界面中选择连接某个P2P Device后,WifiP2pManager的connect函数将发送CONNECT消息给P2pStateMachine, 该消息由InactiveState状态自己来处理
WifiP2pSettings.java: : InactiveState: processMessage
WifiP2pService.java: : connect
5.2.connect将返回NEEDS_PROVISON_REQ, 所以P2pStateMachine将
转入ProvisionDiscoveryState
WifiP2pService.java: : ProvisionDiscoveryState: enter
5.3.由于WSC配置方法为PBC, 所以对端设备的P2pStateMachine将收到一个
P2P_PROV_DISC_PBC_REQ_EVENT消息。 当对端设备处理完毕后, 将收到一个P2P_PROV_DISC_PBC_RSP_EVENT消息
6.P2P_PROV_DISC_PBC_RSP_EVENT处理流程
6.1.P2pStateMachine当前处于ProvisionDiscoveryState
WifiP2pService.java: : ProvisionDiscoveryState: processMessage
6.2.P2pStateMachine通过p2pConnectWithPinDisplay向对端发起Group
Negotiation Request请求。 接下来的工作就由WPAS来处理。 当Group Formation结束后, P2pStateMachine将收到一个P2P_GROUP_STARTED_EVENT消息以通知Group建立完毕
7.P2P_GROUP_STARTED_EVENT处理流程
7.1.P2P_GROUP_STARTED_EVENT消息由GroupNegotiationState处理
WifiP2pService.java: : GroupNegotiationState: processMessage
7.2.P2pStateMachine将转入GroupCreatedState
WifiP2pService.java: : GroupCreatedState: enter
8.AP_STA_CONNECTED_EVENT处理流程
8.1.当对端P2P设备成功关联到本机后, WifiMonitor又将发送一个名为
AP_STA_CONNECTED_EVENT的消息
WifiP2pService.java: : GroupCreatedState: processMessage
8.2.至此, 一个P2P Device( 扮演Client) 就成功关联上本机的P2P Device( 扮演GO)

wpa_supplicant进程由WifiStateMachine启动.
手机厂商会为WifiService和WifiP2pService各创建一个wpa_supplicant进程, 使得它们能各司其职而互不干扰。 WifiService将和wpa_supplicant进程交互, 而WifiP2pService将和一个名为p2p_supplicant
p2p_supplicant使用的配置文件名为/data/misc/wifi/p2p_supplicant.conf
p2p_supplicant对应的ctrl_iface路径为/data/misc/wifi/sockets。 所以, 如果要使用wpa_cli和p2p_supplicant交互, 必须指定正确的ctrl_iface路径

p2p_supplicant.c: : wpas_p2p_init
· 初始化一个p2p_config对象, 然后根据p2p_supplicant.conf文件的信息来设置其中的内容, 同时还需要为P2P模块设置一些回调函数。
· 调用p2p_init函数以初始化P2P模块
1.Driver Flags和重要数据结构
drv_flags变量, WPAS中, Wi-Fi驱动对P2P功能的支持情况就是由它来表达的
· p2p_config定义了20个回调函数。 这些回调函数定义了P2P模块和外界交互的接口。 在wpas_p2p_init中, 这些回调函数均指向p2p_supplicant.c中对应的函数, 例如p2p_scan指向wpas_p2p_scan, dev_lost指向wpas_dev_lost
· p2p_data指向一个p2p_config对象。
· 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 Member即P2P Client的信息
2.p2p_init函数
p2p.c: : p2p_init
3.注册Action帧监听事件
driver_nl80211.c: : wpa_driver_nl80211_set_mode
3.1nl80211_mgmt_subscribte_non_ap将注册对Action帧的监听事件, 其作用就是当设备收到Action帧后, Wi-Fi驱动将发送对应的netlink消息给WPAS
driver_nl80211.c: : nl80211_mgmt_subscribte_non_ap
3.2.注册了两种类型的帧监
听事件。
· P2P Public Action帧监听事件: 根据P2P规范, 目前使用的均是802.11 PublicAction帧, 即Category的值为0x04。 目前GON、 P2P Invitation、 Provision Discovery以及Device Discoverability使用P2P Public Action帧。
· P2P Action帧监听事件: 这种类型的帧属于802.11 Action帧的一种, 其Category取值为0x7F, OUI指定为WFA的OUI( 即50-6F-9A) , 而OUI-Type指定为P2P( 取值为0x09) 。 目前Notice of Absence、 P2P Presence、 GO Discoverability使用P2PAction帧。
上述注册的Action帧监听事件对应的处理函数是process_bss_event
3.3.至此, P2P模块以及Action帧监听事件注册等工作都已完成, WPAS马上可为WifiP2pService提供P2P相关的服务了

P2pStateMachine将发送"P2P_FIND 120"命令给WPAS以触发P2P Device Discovery流程
ctrl_iface.c: : wpa_supplicant_ctrl_iface_process
ctrl_iface.c: : p2p_ctrl_find
P2P_FIND支持三种不同的Discovery Type
· P2P_FIND_START_WITH_FULL: 默认设置。 表示先扫描所有频段, 然后再扫描social channels。 这种搜索方式如图7-3所示。
· P2P_FIND_ONLY_SOCIAL: 只扫描social channels。 它将跳过“ 扫描所有频段” 这一过程。 这种搜索方式能加快搜索的速度。
· P2P_FIND_PROGRESSIVE: 它和P2P_FIND_START_WITH_FULL类似, 只不过在Search State阶段将逐个扫描所有频段
1.P2P设备扫描流程
P2P设备扫描流程从wpas_p2p_find开始
p2p_supplicant.c: : wpas_p2p_find
p2p.c: : p2p_find
p2p_supplicant.c: : wpas_p2p_scan

2.P2P设备扫描结果处理流程
当scan_res_handler不为空的时候, 扫描结果将交给scan_res_handler来处理
对P2P设备扫描时将设置scan_res_handler为wpas_p2p_scan_res_handler
p2p_supplicant.c: : wpas_p2p_scan_res_handler

P2pStateMachine的ProvisionDiscoveryState在其EA中将发送形如"P2P_PROV_DISC 8a: 32: 9b: 6c: d1: 80 pbc"的命令给WPAS 去执行, 其核心处理函数是p2p_ctrl_prov_disc
1.PD Request帧发送流程
p2p.c: : p2p_prov_disc_req
p2p_pd.c: : p2p_send_prov_disc_req

2.Action帧接收流程
PD Response帧属于Public Action帧的一种, 当收到对端设备发来的PD Response帧后, process_bss_event函数将被调用

3.PD Response帧处理流程
p2p_pd.c: : p2p_process_prov_disc_resp
p2p_supplicant.c: : wpas_prov_disc_resp
wpa_msg将发送P2P_EVENT_PROV_DISC_PBC_RESP( 字符串, 值为"P2P-PROV-DISC-PBCRESP") 消息给客户端

P2pStateMachine收到P2P_PROV_DISC_PBC_RSP_EVENT消息后, 将在
ProvisionDiscoveryState中调用p2pConnectWithPinDisplay, 该函数内部将发送P2P_CONNECT命令给WPAS
1.P2P_CONNECT处理流程
ctrl_iface.c: : p2p_ctrl_connect
p2p_supplicant.c: : wpas_p2p_connect
2.GON Request发送流程
p2p.c: : p2p_connect
p2p_go_neg.c: : p2p_connect_send

3.GON Response帧处理流程
p2p_go_neg.c: : p2p_process_go_neg_resp
当GON Confirmation帧发送出去后, wifi driver将向WPAS发送一个NL80211_CMD_FRAME_TX_STATUS消息, 而该消息将导致driver wrapper发送EVENT_TX_STATUS消息给WPAS
4.EVENT_TX_STATUS处理流程
在events.c中, 和P2P以及EVENT_TX_STATUS相关的处理函数是offchannel_send_action_tx_status
offchannel.c: : offchannel_send_action_tx_status

当Group Negotiation完成后, WPAS将新创建一个wpa_supplicant对象, 它将用于管理和操作专门用于P2P Group的virtual interface
· 一个interface对应一个wpa_supplicant对象。
· 此处新创建的wpa_supplicant对象用于GO, 即扮演AP的角色, 专门处理和P2PGroup相关的事情, 其MAC地址为P2P Interface Address。
· 之前使用的wpa_supplicant用于非P2P Group操作, 其MAC地址为P2P DeviceAddress




罗山县18647146070: wifi p2p是什么 -
闵蚁泮托: P2P是英文Peer-to-Peer(对等)的简称,又被称为“点对点”.“对等”技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上.P2P还是英文Point to Point (点对点)的简称.它是下载...

罗山县18647146070: WLAN直连是什么?怎样用
闵蚁泮托: Wi-Fi直连,最初称为Wi-Fi P2P(Peer-To-Peer),是Wi-Fi协议簇中的一个,使设备之间能够轻松连接彼此而不再需要一个中介性质的无线接入点(Access Point). 使用方法为: 1、点击手机下拉栏中的”设置“按钮.如图所示:2、选择设置页面中的”无线和网络“.如图所示:3、点击无线和网络页面中的”WLAN"按钮.如图所示:4、打开WLAN页面后,点击页面底部中的“WLAN直连”按钮.如图所示:5、点击WLAN直连后,便可以进入WLAN直连页面,使用WLAN直连了.如图所示:参考资料:搜狗百科—WLAN直连

罗山县18647146070: WiFi P2P是什么意思?有什么用处?怎么使用?
闵蚁泮托: 随着多个新笔记本电脑部件通过Wi-Fi联盟(Wi-Fi Alliance,WFA)的认证,Wi-Fi Direct日前正式成为一项具体的有形技术.在这一技术得到认证之时,甚至大多数人都还没有搞清楚Wi-Fi Direct是什么. Wi-Fi Direct是一种全新的技术,即使在没...

罗山县18647146070: 什么是p2p(wifi)
闵蚁泮托: 无线网络

罗山县18647146070: WLAN直连啥意思?有啥用??说说 -
闵蚁泮托: 尊敬的用户,您好.希望下面的回答能够对您有所帮助:Wi-Fi直连,最初称为Wi-Fi P2P(Peer-To-Peer),是Wi-Fi协议簇中得一个,使设备之间能够轻松连接彼此而不再需要一个中介性质的无线接入点(Access Point).其使用范围从网页浏览到文件传输,以及同时与多个设备进行通信,能够充分发挥Wi-Fi的速度优势.符合此标准的设备即使来着不同的生产厂商,亦可实现轻松互联.中国电信提供最优质的网络通讯服务,目前安徽电信有“嗨爆一夏”宽带优惠活动,百兆宽带免费用,iTV免费看,大家一起来嗨!活动内容建议直接通过安徽电信网上营业厅或者实体营业厅查询.

罗山县18647146070: 什么是WIFIP2P -
闵蚁泮托: 继Symbian基金会在今年早些时候成为WiFi联盟成员之后,将会支持Wi-Fi Direct点对点直连方案.WiFi联盟即将推出一项名为Wi-Fi Direct的无线直连解决方案,该规范将作为WiFi点对点对等连连的规范发行,这项解决方案可以让WiFi设备不需要通过无线热点或者路由设备就能直接互连互通.

罗山县18647146070: 安卓系统手机上的wi - Fi p2p与WLAN是什么意思?我的笔记本电脑上安装了WIFI共享精灵,手机该怎么连接? -
闵蚁泮托: 1.wifi p2p估计是wifi直连的意思,只是不同叫法,就是与其它设备、比如手机、电脑直接对联共享文件.WLAN是连接网关的,比如路由器.他们是一样的东西,只是功能作用不一样.2.笔记本能正常上网后,打开共享精灵,按提示设置好无线名称密码即可,打开手机Wlan,自动搜索无线网络,搜到你的笔记本后,输入密码登陆即可.

罗山县18647146070: upnp和wifi是什么意思? -
闵蚁泮托: Wi-Fi是一种可以将个人电脑、手持设备(如PDA、手机)等终端以无线方式互相连接的技术.Wi-Fi是一个无线网路通信技术的品牌,由Wi-Fi联盟(Wi-Fi Alliance)所持有.目的是改善基于IEEE 802.11标准的无线网路产品之间的互通性.现时一般人会把Wi-Fi及IEEE 802.11混为一谈.甚至把Wi-Fi等同于无线网际网路.UPnP 是各种各样的智能设备、无线设备和个人电脑等实现遍布全球的对等网络连接(P2P)的结构.UPnP 是一种分布式的,开放的网络架构.UPnP 是独立的媒介.在任何操作系统中,利用任何编程语言都可以使用 UPnP 设备.

罗山县18647146070: wi - fip2p连接向导是什么意思,怎么用 -
闵蚁泮托: wi-fip2p连接向导是连接无线网络的意思 . 使用方法: 打开开始菜单,点击“控制面板”.点击“网络和Internet”,点击“网络和共享中心”.点击“设置新的连接或网络”.选择“连接到Internet",点击“下一步”.单击“无线”.桌面右下角出现搜索到的无线网络,选择要连接的无线网络点击“连接”.如果无线网络有密码,则输入密码后连接即可.注:无线网络可以直接点击右下角的无线网络标识进行连接.

罗山县18647146070: wifi 正确理解是什么 -
闵蚁泮托: Wi-Fi是一种允许电子设备连接到一个无线局域网(WLAN)的技术,通常使用2.4G UHF或5G SHF ISM 射频频段.连接到无线局域网通常是有密码保护的;但也可是开放的,这样就允许任何在WLAN范围内的设备可以连接上.Wi-Fi是一个无线网络通信技术的品牌,由Wi-Fi联盟所持有.目的是改善基于IEEE 802.11标准的无线网路产品之间的互通性.有人把使用IEEE 802.11系列协议的局域网就称为无线保真.甚至把Wi-Fi等同于无线网际网路(Wi-Fi是WLAN的重要组成部分).

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网