谈谈对WiFi P2P的理解

概述

Wifi peer-to-peer(也称Wifi-Direct)是Wifi联盟推出的一项基于原来WIfi技术的可以让设备与设备间直接连接的技术,使用户不需要借助局域网或者AP(Access Point)就可以进行一对一或一对多通信。这种技术的应用场景非常多,只要设备支持WiFiP2P的协议,就可以实现传文件,屏幕共享(Miracast),甚至是联机玩游戏,而周围没有任何可以上网的设备。

P2P架构简介

Wifi P2P架构中定义了3个组件,它们分别为:
P2P Device: 支持Wifi P2P协议的设备,比如手机、电脑、平板等,它是以下角色的实体,没成为Group Owner或Group Client前的设备都是“P2P Device”。
P2P Group Owner: 简称GO,是协议中的一种角色,相当于AP,一个组里只有一个GO。
P2P Group Client: 简称GC,是另一种角色,一个组里可以有多个GC。

通过以上可知,Wifi P2P的拓扑结构是1:n的,其中多个GC连接一个GO,这样的一个结构可以称为一个组,如下图所示。

谈谈对WiFi P2P的理解

P2P Discovery介绍

P2P Discovery主要是让设备间快速发现和建立连接,在官方的规范中(Wi-Fi Peer-to-Peer (P2P) Technical Specification),它包含以下4项子技术:

  • Device Discovery
    促使两个P2P设备到达一个公共信道并交换设备信息(例如设备名称和设备类型),即设备间的发现。
  • Service Discovery
    是一个可选功能,允许P2P设备在形成连接之前发现可用的更高层服务。
  • Group Formation
    用于协商哪个设备将要称为GO,并形成一个新的组。
  • P2P Invitation
    用于调用一个持久的P2P组( Persistent P2P)或邀请一个P2P设备加入一个已经存在的组。

Device Discovery 流程

设备发现流程利用了IEEE 802.11标准中的Probe Request和Probe Response帧来搜索周围的P2P设备,并且要求Probe Request帧中的数据必须包含P2P IE信息,否则不会响应。

设备发现流程分为ScanFind两个阶段,其中Find阶段又分有ListenSearch两个状态,下面分别进行详细讲解。

Search State
搜索状态,在这个状态中,设备会分别向1、6、11频道发送包含P2P IE信息的Probe Request帧,这几个频段被称为Social Channels。

Listen State
监听状态,在这个状态中,设备会在1、6、11频段中随机选择一个进行监听,若收到带有P2P IE信息的Probe Request帧,则会发出Probe Response帧进行响应)。值得一提的是,设备一旦选择好监听的频段,则在整个发现流程中都不会改变。

Scan Phase
扫描阶段,P2P Device会向各个频段发送Probe Request帧,在这个阶段中,设备只发送而不会响应Probe Request帧,完成后进入下一阶段,即Find阶段。

Find Phase
发现阶段,从名字上看,发现和扫描差不多,但实际上它们的工作大不相同。在这个阶段中,设备会在Listen State和Search State两个状态之间来回切换。在Search State,设备发出Probe Request帧,而在Listen State,设备接收Probe Request帧并发出Probe Response帧进行响应。

注意
为什么选择1、6、11频段作为Social Channels,涉及到了物理层的知识,有兴趣的可以自己了解一下。另外,只有在同一频段上,设备间才能交换信息。

下图为Device Discovery的完整流程图。

谈谈对WiFi P2P的理解
通过上图可以了解Device Discovery的完整流程:

  • 上层发送开始发现的命令后,设备首先会进入Scan阶段,向各个频段发送Probe Request帧。
  • 接着进入Find阶段的Listen状态,可以看到设备1和设备2的监听的频段并不相同(设备1监听channel 1,设备2监听channel 6),而且Listen状态的持续时间为100TU的随机整数倍,这个整数在minDiscoverableInterval和maxDiscoverableInterval之间,默认为1和3,而厂商可以修改这两个值。随机是为了避免设备同时进入Listen状态和Search状态,导致始终无法发现对方。
  • 接着切换到Search状态(设备1),分别向1、6、11频段发送Probe Request帧,因为设备2监听的是频段6,所以只能接收到设备1在频段6发出的Probe Request帧,并回复Probe Response帧,设备1收到Probe Response帧后,便通知上层成功发现设备。

Group Formation

完成设备发现之后,就可以进行组协商了。上面提到组协商的主要作用是决定哪个设备当GO,并创建一个新的组。整个协商过程包括三次握手,如下图所示。
谈谈对WiFi P2P的理解
可以看到GO Negotiation Request帧和GO Negotiation Response帧中包含了一个Group Owner Intent属性,这个属性代表设备成为GO的渴望程度,最大值为15(15表示该设备一定要成为GO)。设备间通过比较Group Owner Intent属性的值决定谁成为GO,规则如下。
谈谈对WiFi P2P的理解

  • 当两个设备的Group Owner Intent属性的值不相等时,值大的成为GO。
  • 若两设备的值相等,则判断是否小于15,若小于15,Tie breaker bit是1的成为GO。
  • 若两设备的值都是15,说明两个设备都想要成为组员,则此次组协商失败。