Wi-Fi Aware(也称wifi感知、NAN等)协议详述
时间:2022年12月03日 人气:...

在早期叫做Neighbor Awareness Networking,所以被简称为NAN,后来最新的协议规范改名为Wi-Fi Aware,中文一般叫做wifi感知技术,最新的规范可在联盟官网查询,本文根据Wi-Fi_Aware_Specification_v3进行分析。

一. NAN是啥?有啥用?

主要用例和优势,用官方的讲就是:

Wi-Fi Aware使移动体验更加愉快和富有成效,因此用户可以从中受益。诸如经营场地、交通枢纽和零售店等的企业可以通过 Wi-Fi Aware提高生产率、扩大品牌知名度并使服务得到更多的使用。

• 无需接入网络,就可向支持 Wi-Fi Aware 的打印机安全地发送文件;

• 在展览会或会议上发现同事,在穿过展厅时,接收有关展位、即将开始的演示或其他感兴趣的事项的提示信息;

• 无需互联网连接,就可在路过时查看餐馆菜单并预定座位,即使餐馆尚未开门也一样;

• 无需携带原始身份证,能够以你喜欢的形式出示身份信息。

Wi-Fi Aware 使设备制造商和应用开发商能够帮助用户更深入地洞察周围的世界,用他们接收的信息创造个性化体验,重塑我们与环境互动的方式。

说了这么多,可能还是不甚明白这个是咋样的,所以还是联盟演示的视频变现的最为直观:

这样看来,我感觉这才是推广广告的最有用功能啊,脑补一下以后进入某些商厦手机就蹦出各种打折信息......这可比之前那种热点广告要高级。

二. Wi-Fi Aware 功能

用一张联盟的图来总结其功能为:

1. Wi-Fi Aware 主要功能

2. Wi-Fi Aware 架构

3. 硬件要求

• 802.11n 2.4 GHz 是必须支持的

• 802.11n和802.11ac 5 GHz 是可选的

• 设备时钟精度为+/-500 ppm 或更好

▪ 工作温度为 0-80˚C

• 必须支持 OFDM data rates: 6, 9, 12, 18, 24, 36, 48 and 54 Mbps

▪ NAN Synchronization and NAN Discovery Beacon frames 必须支持以 6 Mbps速率发送

▪ NAN Service Discovery Public Action frames 必须支持以 OFDM data 速率发送

• 支持测距的设备必须支持FTM协议的作为 initiator 和 responder 

▪ 当测距服务发现初始化时,订阅型设备应该是 FTM initiator角色

三. 基本概念

每一个支持NAN的设备就可以叫做NAN Device

多个NAN Device组成的集群就叫做NAN Cluster

NAN cluster拓扑如下图所示:

NAN测距架构如下图所示:

NAN数据通信架构如下图所示:

需要进行单播数据通信的两个NAN设备之间需要建立 NAN Data Path (NDP),成功后建立NAN Device Link (NDL)确保能共享NDP的资源。

一个NAN集群中包含两个及以上的NAN Device在唤醒时共享同一个NDC则称之为NAN Data Cluster (NDC)。

NAN也支持和其他工作模式共存,如下图所示:

NAN设备的地址规则

每个NAN设备拥有一个管理接口地址NAN Management Interface Address (NMI),可能有一个或多个数据接口地址NAN Data 

Interface Addresses (NDI)。NDI可以和NMI一样,也可以不同。

在NAN集群中,NAN设备可以使用NMI或NDI地址作为所有管理帧的transmitter地址。

在NAN集群中,NAN设备可以使用NMI或NDI地址接收所有单播管理帧和所有的广播管理帧。

NAN设备可以在多个不同的NDP中使用同一个NDI,可以使用不同的多个NDI,这都是协议允许的。

NAN Network ID

NAN Network ID 规定为 51-6F-9A-01-00-00. 

组播NAN Service Discovery frames 和 

NAN Action frames 在A1域使用组播地址 51-6F-9A-01-00-00。

NAN Cluster ID

NAN Cluster ID 也是一个mac地址,和bssid类似,规定为范围为从 50-6F-9A-01-00-00 到 50-6F-9A-01-FF-FF。NAN Cluster ID 在设备初始化时随机生成一个即可。

关于NAN发送的帧中A3域如何填,可以看下表示意:

关于下面这些都在规范中做了说明,这里不在叙述。

Address fields in NAN and Non-NAN frames

Address field definition for NAN frames

Address Field Definition for Non-NAN Management Frames

四. NAN 同步

1. 操作信道

• 2.4G只使用6信道(2.437 GHz);

• 设备只支持5G低频(5.150 – 5.250 GHz)时使用44信道(5.220 GHz);

