Wi-Fi Peer-to-Peer


Wi-Fi Peer-to-Peer

Wi-Fi Peer-to-Peer(简写为P2P):P2P的商品名(brand name)为Wi-Fi Direct。它可以支持多个Wi-Fi设备在没有AP的情况下相互连接。主要应用为miracast:即在家庭中,用户可直接把手机上的内容通过P2P技术传输到电视机上和家人分享

p2p框架

这里写图片描述


P2P依赖的技术

1、 支持802.11g及以上规范:为了保证一定的传输速率,P2P要求P2P Device必须支持802.11g及以上的规范。其中,安全部分必须支持WPA2
2、WMM: Wi-Fi Multimedia的缩写,它是一种源自802.11e的QoS服务,主要针对实时视音频数据的传输。主要的应用场景就是设备之间共享媒体数据(例如前面提到的Miracast应用场景)
3、 WSC: Wi-Fi Simple Configuration,P2P Client关联到GO之前,需要先通过WSC来协商安全信息,所以WSC也是P2P的依赖技术项
4、除了以上之外,还有p2p本身的P2P Discovery、P2P Group Operation、P2P PowerManagerment以及Managed P2P Device Operation。
1)P2P Discovery是P2P所特有的,用于扫描p2p设备并进行go协商
2)P2P PowerManagement和P2P设备的电源管理有关,用于节省不必要的电力损耗
3)P2P Group Operation讲得是GO如何管理一个Group,也就是GO的工作职责
4)Managed P2P Device Operation,定义了如何在企业级环境中由对应的IT部门来统一配置和管理P2P设备


P2P组件

p2p组件,也有人称这是p2p架构,但感觉还是称之为组件更加合适点
这里写图片描述


P2P topology

这里写图片描述

一个P2P Group中只能有一个GO。而一个GO可以支持1个或多个Clients连接
由于GO的功能类似于AP,所以周围那些不支持P2P功能的STA也能发现并关联到GO。这些STA被称之为Legacy Clients

P2P Client:指支持p2p协议的设备
Legacy client: 不支持P2P功能,指不能处理P2P协议。在P2P网络中,GO等同于AP,所以Legacy Clients也能搜索到GO并关联上它。不过,由于Legacy Clients不能处理P2P协议,所以P2P一些特有功能在这些Legacy Clients中无法实现


P2P Discovery

P2P Device Discovery的工作流程包含两个状态和两个阶段
两个状态:

Search State:在该状态中,P2P Device将在2.4GHz的1,6,11频段上分别发送Probe Request帧。这几个频段被称为Social Channels。为了区别非P2P的Probe Request帧,P2P Device Discovery要求必须在Probe Request帧中包含P2P IE。注意,只有当两个设备处于同一频段时,一方发送的帧才能被对方接收到
Listen State:在该状态下,P2P Device将随机选择在1,6,11频段中的一个频段(被选中的频段被称为Listen Channel)监听Probe Request帧并回复Probe Response帧。值得指出的是,Listen Channel一旦选择好后,在整个P2P Discovery阶段就不能更改。另外,在这个阶段中,P2P Device只处理那些包含了P2P IE信息的Probe Request帧。

扫描二维码关注公众号,回复: 1543707 查看本文章

两个阶段:

Scan Phase:扫描阶段。跟无线网络扫描一样,P2P Device会在各个频段上发送Probe Request帧(主动扫描)。P2P Device在这一阶段中不会处理来自其他设备的Probe Request帧。这一阶段过后,P2P Device将进入下一个阶段,即Find Phase。
Find Phase:虽然从中文翻译来看,Scan和Find意思比较接近,但P2P的Find Phase却和Scan Phase大不相同。在这一阶段中,P2P Device将在Search State和Listen State之间来回切换。Search State中,P2P Device将发送Probe Request帧,而Listen State中,它将接收其他设备的Probe Request帧并回复Probe Response帧。

流程图如下:
这里写图片描述


P2P Invitation

这里写图片描述
P2p inviation阶段,及p2p go negotiation都是在同一个listen channel内完成的,所发的
也都是Action frame。Inviation后,response frame回应还没有建立group,于是接下来就
进行go的协商,并建立一个group


Group Formation

