WIFI p2p连接总结

p2p 设备角色

go 为 group owner,类似 ap 的功能,控制 p2p 组,每个 group 只有一个 go

gc 是 client,为连接 go 的设备,是组成员

P2P 扫描

p2p discovery 利用 probe request 和 probe response 帧来搜索周围的 p2p 设备,probe request 必须包含 p2p 的 ie。

device discovery 定义了两个阶段和两个状态

1.Scan Phase:扫描阶段,P2P device 会在各个频段发送 probe request(主动扫描),p2p device 在进行该扫描的时候不会处理来自其他设备的 probe request 帧,这一阶段后,p2p device 会进入 下一阶段(Find Phase)

2.Find Phase:找寻阶段,在这个阶段,p2p device 将会在 search state 和 Listen State 之间来回切换。Search State 中,P2P Device 将发送 Probe Request 帧,而 Listen State 中,它将接收其他设备的 Probe Request 帧并回复 Probe Response

search state:此状态下,P2P Device 将在 2.4GHZ 的 1/6/11 频段上分别发送 Probe Request 帧。为了与非 p2p 的 probe request 进行区分,p2p 的 probe request 帧会包含 p2p 的 ie,表示这是一个 p2p 的探测帧

listen state:p2p device 将随机选择在 1/6/11 频段中的一个频段来监听 probe request 帧,选定的信道成为 listen channel,整个 discovery 阶段都不会更改,listen 状态的持续时间 是 100TU 的随机整数倍(默认在 1 到 3 之间,厂商可以修改),随机是为了避免两个设备同时进入 listen 和 search 导致始终无法发现对方

Group Formation

设备发现后就可以进行 组协商了,主要作用是决定哪个设备当 GO,整个协商过程包括三次握手

Group Owner Intent 属性(成为 go 的渴望程度,最大值 为 15,15 表示该设备一定要成为 go)大的一方会成为 go,若相等的话,tie breaker bit 是 1 的成为 GO,若都是 15 则协商失败

第一次握手:设备 A 向设备 B 发送 GO Negotiation Request(包含了 Intent 属性值和 breaker 属性值),B 在收到后进行比较,此时 B 可以确定自己本次 P2P 连接时的角色了

第二次握手:设备 B 向 A 发送一个 GO Negotiation Response 帧,该帧包含了 B 的 Intent 属性值和 breaker 属性值,B 的 breaker 属性值为第一次握手时 A 的 breaker 属性值取反,因此不可能相同

第三次握手:设备 A 向 B 发送一个 GO Negotiation Comfirmation 帧,该 Confirmation 的作用之一时作为协商的确认,同时确定了后面 P2P 连接所使用的信道

在 Go 协商时设备 A 向设备 B 发送 GO Negotiation Request,如果 B 没有准备好的话,这时候 B 会先保存下 A 的协商信息,然后发送一个 GO Negotiation Response (包含 B 的协商信息)给 A,B 把状态设置为 P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE,表示当前 P2P 连接不可用,A 在收到该 response 之后,保存 B 的协商信息,切换到 Listen state,等待 B 的 P2P 连接初始化完成,并等待 B 发送GO Negotiation Request,这种情况下第一次协商没有确定任何东西,第二次协商才是正常流程

wps 流程

协商一个公共的 key,wps 流程结束后 ,gc 会自动断开和 go 的关联,然后重新发起连接,再次关联完成后可以进行四路握手

四路握手

以前面的公共 key 作为参数协商处 PTK 和 GTK,之后进行加密数据传输

相关推荐
Try1harder1 小时前
ESP32-idf学习(二)esp32C3作服务端与电脑蓝牙数据交互
物联网·嵌入式·蓝牙·乐鑫·esp32c3
技术干货贩卖机2 小时前
0基础 | 开发环境 |51单片机编译环境 Keil C251和C51,STM32的编译环境Keil 5 MDK-ARM
arm开发·stm32·嵌入式硬件
sukalot2 小时前
Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(四)
驱动开发
Freddy_Ssc3 小时前
ESP32之阿里云IoT物模型通信(MQTT-TLS连接通信),基于VSCode环境下的ESP-IDF开发(附源码)
vscode·物联网·阿里云·esp32·物模型
老条码新物联数字派4 小时前
#3 物联网 的标准
物联网
风靡晚5 小时前
一种改进的CFAR算法用于目标检测(解决多目标掩蔽)
人工智能·算法·目标检测·目标跟踪·信息与通信·信号处理
Thomas_YXQ5 小时前
Unity3D 测试驱动开发(TDD)框架设计
java·开发语言·驱动开发·全文检索·unity3d·lucene·tdd
小杨xyyyyyyy6 小时前
计算机网络 - UDP协议
网络·网络协议·计算机网络·面试·udp
秋‍.6 小时前
HTTP与HTTPS的区别
网络协议·http·https
vvilkim11 小时前
深入解析TCP Keep-Alive机制:原理、作用与最佳实践
网络·网络协议·tcp/ip