• 设备只支持5G高频(5.725 – 5.825 GHz)时使用149信道(5.745 GHz);

• 设备5G高低频都支持时使用149信道(5.745 GHz);

当然NAN Data Path可以使用其它任意信道。

NAN也使用STA的默认WMM EDCA参数:

2. NAN Discovery Window

这个不太好描述,可以理解为所有NAN设备处于工作的时间和信道对应的这段时间叫做Discovery Window (DW)。

DW间隔512TU,DW时间持续16TU。

2.4G DW从TSF 0TU时刻开始算起,5G DW从TSF 128TU时刻开始算起。

DW期间NAN可以发送NAN Synchronization Beacon frames给其它设备同步时钟。每个NAN设备在DW期间最多只能发送一个NAN Synchronization Beacon frame 。

DW0:TSF低23为0的DW 

除了处于Non-Master Non-Sync状态的设备,在DW0时都要唤醒。

注意:NAN中所谓的唤醒,不仅仅是指真的硬件节电睡眠,也可以是处于其他模式/信道在工作 而只是NAN没有工作。

3. NAN设备同步时钟

同一个NAN集群的NAN设备应该同步同一个时钟。每个NAN设备需要根据一套算法参与发送NAN Beacon帧。

4. NAN设备的角色和状态

一个NAN设备有Master和Non-Master两种角色;

Non-Master角色又有Sync和Non-Sync两种状态。

NAN设备的角色和状态是可以发生转换的,如下图所示:

关于NAN设备的角色和状态转换的条件详细可以看协议下面四个章节,这里不在翻译:

• NAN Device Role and State Transition in the 2.4 GHz frequency band

• NAN Master to Non-Master Sync State Transition

• NAN Non-Master to Master Role Transition

• NAN Non-Master Sync to Non-Master Non-Sync State Transition

• NAN Non-Master Non-Sync to Non-Master Sync State Transition

• NAN Device role and state transition in the 2.4 GHz and 5 GHz frequency band

NAN设备不同的角色和状态下所能发送的帧也不同:

• Master角色可以发送NAN Synchronization Beacon 和 NAN Discovery Beacon frame

• 在DW期间,Non-Master角色处于Sync状态时才能发送NAN Synchronization Beacon frame

• Non-Master角色处于Non-Sync状态时不能发送NAN Synchronization Beacon frame

• 在DW期间,NAN设备都可以发送NAN Service Discovery frame

5. NAN Master Rank

每个NAN设备都包含一个NAN Master Rank,Master Preference越高越容易成为NAN Master。

NAN Master Rank由下面三部分构成:

• Master Preference

• Random Factor

• NAN Interface Address

Master Rank计算公式:

Master Rank = Master Preference * 2^56 + Random Factor * 2^48 + MAC[5] *2^40 +… + MAC[0]

Master Preference和Random Factor是俩随机数;

Master Preference更新为非0值之后,240DWs内不得改变且不能变回0;

Random Factor更新后,要在120DWs-240DWs时间内改变,取值范围0-255.

NAN Interface Address更新后,在240DWs内不得改变。

当加入新的集群时,就需要重设NAN Master Rank。

6. Anchor Master

锚定主设备(Anchor Master)是集群中Master Rank最高的设备。 

锚定主设备为NAN集群中的其它设备提供TSF时钟。

每一个NAN设备都有可能成为锚定主设备。

一个NAN设备可以通过下面的方式变成锚定主设备:

• 初始化作为一个新的NAN集群时

• 原先锚定主设备的Master Rank发生了改变

▪ NAN设备自己的Master Rank发生了变化

▪ 同一个集群中的其它NAN设备的Master Rand发生了变化

• 收不到集群中的锚定主设备的NAN Beacon frames了

当NAN设备自己的Master Rand发生变化后可能丢失锚定主设备角色 或 集群中其它NAN设备的Master Rank发送变化。

7. Anchor Master selection

集群中的NAN设备使用同一套锚定主设备选择算法,主要维护两套数据:

Current Anchor Master Record 

        • Anchor Master Rank (AMR): The Master Rank of the Anchor Master 

        • Hop Count to Anchor Master: the number of NAN Devices between the NAN Device and the Anchor Master.

        • Anchor Master Beacon Transmission Time (AMBTT)

Current Anchor Master Record 初始化时应该被设置为下列值: 

        • The AMR is set to its own Master Rank;

        • The Hop Count to Anchor Master is set to zero;

        • The AMBTT is set to 0x00000000.

Last Anchor Master Record

        • Anchor Master Rank (AMR) 

        • Anchor Master Beacon Transmission Time (AMBTT)

Last Anchor Master Record在初始化时必须被设置为0。

简单说就是根据AMR AMBTT Hop Count这些条件,详细可以看协议这节,这里不在翻译。