GO Negotiation: 在这一阶段中, 两个Device要协商好由谁来做GO
GO协商共包含三个类型的Action帧:GO Req、GO Resp、GO Confirm

GO Req和GO Resp包含GO Intent的IE,是一个0到15的整数值,通过这两个值的大小来确定GO,具体方法如下图。如果Intent不相等时,谁大谁做GO;如果相等时且小于15时,根据GO Req的随机数Tie Breaker来决定,Tie Break为1就自己做GO,否则对方做GO;如果相等且等于15,GO协商失败,这种情况说明A和B都必须成为GO,谁也不能妥协,那么只能以失败告终

这里写图片描述

GO Negotiation

交互过程如下
这里写图片描述
封包情况如下
这里写图片描述


Beacon Frame

Group形成后,GO就会向外发生Beacon Frame并携带group formation=1
这里写图片描述


Auth

当Client获取到GO端的beacon包的,那么它会解析beacon包中的是否有WSC IE,如果 通过判断符合接入条件的时候, Client会尝试去和GO进行认证,向GO发送Auth包,GO接收到后,也回应一个status成功Auth
这里写图片描述


Assoc

  • Client发送Association Request 关联请求包,并附带WSC IE 信息,这个信息很重要,目的是告诉GO我这边使用的协议的802.1x WPS 1.0 协议,我们接下来的M1-M8过程也将会遵守这个协议进行交互,你那边可要准备好哦,如果不能接受这种协议的话,请及时告诉我
  • GO端发现,放心啦,你这种协议我是支持的,让你关联进来完成下面的信息交互过程吧! 然后GO就会发送一个Association Response包给client,完成关联
    这里写图片描述

EAPOL-Start开始WSC的安全信息配置过程

本来应该是, 的,但一直抓取不到EAPOL-Start的包……
Assoc rsp后,Client要发EAPOL-Start来启动EAPOL-WSC流程,在Client和GO双方开展EAP-WSC流程前,GO需要确定Client的Identity以及使用的身份验证算法。
该过程涉及三次EAP包交换:

1) GO发送EAP-Request/Identity以确定Client的ID。
2) 对于打算使用WSC认证方法的Client来说,它需要在回复的EAP-Response/Identity包中设置Identity为”WFA-SimpleConfig-Enrollee-1-0“
3) GO确定Client的Identity为“WFA-SimpleConfig-Enrollee-1-0”后,将发送EAP-Request/WSC_Start包以启动EAP-WSC认证流程。(即接下来的WSC)

这里写图片描述


WSC (Wi-Fi Simple Configuration)

Wi-Fi Simple Configuration(以后简写为WSC):该项技术用于简化办公室环境中无线网络的配置和使用。举一个简单的例子,配置无线网络环境时,网管需要首先为AP设置SSID、安全属性(如身份认证方法、加密方法等)。然后还得把SSID、密码告诉给该无线网络的使用者。可是这些安全设置信息对普通大众而言还是有些复杂。而有了WSC之后,用户只需输入PIN码(Personal Identification Number,一串数字),或者摁一下专门的按钮(WSC中,该按钮被称为Push Button)甚至用户只要拿着支持NFC的手机到目标AP(它必须也支持NFC)旁刷一下,这些安全设置就能被自动配置好。有了这些信息,手机就能连接上目标无线网络了。显然,相比让用户记住SSID、密码等信息,WSC要简单多了主要包括

两种快速接入的方法:
1) PIN (personal identifiy number)
2) PBC (push button configuration)

WSC规范早期的名字叫Wi-Fi Protected Setup(简写为WPS,就目前抓取包信息中还是使用WPS命名方式)。WFA推出WPA后不久,WPS规范便被推出。随着WPA2的出现,WFA又制订了WPS的升级版,即WSC

WSC组件

这里写图片描述

  • Enrollee的角色类似于supplicant,它向Registrar发起注册请求。
  • Registrar用于检查Enrollee的合法性。另外,Registrar还能对AP进行配置。
  • AP也需要注册到Registar中。所以,从Registrar角度来看,AP也是Enrollee。

