1. 概述
GAP定义了所有蓝牙设备的基础功能,例如如何发现、建立链接、及绑定远端蓝牙设备通用程序。明确了一个低功耗蓝牙的基本需求,包括哪些层级以及这些层级如何协调工作,以达到为蓝牙设备提供例如设备发现、链路建立、安全、认证、和服务发现这一系列的功能的目标。GAP还规定了单模和双模蓝牙所支持的蓝牙版本,双模蓝牙同时支持传统蓝牙和低功耗蓝牙,单模蓝牙仅仅支持低功耗蓝牙。
2. 低功耗蓝牙角色
角色依据链路层的特性和功能进行划分,包括传播角色;观察角色;外围角色;中心角色。
传播角色
- 用来发送广播事件。
- 传播对象为处于观察者角色的设备,且使用非链接的广播事件去广播数据。
- 必需由发射装置,不一定由接收装置。
观察者角色
- 与传播角色设备对应,接收广播事件数据,不支持链接操作。
- 必须有接收装置,不一定由发送装置。
中心角色
- 是和外围角色建立链接的发起者,链接成功后,成为主设备。
- 同时具备发射接收装置。
外围角色
- 使用可链接的广播事件去建立链路层的链接;链接建立后成为从设备。
- 同时具备发射接收装置。
3. 蓝牙参数
蓝牙设备地址(长度为48b)
- 公共设备地址(PDA: public device address)
被IEEE组织所管理,分两部分:组织唯一标识符(Organizationally Unique Identifier,
OUI),是被IEEE注册管理局所分配的24b的公司ID; 各个公司分配给各个控制器的24b的唯一地址。 *- 随机设备地址(Random Device Address) 低功耗蓝牙设备的私有地址。低功耗设备可以隐藏真实地址而使用一个随时间改变的随机地址。
蓝牙设备名称:
UTF-8字符串,最大长度248B。
蓝牙钥匙:
在蓝牙设备配对过程中进行认证。是000000~999999的6位十进制数。钥匙要么是固定的,要么是用户输入的。
配对~~认证和绑定
如果用户通过发起一个配对程序来实现设备间的绑定,可视为绑定过程。如果设备间链接的建立是通过用户输入钥匙Passkey来实现,这个过程可视为认证过程。
4. 广播和扫描回复的数据格式
广播设备向扫描设备发送广播事件。扫描设备可以向广播设备发送扫描请求事件,广播设备返回扫描响应事件。广播数据和扫描响应数据长度位0~31B。
广播事件类型
- 可链接无向事件(ADV_IND)
- 非链接定向事件(ADV_NOCONN_IND)
- 可扫描无定向事件 (ADV_SCAN_IND)
广播数据结构体:
分为三部分,长度,类型,数值
AD structure1 | Ad structure2 | … |
---|
长度 | 类型 | 数值 |
---|---|---|
1B | 1B |
广播数据类型: 本地名称;标签;制造特定数据
1) 本地名称类型及对应值:
本地名称用于说明设备名称的类型。
类型值 | 说明 |
---|---|
0x08 | 简略名称 |
0x09 | 完整名称 |
2)标签(结构体类型 = 0x01),标签值可以以下值的组合
用于表示设备的基本信息。
标签值 | 说明 |
---|---|
0x01 | 有限可发现模式 |
0x02 | 一般发现模式 |
0x04 | 不支持BR/EDR模式 |
0x08 | 同时支持LE/BR/EDR模式(控制器) |
0x10 | 同时支持LE/BR/EDR模式(主机) |
3)制造特定数据 (结构体类型 = 0xFF)
用于识别各蓝牙公司ID及制造商指定的数据。数据起始的两个字节位16b的公司ID,接着是指定的数据。
5. GAP特征
-
设备名
直接使用UUID读取请求便可快速获取设备名。名称 说明 属性类型 0x2A00 属性值 设备名称(0~248B) -
表面特征
通常用来在用户界面UI的设备旁边显示其设备的图标。名称 说明 属性类型 0x2A01 属性值 设备表面特征(2B) -
外围设备隐私标志特征
用来表示当前设备是否在使用隐私。0x00表示隐私禁用,使用公共蓝牙地址;0x01表示启用隐私,使用随机地址。 -
链接地址特征: 存储地址以便下次链接。
-
外围设备优先链接参数特征。
6. 操作模式和程序
当一个设备在某一较长的时间内按照某种特定方式运行时,称为模式;而当一个设备在某一段有限的时间内按照某种特定方式运行时,成为程序。
模式:
广播模式;不可发现模式;有限可发现模式;一般可发现模式;不可链接模式;定向可链接模式;非定向可链接模式;不可绑定模式;可绑定模式。
程序:
观察程序;有限发现程序;一般发现程序;名称发现程序;自由链接建立程序;一般链接建立程序;选择性链接建立程序;直接链接建立程序;链接参数更新程序;终止链接程序;绑定程序。
1)广播模式和观察程序
发送数据的为广播者,接收数据的为观察者。 广播者使用链路层的广播信道发送广播数据包。只能使用不可链接模式广播报文(ADV_NON_CONN_IND, AVD_SCAN_IND)。扫描者不可链接广播者,除非变为可链接,这需要主机执行指定操作。观察者可以使用被动扫描状态仅仅接受广播发来的数据,如果需要得到更多信息,可使用主动扫描状态发送SCAN_REQ命令来获得。
2)发现模式和程序
用于中心设备发现外围设备。
- 不可发现模式
此模式下不能被远端设备发现。要么不发送任何广播报文,要么在AD标签为有限可发现模式(0x01)和一般发现模式下发送报文(0x02)。 - 有限可发现模式
此模式下设备只能在有限的一段时间内被发现。AD标签仅为有限可发现模式(0x01)。可发送不可链接广播事件,可扫描非定向广播事件,可链接非定向广播事件。 - 一般可发现模式
此模式下设备能在较长一段时间内被发现。AD标签仅为一般可发现模式(0x02)。可发送不可链接广播事件,可扫描非定向广播事件,可链接非定向广播事件。
一般可发现模式和有限可发现模式的区别:
一般可发现设备的可发现时间没有限制,而有限可发现设备最多可维持该模式30s;一般可发现设备的广播时间间隔稍长1.28–2.56s,而有限可发现模式设备则介于250–500ms
-
发现程序
发现程序情况:工作程序 中心设备 外围设备 有限发现程序 可选 不工作 一般可发现程序 强制 不工作 名称可发现程序 可选 可选 设备可发现性:
工作模式 有限可发现程序 一般可发现程序 有限可发现模式 发现 发现 一般可发现模式 忽略 发现
3)链接模式和程序
外围设备可以使用链接模式,而中心设备使用链接程序与外围设备链接。
连接模式情况表:
工作模式 | 中心设备 | 外围设备 | 广播者 | 观察者 |
---|---|---|---|---|
不可链接模式 | 不工作 | 强制 | 强制 | 强制 |
定向可链接模式 | 不工作 | 可选 | 不工作 | 不工作 |
非定向连接模式 | 不工作 | 强制 | 不工作 | 不工作 |
- 不可链接模式
不可使用可链接广播事件,只能使用非定向不可链接广播事件(ADV_NOCONN_IND)和非定向扫描广播事件(ADV_SCAN_IND) - 定向可链接模式
仅仅被一个特定的远端设备所链接。该模式下的外围设备可通过定向可链接事件(ADV_DIRECT_IND)快速链接到中心设备。由于发送定向可链接事件频率极高,该模式最多可持续1.28s。链接成功后进入不可链接模式。 - 非定向可链接模式
可链接的外围设备不需要快速链接的话,可使用非定向链接模式,以尽可能的节省能量。链接成功后进入不可链接模式。
链接程序情况表:
工作程序 | 中心设备 | 外围设备 |
---|---|---|
自动链接建立程序 | 可选 | 不工作 |
定向链接建立程序 | 强制 | 不工作 |
一般链接建立程序 | 强制(支持隐私功能);可选(不支持隐私) | 不工作 |
选择链接建立程序 | 可选 | 不工作 |
链接参数更新程序 | 强制 | 可选 |
中断链接程序 | 强制 | 强制 |
- 自动链接建立程序
用来向多个远端同时发起链接。外围设备可处于定向可链接或非定向可链接模式。中心设备维护由各个与中心设备建立绑定关系的外围设备组成的白名单。收到白名单设备的广播后,中心设备便和该广播外围设备建立链接。
- 定向链接建立程序
白名单不能被该程序使用。采用一套特殊的连接参数与指定的远端设备建立链接。
- 一般链接建立程序
不使用白名单,使用被动扫描寻找广播设备。中心设备对所有捕获的广播数据包扫描,列出可以被链接的设备名单,然后选择其中之一通过定向链接建立程序进行链接。
- 选择链接建立程序
用来同时向多个设备发起链接。中心设备根据白名单设置过滤条件并扫描。如果远端设备使用了可链接广播数据,主机停止扫描,使用定向链接建立程序来建立链接。
- 链接参数更新程序和中断链接程序
中心设备和外围设备都可使用链接参数更新程序来更新当前链接的链路层参数。中心设备使用此程序时调用链路层链接参数更新程序;外围设备使用此程序时,逻辑链路层和适配协议层(L2CAP)链接参数更新程序被调用。
中心设备和外围设备都可使用中断链接程序来中断当前链接。
4)绑定模式和程序
绑定是指将密钥及相关身份信息保存到安全数据库中;绑定程序在两个设备之间建立信任关系。
绑定模式情况表
工作模式 | 中心设备 | 外围设备 |
---|---|---|
不可绑定模式 | 强制 | 强制 |
可绑定模式 | 可选 | 可选 |
绑定程序情况表
工作程序 | 中心设备 | 外围设备 |
---|---|---|
绑定程序 | 可选 | 可选 |
绑定的发起者为中心设备的安全服务规范。中心设备要访问外围设备的服务,就要先建立绑定关系。外围首先处于绑定模式;中心设备发起绑定程序,与外围设备交换并存储绑定信息在安全数据库,进而实现绑定。
7 安全
安全模式对低功耗蓝牙并不是强制配置的,只有访问的服务涉及安全保护问题时才会被配置。设备的安全需求体现在硬件层次或服务层次上。有2个安全模式和4个安全程序。
安全模式详情
工作模式 | 中心设备 | 外围设备 |
---|---|---|
LE安全模式1 | 可选 | 可选 |
LE安全模式2 | 可选 | 可选 |
安全程序详情
工作程序 | 中心设备 | 外围设备 |
---|---|---|
认证程序 | 可选 | 可选 |
授权程序 | 可选 | 可选 |
链接数据签名 | 可选 | 可选 |
认证签名数据程序 | 可选 | 可选 |
安全模式1的等级定义
等级 | 定义 |
---|---|
安全模式1 等级1 | 无认证和加密要求(无安全要求) |
安全模式1 等级2 | 带加密的未认证配对 |
安全模式1 等级3 | 带加密的认证配对 |
安全模式2的等级定义
等级 | 定义 |
---|---|
安全模式2 等级1 | 带数据签名的未认证配对 |
安全模式2 等级2 | 带数据签名的认证配对 |
认证程序
设备的链接建立后,认证程序被发起,其覆盖范围包括安全模式1和安全模式2.类型有两种:
1)可认证配对,需要设置MITM保护位;
2)非认证配对,不需要设置MITM保护。
服务器的每个服务都有相应的安全配置,在回复客户端的服务请求前,服务器会检查当前的安全等级是否满足特定的服务,如果不满足,服务器会回复相关的错误代码。
当设备发起一个服务请求时,客户端将会对当前安全等级和索要链接的服务所需的安全等级进行比较,如果安全等级不满足时,客户端将会采取其他措施,如加密。
授权程序
所谓授权就是从用户那里获得批准而进行某种操作,通常在认证程序之后进行。
加密程序
主设备和从设备都可对链接进行加密。从设备通过发送安全请求命令给主设备来实现加密;主设备则通过安装加密会话来实现。
数据签名
当一个设备已经链接但尚未加密时,可以发送没有机密性但已认证的数据。数据PDU中的的数据实现签名且通过链接数据签名程序来将其添加到数据PDU中。远端设备的签名验证则通过认证签名程序来实现。
隐私权特征
隐私通过频繁的改变设备的地址来实现。支持隐私权特征的设备具备以下功能:
- 外围设备隐私标签:标签为1时,表示可以使用隐私权
- 链接(重连)地址特征: 链接地址或重连地址的作用时存储地址方便下次链接。如果设备地址地址改变了,将提供重连地址给远端设备,以方便重新链接。为了隐私保护,每次重连地址都会改变,新旧地址都会加入白名单,以降低链接时的功耗。