8. NAN的发现和同步

按照协议上写的,可以通过Beacon或Probe Response发现NAN集群,但是协议上只写了NAN Beacon帧的组帧格式,并没有提probe如何组帧,比较奇怪。

NAN Discovery Beacon帧的发送:

每个处于Master角色的NAN设备非DW期间要发送NAN Discovery Beacon frame以便发现NAN集群。

发送NAN Discovery Beacon frame的规则:

• 发送间隔不能超过200TU

• 发送间隔不能低于50TU.

默认应使用最小的发射功率和AC_VO队列发送NAN Discovery Beacon frame。

NAN Cluster Grade(CG)

每一个NAN集群都有一个CG,计算方法如下:

CG = 2^64*A1+A2

A1是集群锚定主设备的Master Preference;

A2是8字节的TSF时间,其低19位置0。

9. 加入NAN Cluster

NAN设备启动后,一般是先进行被动扫描,然后才开始后续动作:

• 如果发现一个或多个NAN集群,则选择CG最高的集群加入

• 如果发现一个或多个NAN集群都具有最高CG,则选择AMR最高的集群加入

• 没有发现的话,自己就创建了一个集群

在加入集群时,NAN设备就应该同步集群的TSF时钟。

规范这里提到了一点,也可以通过Probe Response帧的Cluster Discovery attribute来发现集群,关于probe帧这本规范描述的总是很含糊。

10. NAN Cluster合并

当一个集群中的NAN设备扫描到其他的集群时:

• 如果发现存在一个或多个CG值高于当前集群的集群,则该NAN设备将重新加入CG值最高的集群。

• 如果一个或多个集群的最高CG相同,则加入AMR最高的集群。

当NAN设备决定加入一个最高CG集群时,如果NAN设备之前是Master或Non-Master Sync,则它应该在旧的集群DW中发送一次NAN Synchronization Beacon frame,其NAN IE包含对应的新集群信息、A3域设置为新的Cluster ID。

当通过集群合并的方式加入新的集群时,一个NAN设备的角色和状态应该与之前的集群相同。

11. NAN设备在DW期间发送下面的帧

• NAN Synchronization Beacon frame

• NAN Service Discovery frame (SDF)

• NAN Action frame (NAF)

规范规定NAN设备在DW信道上不能发送数据帧。

五. NAN Service Discovery

NAN服务发现框架使NAN设备能够从其他NAN设备中查找服务、为其他NAN设备创建服务。

规范共定义了两类服务发现协议:

• 发布型消息(Publish message)

• 订阅型消息(Subscribe message)

NAN Discovery Engine

DE定义method和event,应用层就可以直接使用,定义如下:

1. Methods

Publish(service_name, matching_filter_tx, matching_filter_rx, service_specific_info, configuration_parameters, 
datapath_parameters, qos_requirements, range_configuration_parameters, security_configuration_parameters)
CancelPublish(publish_id)
Subscribe(service_name, matching_filter_rx, matching_filter_tx, service_specific_info, configuration_parameters, 
range_configuration_parameters)
CancelSubscribe(subscribe_id)
Transmit(handle, service_specific_info, configuration_parameters)
UpdatePublish(publish_id, service_specific_info)
GASScheduleRequest(publish_id, address)

2. Events

DiscoveryResult(subscribe_id, service_specific_info, service_update_indicator, publish_id, address, range_measurement, 
FSD_parameters, datapath_parameters, qos_requirements, security_parameters)
Replied(publish_id, address, subscribe_id, range_measurement, service_specific_info)
PublishTerminated(publish_id, reason)
SubscribeTerminated(subscribe_id, reason)
Receive(id, peer_instance_id, service_specific_info, address, range_measurement)
GASScheduleConfirm(status, publish_id, address)

可以用图直白的解释这个流程的执行过程:

• Unsolicited Publish command data flow

• Solicited Publish command data flow

六. NAN Scheduler

NAN设备应该指明FAW在NAN管理帧中:

• One or more Further Availability Map attributes;

• One or more NAN Availability attributes;

• NAN ASI attributes associated with NAN Operations; 

• NAN ASI attributes associated with Non-NAN Operations.

这里面,NAN Availability attribute里面会携带Channel Entries指示使用的信道等信息。

此外还有下面这些需要关注:

NAN Aligned Schedule Indication attributes

Further Availability attributes

Unaligned Schedule

七. NAN data communication

规范同样定义了method和event,让应用层方便使用,定义如下:

1. Methods

