谈谈对WiFi P2P的理解

谈谈对WiFi P2P的理解

  • 概述
    • P2P架构简介
  • P2P Discovery介绍
    • Device Discovery 流程
    • Service Discovery
    • Group Formation
    • P2P Invitation

概述

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的理解_第1张图片

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的理解_第2张图片
通过上图可以了解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帧后,便通知上层成功发现设备。

Service Discovery

服务发现流程可在设备成功发现后的任何时间被执行,例如在成功发现设备后且在组形成之前。服务发现流程利用的是 Generic Advertisement Service(GAS)帧,类似与Probe Request和Probe Response帧,它也是IEEE 802.11定义的。这个协议具有很高的扩展性和灵活性,可发现不同的高层服务协议类型,比如Bonjour和UPnP协议。

服务发现的流程也很简单,跟设备发现流程相似,下图是设备成功发现后继而进行服务发现的流程。
谈谈对WiFi P2P的理解_第3张图片

通过服务发现流程,一台设备可以获得另一台设备的一下信息:

  • 所有服务的列表
  • 单个服务的信息
  • 多个服务的信息
  • 服务信息是否发生变化

跟设备发现流程类似,服务发现流程也涉及到请求帧(Service Discovery Query frame)与响应帧(Service Discovery Response frame),这两个帧是GAS帧中的一个字段。设备发现网络的意图不同,请求帧与响应帧的字段也会不同,下面以请求帧为例。

意图 TLV(Type-Length-Value)数量 Service Protocol Type Query Data Length
请求全部服务 1 0 0
请求单种类型的全部服务 1 表1的非0值 0
请求一个特定类型的一个特定服务 1 表1的非0值 相应Query Data的长度
请求多种类型的多个服务 多个 表1的非0值 相应的Query Data的长度

谈谈对WiFi P2P的理解_第4张图片

解释: 在请求帧中,TLV是请求帧和响应帧的一个字段,包括Query Data Length、Service Protocol Type、Service Transaction ID和Query Data本身,如下图所示。

谈谈对WiFi P2P的理解_第5张图片
因此,如果设备A想请求设备B的UPnP类型的所有服务,则请求帧中只需包含一个TVL,且Length的值为0,Service Protocol Type的值为1。

Group Formation

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

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

P2P Invitation

P2P邀请流程是一个可选项,以下情况有可能会用到:

  • 一个P2P GO邀请一个P2P Device作为GC加入组。
  • 一个P2P GC邀请一个P2P Device加入其所在的组,目的是为了使用P2P Device的一些服务。
  • 请求调用一个持久的P2P组,其中一个设备该组曾经的GO。

类似于设备发现和服务发现流程,邀请流程也涉及到P2P Invitation Request 帧与P2P Invitation Response帧。不同的情况,这些帧的内容也不同。以上面第一种情况为例,即一个P2P GO邀请一个P2P Device作为GC加入组。

P2P Invitation Request应包含P2P Group ID、P2P Group BSSID、信道列表、操作信道和配置超时属性,信道列表属性应指明P2P设备作为P2P组的操作信道可以支持的信道。操作信道和配置超时属性设置如下:
操作信道属性表明P2P组的工作信道;配置超时属性中的GO Configuration Timeout字段应设置为0。

P2P Invitation Response应包括信道列表和配置超时属性,信道列表指明了P2P客户端可以支持的操作信道。信道列表中的信道只能包含来自P2P邀请请求帧中Channel List属性的信道。Configuration Timeout属性应指示在P2P邀请响应指示成功后,P2P客户端准备加入P2P组所需的配置时间。在没有P2P设备通常支持的信道或者响应的P2P客户端不支持当前操作信道的情况下,P2P邀请响应帧应包括状态属性,状态码字段设置为“失败;没有公共信道”。

你可能感兴趣的:(WifiP2P)