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

协商过程

  1. 发送 GO req:
  • 当设备 A 想要与另一个设备 B 建立 WIFI Direct 连接时,它会首先发送一个 GO Negotiation Request 帧中给设备B

  • GO Negotiation Request 帧中包含了设备 A 的 GO Intent 值

  1. 接收并响应 GO Negotiation Req
  • 设备B接收到GO Negotiation Request帧后,会读取其中的GO Intent值,并生成自己的GO Negotiation Resp帧进行响应

  • GO Resp帧中也包含了设备B的GO Intent值。

  1. 比较 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,无法达成共识。
  1. 发送 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两个主要步骤。以下是详细的协商过程:

  1. Provision Discovery

    • 请求:设备A发送Provision Discovery Request给设备B。 这个是单播包,以xx为例,是Framework层下发的配置,默认用的是 wps.PBC 的方式
    • 响应:设备B发送Provision Discovery Response给设备A。
    • 信息交换:交换设备信息、支持的信道列表、配置方法等。
  2. Group Owner Negotiation

    • 请求:设备A发送GO Negotiation Request给设备B。
    • 响应:设备B发送GO Negotiation Response给设备A。
    • 信息交换:交换GO Intent、信道信息、Tie Breaker等。
  3. 抓的 sniffer 查看 https://files.cnblogs.com/files/caoshikui/sniffer12.zip?t=1752200362&download=true
    总过程如下:
    image

3.1 从下图可看到 provision discovery request 中带了 PBC 的方式来请求对方使用这种模式进行确认
image

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

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

PBC 协商的具体步骤

  1. Provision Discovery:
    • 请求:设备A发送Provision Discovery Request给设备B,请求中包含支持的WPS方法(包括PBC)。
    • 响应:设备B发送Provision Discovery Response给设备A,确认支持的WPS方法(包括PBC)。
  2. 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和热点的共存能力。

posted on 2024-08-07 20:25  caoshikui  阅读(1300)  评论(0)    收藏  举报