DataRequest(type, publish_id, responder_nan_address, multicast_address, qos_requirements, security, 
initiator_ipv6_interface_identifier, service_specific_info)
DataResponse(type, status, ndp_id or mc_id, initiator_data_address, multicast_address, qos_requirements, security, 
responder_ipv6_interface_identifier, service_specific_info)
DataEnd(type, status, ndp_id, nmsg_id, initiator_data_address)
DataUpdate(type, ndp_id, nmsg_id, initiator_data_address, qos_requirements)

2. Events

DataIndication(type, publish_id, ndp_id or mc_id, initiator_data_address, responder_data_address, security, 
initiator_ipv6_interface_identifier, service_specific_info)
DataConfirm(type, status, ndp_id or mc_id, nmsg_id, initiator_data_address, responder_data_address, 
responder_ipv6_interface_identifier, service_specific_specific_info)
DataTermination(type, status, ndp_id or mc_id, nmsg_id, initiator_data_address)

用图解释流程的执行过程:

• NDP setup without pairwise security association

• NDP setup with pairwise security association

TCP/IP bring-up using the NDPE attribute

这里需要指出,规范特别定义了使用NDPE可以协商使用IPV6地址、tcp/udp协议和端口,所以这样就可以不止是使用二层通信,上层就可以以socket进行数据通信。这个过程可以用图表示为:

八. NAN security and privacy protection

• 802.11 encrypted unicast Data frames

• 802.11 Protected Management frames (PMF)

• Creation of Secure Service Identifiers

一般安全加密部分实现,都是软件协商出类型,将密钥设置到硬件去加解密报文,所以加密算法这里就不研究了。

九. NAN ranging

NAN设备的测距,可以实现类似电子围栏的功能,对设备进入某区域和离开某区域能做到精确通知,如:

规范同样定义了method和event,定义如下:

1. Methods

Range_Request(MAC_Address, range_id, configuration_parameters)
Cancel_Range(range_id):
Range_Response(response_control_parameters, matching_filter_for_response, range_id, configuration_parameters)

2. Events

Range_Result (MAC_Address, range_id, range_measurement, event_type)
Range_Request_Indication (MAC Address, range_id, configuration_parameters)

用图解释流程的执行过程:

• NAN ranging invoked by a NAN service

• NAN ranging invoked as a part of service discovery

FTM协议测距流程示意图:

十. NAN帧格式

简单说,一个NAN管理帧主要包含NAN IE和NAN attributes。

NAN IE格式如下图:

NAN attribute格式如下图:

具体的Attribute ID有哪些定义,直接去规范查询即可,规范详细列了取值和格式,这里不再细述。

1. NAN Synchronization和NAN Discovery Beacon帧格式

FC规定按如下规则填写:

fromDS和toDS置为0。

A1填写为广播地址。

A2填为发送方地址。

A3填为Cluster ID。

一般NAN Synchronization Beacon帧的Beacon Interval填为512TU,NAN Discovery Beacon帧的Beacon Interval填为100TU。

2. NAN Service Discovery frame format

3. NAN Action frame format

其中NAN Action frame subtypes定义为:

十一. Bluetooth Low Energy

BLE通过发送Discovery Service (TDS) 触发NAN设备进行服务发现。传输发现服务使用通用帧格式,用于携带基本服务信息,以触发在NAN应使用上的进一步发现。

虽然这里描述的机制是针对BLE触发NAN的,但同样的机制也可以应用于触发其他无线电,如Wi-Fi Direct、WiGig、HaLow等。

BLE触发数据封装在BLE advertising报文中,Transport Discovery Data AD Type Code字段设置为0x26 (TDS),Organization ID字段设置为0x02 (Wi-Fi联盟通用服务发现)。BLE TDS帧格式如图所示:

Header域定义如下图:

协议流如下图所示:

• Example of protocol flow for BLE triggers NAN operation initiated by a Browser

• Example of protocol flow for BLE triggers NAN operation initiated by a Seeker

十二. NFC

NAN设备可以使用NFC连接来触发NAN服务发现和安全的NDP设置。

执行流程如下图所示:

• Example of NFC triggered NAN Protocol using NFC Negotiated Connection Handover with Service

Subscriber serving as NFC Handover Requester

• Example of NFC triggered NAN using NFC Static Connection Handover with NAN Service Subscriber serving as NFC Handover Requester

十三. 一些缩写词和术语

更多的术语缩写可以直接查看规范,在规范前面也是做了列举,此处不再细述。

十四. 测试代码

之前想着在esp32上简单实现DE功能,结果测试了一下发现无法控制esp32的硬件tsf,所以自己组的帧是没法填写timestamp域的,那么这个构想就失败了!

但是我还是贴一份自己组的NAN管理帧发送测试代码,可以供感兴趣的朋友参考怎么组帧和发送。

基于esp32的esp_idf实现的代码,点此下载:---> nan_test.c

热门评论