WiFi Direct 的协议是Wi-Fi联盟发展、支持与授予认证的一套软件协议,也被称为Wi-Fi点对点(Wi-Fi Peer-to-Peer,简称P2P)。
这套协议允许无线网络中的设备无需通过无线路由器即可相互连接,以点对点的方式直接与另一个 WiFi 设备连线,进行数据高速传输。
协议基础
-
架构基础:Wifi direct 架构再原有的 802.11a、802.11g、802.11n之上,但不支持 802.11b
-
支持模式:支持一对一以及一对多模式,理论上,只要支持 802.11g、n或者ac的设备都可以通过软件升级实现 WiFi direct 的基本功能。
功能与特性
-
连接方式:允许 WiFi 设备直接连接,无需通过 AP,从而简化连接流程,提高了数据传输的便捷性
-
传输性能:在传输速度与传输距离方面比蓝牙有大幅度提升,最大传输距离可达 200 米,最大传输速度为 250Mbps
-
加密机制:支持 WPA2 加密机制,确保数据传输的安全性
实现方式
-
软件实现:Wi-Fi Direct主要通过软件协议实现,不需要额外的硬件支持。但一些高级功能可能需要精细的定时管理和状态切换,这些可能会依赖于硬件的优化。
-
设备发现与连接:设备发现过程包括scan和find两个阶段,通过这两个阶段,设备能够找到并连接到其他支持Wi-Fi Direct的设备。连接过程中,设备会协商各自的角色(如GO和GC),并完成认证和密钥协商等步骤。
协商过程,GO怎么选出来的
Go Intent
GO Intent 是一个 0-15 的整数值,它代表了设备希望成为 GO 的意愿强度。值越大,表示设备越希望成为 GO
协商过程
- 发送 GO req:
-
当设备 A 想要与另一个设备 B 建立 WIFI Direct 连接时,它会首先发送一个 GO Negotiation Request 帧中给设备B
-
GO Negotiation Request 帧中包含了设备 A 的 GO Intent 值
- 接收并响应 GO Negotiation Req
-
设备B接收到GO Negotiation Request帧后,会读取其中的GO Intent值,并生成自己的GO Negotiation Resp帧进行响应
-
GO Resp帧中也包含了设备B的GO Intent值。
- 比较 GO Intent:
-
在双方都发送了GO Intent值之后,它们会根据以下规则来比较并确定GO的角色:
- 如果两个设备的GO Intent值不相等,那么值较大的设备将成为GO,值较小的设备成为Group Client(GC)。
- 如果两个设备的GO Intent值相等且小于15,那么会进一步比较GO Req帧中的随机数Tie Breaker。如果Tie Breaker为1,则发送该GO Req的设备成为GO;否则,接收方成为GO。
- 如果两个设备的GO Intent值都等于15,且Tie Breaker也无法决定,那么GO协商将失败。这通常表示两个设备都坚持要成为GO,无法达成共识。
- 发送 GO confirm
-
一旦确定了GO和GC的角色,负责成为GO的设备会发送一个GO Confirm帧来确认协商结果。
-
收到GO Confirm帧后,GC会确认协商成功,并开始后续的连接和通信过程。
细节问题
- P2P 协商的包会带什么信息?协商到哪个信道是怎么决定的?
- 设备信息:mac地址、设备类型、设备名称
- GO Intent 、Tie Breaker
- 信道信息:
- Operating Channel: 设备支持的信道列表
- Regulatory Class: 设备支持的监管类
- Channel Number: 设备支持的具体信道号
- 配置方法:WPS Method:PIN、PBC(Push Button Configuration)
- 组信息:
- Group ID:组的唯一标识, direct-xx-abcd
- Group BDDID:组的 BSSID
协商配置方式 PBC 的协商过程
WPS (配置方式)有好几种模式:
- wps PIN :发起方生成一个 PIN 码,接收方用户在界面上输入 PIN 码
- wps PBC:发起方点击配置按钮,接收方点击接受,常见
- wps NFC:发起方生成一个包含 WPS 配置信息的 NFC 标签或 NFC 消息;接收方 用户靠近发起方设备,接收读取 NFC 信息
P2P设备之间的PBC(Push Button Configuration)协商过程涉及到Provision Discovery和Group Owner Negotiation两个主要步骤。以下是详细的协商过程:
-
Provision Discovery
- 请求:设备A发送Provision Discovery Request给设备B。 这个是单播包,以xx为例,是Framework层下发的配置,默认用的是 wps.PBC 的方式
- 响应:设备B发送Provision Discovery Response给设备A。
- 信息交换:交换设备信息、支持的信道列表、配置方法等。
-
Group Owner Negotiation
- 请求:设备A发送GO Negotiation Request给设备B。
- 响应:设备B发送GO Negotiation Response给设备A。
- 信息交换:交换GO Intent、信道信息、Tie Breaker等。
-
抓的 sniffer 查看 https://files.cnblogs.com/files/caoshikui/sniffer12.zip?t=1752200362&download=true
总过程如下:
![image]()
3.1 从下图可看到 provision discovery request 中带了 PBC 的方式来请求对方使用这种模式进行确认

3.2 对方发送 provision discovery Request,本端上报的事件为:WifiP2pMonitor.P2P_PROV_DISC_PBC_REQ_EVENT

3.3 收到 provision discovery request,后,回复 provision discovery response, 其中携带的 PBC 确认方式,对方上报的事件为:WifiP2pMonitor.P2P_PROV_DISC_PBC_RSP_EVENT

PBC 协商的具体步骤
- Provision Discovery:
- 请求:设备A发送Provision Discovery Request给设备B,请求中包含支持的WPS方法(包括PBC)。
- 响应:设备B发送Provision Discovery Response给设备A,确认支持的WPS方法(包括PBC)。
- Group Owner Negotiation:
- 请求:设备A发送GO Negotiation Request给设备B,请求中包含WPS方法为PBC。
- 响应:设备B发送GO Negotiation Response给设备A,确认使用PBC方法。
wifi direct 能否与热点共存?
共存的可能性
技术层面:从技术角度来看,Wi-Fi Direct和热点都使用Wi-Fi技术,但它们工作的模式和目的不同。因此,在理论上,它们可以在同一设备上共存。
设备实现:然而,是否能在同一设备上同时启用Wi-Fi Direct和热点,还取决于设备的硬件和软件实现。一些设备可能支持这种共存,而另一些则可能不支持。
操作系统版本:Android操作系统的不同版本可能对这两种功能的支持有所不同。因此,设备的操作系统版本也可能影响Wi-Fi Direct和热点的共存能力。

浙公网安备 33010602011771号