AP和Registrar以及Enrollee三者交互,Enrollee从Registrar那获取AP的安全配置信息,然后Enrollee利用该信息加入AP提供的无线网络
1)日常生活中,支持WSC的无线路由器兼具AP和Registrar的功能。这种AP在规范中被称为Standalone AP。Android智能手机扮演Enrollee的角色。
2)如果AP和Registrar分别由不同实体来实现,这种Registrar也被称为External Registrar

EAP-WSC流程

1 EAPOL-Start
2 identity
1 WSC_Start
8 M1-M8
1 WSC_Done
1 EAP-Failure
共14次交互

这里写图片描述

封包如下
这里写图片描述

WSC_Start

GO确定Client的Identity为”WFA-SimpleConfig-Enrollee-1-0”后,将发送EAP-Request/WSC_Start包以启动EAP-WSC认证流程。这个流程将涉及M1~M8相关的知识
这里写图片描述

M1-M8

1)M1-M7,主要进行安全信息的交互。
2)最终在Client接收到的M8中,Client将会获取到GO的安全设置信息。Client获取到这些信息以后,一般会保存起来并修改到p2p_supplicant.conf 文件中,后面Client就可以用这个配置文件正常的连接GO了
3)Client处理完M8消息后,将回复WSC_DONE消息给GO,表示自己已经成功处理M8消息
4)GO发送EAP Failure以及Deauthentication帧给Client。Client收到该帧后将取消和AP的关联
5)GO将继续发送Beacon Frame,此时携带group formation为0了。Client将重新扫描周围的网络。由于Client已经获取了GO的配置信息,所以它可以利用这些信息加入GO所在的网络
6)接下来就是Client跟GO进行认证及4次握手连接的过程了。这个跟wifi的WPA2连接过程一样


EALOP 4-way handshake

第一次握手AP–>STA,PMK已经预设好了,这个AP时候发送一个随机产生的ANonce数。
第二次握手STA–>AP,STA根据接收到的随机数ANonce,自己也生成一个随机数BNonce,以及PMK,经过一系列算法AES,产生了PTK了,MIC是PTK的其中一部分。然后把BNonce加PTK的MIC发给AP
第三次握手,AP接收到BNonce后,使用相同的方法生成PTK,并取出其中的MIC密钥对第二次握手包进行较验,如果相同,那么AP知道这个时候STA拥一个跟它一样的PMK。这个时候AP有了PTK后就可以对它第一次握手生成的EAP包进行检验生成一个MIC序列号,并发送给STA
第四次握手,STA接收到这个包后,同样执行跟AP的检验操作以确认AP拥有跟自己一样的PMK。然后发送ACK说明自己确实安装PMK,连接已经成功了。接下来系统可以进行DHCP的操作了

这里写图片描述

PSK(Pre-Shared Key, 预共享密钥): 口令(passphrase)经PSK映射转换算法处理后得到的结果。
PMK(Pairwise Master Key, 成对主密钥): 最高等级的密钥,由PSK生成。
GMK(Group Master Key, 组主密钥): 由认证器(接入点)生成,是组临时密钥 (GTK)的种子。
4次握手: 使用伪随机函数来创建和分发动态加密密钥的过程。
Nonce: 一个随机生成的值,只使用一次。
PTK(Pairwise Transient Key, 成对临时密钥): 最终用于加密单播数据流的加密密钥。
GTK (Group Temporal Key, 组临时密钥):最终用于加密广播和组播数据流的加密密钥。


p2p的整个流程如下

这里写图片描述


如何抓取p2p包

1,用三台机器,分别抓取1,6,11 channel的包,同时查看action frame,即可得知两台设备相互扫,并决定谁来当GO的过程(虽然一台机也可以,但很容易抓丢)

2,p2p的连接过程,这个得先知道通过go协商后,决定用哪个channel来当operation channel,即可抓取。可用来查询Auth、Assoc、WSC的交互过程、EAPOL-Key交互及DHCP过程


P2P连接过程中debug log

使用Notepad++软件使用正则表达式进行搜索下面的字符A如下:

