在早期叫做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