go语言p2p原理 go语言详解( 二 )


组建P2P Group( 即P2P Network) 之前,智能终端都是一个一个的
P2P Device 。当这些P2P Device设备之间完成P2P协商后, 其中将有一个并且只能有一个Device来扮演GO的角色( 即充当AP),而其他Device来扮演Client的角色
P2P Discovery的作用很简单,就是使多个P2P Device能够互相发现并构建一个
Group 。根据规范,它包括四个主要技术子项
·** Device Discovery : 用于P2P设备搜索周围其他支持P2P的设备 。
·Service Discovery: 该Device Discovery基础上, P2P还支持搜索指定的服务 。这
部分功能属于可选项 。
·Group Formation : 用于决定两个P2P Device谁来扮演GO,谁来扮演Client 。
· P2P Invitation**: 用于激活一个Persistent Group( 见下文解释) , 或者用于邀请一个Client加入一个当前已存在的Group
P2P Device Discovery虽然也是利用802.11中的Probe Request和Probe Response
帧来搜索周围的P2P设备
为了加快搜索速度 ,  P2P为Device Discovery定义了两个状态和两个阶段 。
( 1) 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帧
再来看两个阶段,分别如下 。
·** 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和ListenState之间来回切换 。Search State中,P2P Device将发送Probe Request?。?而ListenState中,它将接收其他设备的Probe Request帧并回复Probe Response帧
两个P2P Device的Discovery流程:
· Discovery启动后,Device首先进入Scan Phase 。在这一阶段, P2P设备在其支持的所有频段上都会发送Probe Request帧 。
· Scan Phase完成后,Device进入Find Phase 。在这一阶段中, Device将在Listen和Search State中切换 。
当Device处于Find Phase中的Search State时,它将在1、 6、 11频段上发送Probe
Request帧 。注意 ,  只有当两个设备处于同一频段时,一方发送的帧才能被对方接收到
P2P规范中对Probe Request帧的要求
· SSID IE必须设置为P2P Wildcard SSID,即"DIRECT-" 。
· 必须包含P2P IE 。
· 802.11 MAC帧头的地址域① 中 ,  Destination Address域( Address1) 必须为广播
地址( FF: FF: FF: FF: FF: FF) 或者为目标设备的P2P Device Address  ,  BSSID域( Address3) 必须为广播地址
(P2P规范定义了两种类型的地址,一种是P2P Device Address,另外一种
是P2P Interface Address 。一个P2P Device在加入P2P Group前,将使用Device Address开展Device Discovery等工作 。对一个P2P Device而言 ,  其P2P Device Address是唯一的( 作用等同于MAC地址)。而当P2P Device加入P2P Group后,它和Group中其他成员交互时将使用P2P Interface Address 。另外,由于一个P2P Device可同时加入多个P2P Group, 所以在每个P2P Group中, 该设备必须使用不同的P2P Interface Address 。最后, 当一个Group结束后,Device在该Group中使用的P2PInterface Address也就相应作废了)

推荐阅读