Building Message|WPS-CRED-RECEIVED|CTRL-EVENT-EAP-METHOD|CTRL-EVENT-EAP-PROPOSED-METHOD|CTRL-EVENT-EAP-STARTED|Associated with|ASSOCIATING|NL80211_CMD_CONNECT|Add interface|P2P-GO-NEG|P2P-DEVICE-FOUND|P2P-PROV|GO Negotiation Response|Create a new interface|Request to start group negotiation|Prepare channel|operating channel|GO Negotiation Request|GO Negotiation Request|GO Negotiation Response|GO Negotiation Confirm|GO_NEG|P2P_CLIENT|Added interface|WPS IE for Probe Request|scan request|SCAN_RESULTS|Add new id|priority group|selected based on WPS IE|Request association with|Trying to associate with|Association Request|Connect request send successfully|ASSOCIATED|RX EAPOL from|AUTHENTICATING|SUPP_BE|EAP entering state|WPS-SUCCESS|WPS-CRED-RECEIVED|WPS-CRED-RECEIVED|P2P-GROUP-FORMATION|PROVISIONING|EAP-Failure|unauthorized|CTRL-EVENT-DISCONNECTED|Tear down peers|AP-STA-CONNECTED|Invitation Request|Invitation from|Use peer preference op_class|No forced channel from invitation processing|Using original operating class and channel|Invitation Response|dnsmasq|go_intent|4WAY_HANDSHAKE|GROUP_HANDSHAKE|CTRL-EVENT-CONNECTED|P2P-GROUP-STARTED|P2P-GROUP-STARTED|Sending discover|WPS-PBC-ACTIVE|CTRL-EVENT-DISCONNECTED|EAP-Failure|CTRL-EVENT-EAP-FAILURE|Auto connect enabled|rtsp read more fail|Connection reset by peer|miracast disconnected|P2P_GO_NEGOTIATION_FAILURE_EVENT|P2P-GROUP-FORMATION-FAILURE

如果使用logcat,可以直接使用logcat -v time|grep -E “A” (ps:把A替换成上面的字符串即可)


P2P Wifi Direct与Bluetooth的区别

  • 应用场景
    1) wifi direct和蓝牙都是p2p直连。
    BT的主要应用场景是蓝牙耳机,传文件和连接周围的可穿戴设备(ble低功耗)
    wifi direct的主要场景是wifi display(重要方向)和传文件。 对于传文件这一重叠场景。
    2)BT的优势是上层应用成熟,实现是集成在android系统里,所有设备互通。弱点是太慢,只适合传小文件。wifi direct传文件优点是速度快,但是缺少统一的上层协议支持,所以现在市面上很多app都支持wifi快传,但是必须两个设备都安装了同一个app,否则不兼容。

  • 功耗(目前来说最为硬商的事情)
    1)蓝牙技术联盟表示,在蓝牙4.0低功耗的支持下,即使由一个纽扣电池供电,使用时间也可以长达一年,甚至更长(低数据传输)
    2)根据Wi-Fi Direct白皮书,该标准的部分能源管理功能以Wi-Fi Power Save和WMM-PowerSave规范为基础,这些规范采用了被称为P2P-PS和P2P-WMM-PowerSave的机制。P2P规范引入了两种全新的节能机制:机会节能与缺席通知。这些机制可结合使用,以实现休眠时间的最大化。缺席通知机制可以通报计划中的缺席(包括一次性或定期性缺席);当连接的所有Wi-FiDirect设备进入休眠时,机会节能机制能够帮助负责管理小组的Wi-FiDirect设备也进入休眠状态,从而节约能源。需要注意的是,同蓝牙4.0有些相似,Wi-Fi Direct“能源管理机制只用于仅包括Wi-FiDirect设备的小组。如果小组中存在传统设备,则不能使用能源管理功能。”

  • 传输速度
    自从蓝牙3.0引入了WLAN,其传输速度提升了8倍到25Mbps,而据称蓝牙4.0会和3.0拥有同样的速度。”Wi-Fi联盟承诺Wi-Fi Direct的速度可达250Mbps

  • 传输距离
    1)据wi-fi联盟声称,Wifi Direct设备彼此间联系最大距离可达656英尺(200米)
    2)蓝牙特别兴趣小组表示,蓝牙4.0最大距离不取决于规范,而取决于设备的功能。传输距离至少200英尺(61米)

  • 安全性
    1)wifi direct使用AES 256位加密技术
    2)BT4.0使用AES 128位加密技术


猜你喜欢

转载自blog.csdn.net/gh201030460222/article/details/79872617