- 前言:
- 通过 "GR5x系列BLE知识及应用专题" 系统介绍一些 BLE 涉及的知识概念, 以及如何使用 Goodix GR5xx 系列芯片的SDK进行BLE应用开发。
- 可以从下面网页获得 GR5xx 系列蓝牙芯片的介绍和选型参考.
- 如果博客有内容引用自网络, 会在文末添加参考来源.
一、BLE协议框架
架构层 | 说明 |
PHY | 1. 物理层 |
2. 控制射频的发送和接收 | |
| |
LL | 1. 链路层 (负责链路控制和链路管理,即创建、维护和释放逻辑链路) |
2. 定义通信结构体包括设备状态和射频控制 | |
3. 提供Link Layer-level加密 | |
| |
HCI | 1. 主机控制器接口 |
2. 用于主机和控制器的通信 | |
3. 控制器 (Controller Layer):PHY、Link Layer | |
4. 主机(Host Layer):L2CAP、ATT、GATT、GAP、SM | |
L2CAP | 1. 逻辑链路控制及适配协议 |
2. 充当协议复用器并处理数据包的分段和重组 | |
3. 提供一个或多个复用的逻辑信道 | |
| |
ATT | 1. 属性协议 |
2. 提供了低功耗蓝牙设备之间数据传输的方法 | |
3. 依赖于低功耗蓝牙的connection,基于connection它提供了读取、写入、指示、通知属性值的过程 | |
| |
GATT | 1. 通用属性协议 |
2. 为逻辑服务进行属性分组,例如心率服务 它公开了心率传感器的操作除实际数据外 | |
3. 提供了属性的相关信息,及如何访问它们以及需要什么安全级别 | |
4. 定义属性类型 | |
| |
GAP | 1. 通用访问规范 |
2. 为低功耗蓝牙设备和其它设备提供了设备广播、设备发现、打开和连接管理及数据广播 | |
| |
SMP | 1. 安全管理规范 |
2. 提供绑定设备、加密和解密以及启用设备隐私的方法 | |
|
二、PHY 物理层
- 频段:2.4GHz ISM频段(2402MHz-2480MHz)
- 信道:40 RF信道,每信道2MHz带宽
- 广播信道:BLE 信道号定义并不完全是逐个递增的, 其中3个广播信道(37,38,39) 为避开WIFI的1、6、11信道干扰,这几个信道的中心频率分别为2412MHz(2402MHz-2422MHz)、2437MHz(2427MHz-2447MHz)、2462MHz(2452MHz-2472MHz),每信道带宽20MHz.
- 调频方式:采用高斯频移键控(GFSK)的调制方式改变无线电波的频率,传输0或1的信息;频移键控是指把1和0通过轻微升高或者降低信号频率进行编码;调制指示表示围绕信道的中心频率的上下频率之间的宽度;传输无线电信号时,从中心频率出发超过185KHz的正向偏移代表值为1的比特;超过185KHz的负向偏移代表值为0的比特
- 通信速率:Bluetooth4.0、4.1、4.2通信速率为1Mbps;Bluettoth5.0-5.4 支持1Mbps和2Mbps
- 发送功率和通信距离:
三、Link Layer 链路层
1. LL 的主要作用
LL主要作用, 基于 PHY进行数据收发, 并根据需要, 设置PHY的收发相关参数. 此外, LL还需完成的事情:
- Physical Layer仅仅提供了有限的40个Physical Channel,而BLE中参与通信的实体的数量,肯定不是这个数量级。Link Layer需要解决Physical Channel的共享问题
- 通信是两个实体之间的事情,对这两个实体来说,它们希望看到一条为自己独享的传输通道(就是我们所熟悉的逻辑链路,Logical Link)。这也是Link Layer需要解决的
- Physical Channel是不可靠的,任何数据传输都可能由于干扰等问题而损毁、丢失,这对有些应用来说,是接受不了的。因此Link Layer需要提供校验、重传等机制,确保数据传输的可靠性;
2. LL层状态和角色的定义
BLE协议在Link Layer层抽象出5种状态:
- Standby State:待机状态,不发送数据,也不接收数据。该状态可以由任何状态进入,也可以切换到除Connection状态外的任意一种状态。
- Advertising State:广播状态,可以发送,监听,响应广播通道包,由Standby状态进入。
- Scanning State:扫描状态,能够监听广播设备发送的广播包,由Standby状态进入。
- Initiating State:初始化状态,监听指定设备的广播通道包,并且响应广播包,并发送连接请求,以便和广播设备建立连接。当连接成功后,Initiater和对应的Advertiser都会切换到Connection状态。该状态由Standby状态进入。
- Connection State:和某个实体建立了单独通道的状态,在通道建立之后,由 Initiating State 或Advertising State进入。通道断开后,会重新回到Standby状态。
当进入Connect State后,又定义了两种角色:
- Master Role:由 Initiating State进入的Connect State,连接成功后,变成了Master Role。
- Slave Role:由 Advertising State进入的Connect State,连接成功后,变成了Slave Role
3. 空口包(Air Interface Packets)
Air Interface Packets定义了一种包的格式,主要用于描述LE Uncoded PHY、advertising channel和data channel的通信格式, 负责数据交换.
空口数据包又定义了2种数据帧格式: 无编码帧(LE Uncoded PHYs) 和编码帧 (LE Coded PHYs)
4. 广播、扫描和连接
BLE种, 广播、扫描和连接的概念定义在GAP, 且由GAP定义其具体的规范, 但具体的数据交互行为, 发生在LL层.
在 GAP 章节, 进一步描述 广播、扫描和建立连接的相关内容
四、HCI 主机控制器接口
- HCI:提供主机和控制器的标准接口
- HCI由两个独立的部分组成:逻辑接口和物理接口
- 逻辑接口:逻辑接口定义命令和事件及其相关的行为,逻辑接口可以交付给任何物理传输或者通过位于控制器上的本地应用程序编程接口(API)交付给控制器
- 物理接口:物理接口定义命令、事件和数据如何通过不同的连接技术来传输,已定义的物理接口包括USB、SDIO和两个UART的变种
五、L2CAP 逻辑链路控制及适配协议
- L2CAP定义了:L2CAP信道和L2CAP信令
- L2CAP信道:是一个双向数据通道,通向对端设备上的某一特定的协议或规范
- 低功耗蓝牙中只使用固定信道:一个用于信令信道,一个用于安全管理器,一个用于属性协议
六、ATT(属性协议)
- 低功耗蓝牙规范展示了设备状态。状态被定义为一个或多个称为属性的值。访问这些属性的协议被称为属性规范(ATT)
- 属性协议(ATT)定义了位于L2CAP通道之上服务器角色设备和客户端角色设备之间的通信。属性协议定义了两个角色:
- 服务器:作为存储一个或多个属性数据的设备
- 客户端:收集一个或多个服务器信息的设备
- 客户端可以访问服务器的属性,客户端通过发送请求来触发服务器的应答
- 为了提高效率服务器可以主动发送两种未经请求的属性消息:
- notifications:不需要确认
- indications:需要客户端发送确认
- 客户端也可以向服务器发送消息以写入属性值。请求/响应、指示/确认事务遵循stop-and-wait模式
- 为了提高效率服务器可以主动发送两种未经请求的属性消息:
- 属性定义:
- 属性可以是0-512字节不等的数组,它可以是定长也可以是变长
- 所有的属性都包含句柄,句柄用于寻址单个属性。如图所示客户端通过句柄访问服务器的属性
- 属性同样包含类型,用UUID进行描述
- 属性协议操作
- 属性协议是一种无状态、顺序的协议,这意味协议中不存储状态,一次只能执行一个操作
- 属性协议方法如下面描述
- 应答
- ATT操作通常需要应答(ACKs)。这允许应用程序知道哪些数据包已成功传输,这可应用于设计可靠的应用程序
- 因为服务器必须等待客户端的应答,因此数据的吞吐量会受到影响
- Non-ACKed操作可以应用于高吞吐量的应用,它可以在一个连接间隔内执行多个操作。链路层仍会重传丢失的包,所以可靠性不受影响。但应用程序不知道哪些数据包已经成功发送
七、GATT(通用属性规范)
- 通用属性协议(GATT)建立在属性协议(ATT)之上,并为属性协议传输和存储的数据提供统一的框架。GATT定义两个角色:服务器和客户端
- GATT服务器存储通过ATT传输的数据,并接收来自GATT客户端的ATT请求。GATT服务器另一方面发送请求应答,当收到配置时发送指示和告知到GATT客户端。GATT还指定存储在GATT服务器上的数据格式
- 属性分为服务和特性,服务包含一系列特性。特性包含单个值和描述特性值的任意数量的描述符
- 蓝牙规范定义了数据交换的结构。规范定义了元素例如服务和特性,他也包含安全定义和连接建立参数。通常规范包含高级用例所需的一项或多项服务,例如心率、节能监控。标准的规范允许设备和软件供应商互连互通
- 服务:是由一个或多个特性组成的数据集合,用于完成设备的特定功能,例如电池监控或温度数据而不是完整的用例
- 特性:是在服务中使用的一个值,用于公开或交换数据或控制信息。特性具有明确定义的已知格式。它们包含如何访问信息、必须满足哪些安全需求、特性值如何被显示和解释。特性同样包含特性描述符、特性配置权限、数据指示和告知
下图说明了GATT客户端、GATT服务器、服务、特性、特性声明、数据、描述符之间的关系:
八、GAP(通用访问规范)
- GAP通常是蓝牙开发者所接触到第一个协议。这是因为GAP通常用于控制一个设备对于其它设备的可见和可连接,以及如何被远程设备发现和连接
- 简单来说,GAP提供了对链路层操作(如链路操作章节描述的那样)的访问,这些链路层操作和设备发现,连接建立,终止以及连接时序控制有关
- GAP定义了为底层控制器提供特定要求的设备角色。角色允许设备射频只Tx、只Rx或者两种功能都有
- 广播者(TX Must):发送广播事件和广播数据
- 侦察者(RX Must):侦听广播事件和广播数据
- 外围设备(RX TX):从设备总是能被连接和广播,能被主设备单一连接的一种简单设备
- 中央设备(RX TX):通常主设备从不广播,专门负责启动和管理多个连接
- 一个设备可以支持多个角色,但在给定的时间内只能支持一个角色
- GAP还定义了广播、扫描(发现)、建立连接及绑定的模式和过程
- 模式:
- 可连接:能够创建一个连接。状态:不可连接、可连接
- 可发现:能够被发现(is advertising)。状态:无、有限、常规
- 可绑定:如果可连接,将于连接的设备配对以实现长时间连接。状态:不可绑定、可绑定
- 过程:
- 名称发现:进入菜单并发现其它设备的名称。该名称与双模设备中的BR/EDR共享
- 设备发现:搜索可用于连接的设备
- 1:发现设备地址和名词
- 2:定义设备角色
- 连接建立:选择一个广播设备和它建立连接
- 1:指示链路层发送CONNECT_REQ
- 2:执行服务发现
- 3:请求设备认证
- 4:请求使用服务
- 服务发现:用于查找主设备和从设备之间对等的服务
- 模式:
九、SM 安全管理
- 为了确保基于BLE技术的通信安全,该技术提供了一些特性确保可信性、完整性、私密性及数据的加密
- 下面给出BLE安全技术的整体概述,后续会详细技术:Pairing、Encryption、Privacy
- 蓝牙安全提供哪些保护:
- 蓝牙规范定义了保护用户数据及身份的安全特性。BLE技术的安全特性符号NIST或者FIPS
- BLE技术提供三种基本的安全服务:
- 1:身份验证和授权:在设备间建立信任关系
- 2:加密和数据保护:保护数据完整性和机密性
- 3:隐私和保密:防止设备追踪
- BLE安全模型包含5个安全特性:
- 1:Pairing(配对):创建共享密钥的过程
- 2:Bonding(绑定):保存Pairing过程中创建的密钥,以备后面使用
- 3:Device authentication(设备认证):验证存储的密钥
- 4: Encryption (加密):数据保密
- 5:Message integrity(消息完整性):防止数据更改
- 安全管理者的职责:
- 1:配对
- 2:密钥分配
- 3:生成哈希和短期密钥
- 另一方面链路层负责数据的加密和解密
- BLE安全功能可针对无线通信中的以下常见威胁提供保护:
- 1:中间人攻击(Man-in-the-Middle Protection)
- 1:防止被动窃听(Protection against Passive Eavesdropping)
- 3:隐私保护(Privacy Protection)
- 配对和绑定:
- 蓝牙配对是相关各方交换其身份信息以建立信任关系并生成用于数据交换的加密密钥的过程。BLE技术提供多种配对选项,具体取决于应用程序的安全要求
- BLE标准版本V4.0和V4.1使用安全简单配对模型,用户可以在基于input/output 能力的Just Works、Passkey Entry、Out-of-Band的方法中选择一种
- BLE标准版本V4.2中,新的LE安全连接配对模型、添加a numeric comparison method、引入introducing the Elliptical Curve DiffieHellman(ECDH)密钥交换算法以增强安全性
- 下表总结了可以在双方之间使用的关联模型、具体取决于它们支持的I/O能力。术语配对是指安全密钥的生成和交换、术语绑定是指安全密钥的存储以备它们在后期使用
- 加密
- BLE技术使用AES-CCM加密技术进行加密、加密由BLE控制器执行。加密函数使用FIPS-1971中定义的AES-128位块密码生成128位密钥
- 隐私
- BLE技术还支持降低在一段时间内跟踪低功耗蓝牙设备的能力的功能
- 为了解析私有地址设备需要预先绑定。公共地址是使用在之前配对或绑定过程中设备的IPK(Identity Resolving Key)生成的
- 在蓝牙4.0和4.1标准中,私有地址在主机上解析和生成。在蓝牙4.2和最新的标准中,私有地址在控制器处解析和生成,而不涉及主机
参考 |