低功耗蓝牙体系

  • 整体架构说明
    • 1. PHY(物理层)
    • 2. LL(链路层)
    • 3. HCI(主机与控制器通信接口)
    • 4. L2CAP(逻辑链路控制及适配协议)
    • 5. ATT(属性协议)
    • 6. GATT(通用属性规范)
    • 7. GAP(通用访问规范)
    • 8. SM(安全管理)

整体架构说明

架构层说明
PHY1. 物理层
2. 控制射频的发送和接收
LL1. 链路层
2. 定义通信结构体包括设备状态和射频控制
3. 提供Link Layer-level加密
HCI1. 主机控制器接口
2. 用于主机和控制器的通信
3. 控制器:PHY、Link Layer
4. 主机:L2CAP、ATT、GATT、GAP、SM
L2CAP1. 逻辑链路控制及适配协议
2. 充当协议复用器并处理数据包的分段和重组
3. 提供一个或多个复用的逻辑信道
ATT1. 属性协议
2. 提供了低功耗蓝牙设备之间数据传输的方法
3. 依赖于低功耗蓝牙的connection,基于connection它提供了读取、写入、指示、通知属性值的过程
GATT1. 通用属性协议
2. 为逻辑服务进行属性分组,例如心率服务 它公开了心率传感器的操作除实际数据外
3. 提供了属性的相关信息,及如何访问它们以及需要什么安全级别
4. 定义属性类型
GAP1. 通用访问规范
2. 为低功耗蓝牙设备和其它设备提供了设备广播、设备发现、打开和连接管理及数据广播
SM1. 安全管理
2. 提供绑定设备、加密和解密以及启用设备隐私的方法

1. PHY(物理层)

  • 频段:2.4GHz ISM频段(2402MHz-2480MHz)
  • 信道:40 RF信道,每信道2MHz带宽
  • 广播信道: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支持1Mbps和2Mbps
  • 发送功率和通信距离:

2. LL(链路层)

  • 针对射频控制及bit数据流的发送和接收,BLE链路层提供第一级的控制和数据结构定义

    • 蓝牙状态机及状态切换
    • 数据帧和广播帧格式
    • 链路层操作
    • 连接、数据包分组、重传
    • 链路层级安全
  • 链路层操作包括:广播、扫描、建立连接

    • 广播
      • 1. 广播是低功耗蓝牙技术中最基本的操作之一。
        2. 广播为设备提供了一种告知存在、允许连接建立的方法。
        2. 广播数据中可以包含设备支持的服务列表、设备名称、发射功率等
      • 下图展示了:一个低功耗蓝牙设备在一个或多个广播信道上进行数据广播,并被远程设备发现
      • 应用程序通常可以控制以下广播参数
        参数描述
        广播间隔20ms-10240ms1. 定义广播事件之间的间隔,每个广播事件根据配置的不同包含1至3个广播数据包
        2. 一个0-10ms的随机值被链路层添加到每个广播间隔以帮助避免数据包冲突
        广播信道37、38、391. 这些物理无线信道用于发送广播数据包
        2. 使用所有的信道是最可靠的操作,但以牺牲可靠性为代价减少广播信道数量可以降低设备功耗
        发现模式1. 不可发现
        2. 普通可发现
        3. 有限发现
        4. 广播
        1. 定义了广播者对其它设备的可见方式
        连接模式1. 不可连接
        2. 定向连接
        3. 不定向连接
        1. 定义广播帧是否能够被连接
        负载1. 主要广播(0-31Byte)
        2. BLE5辅助广播(0-255Byte)
        1. 在主要广播数据包中包含0-31字节数据
        2. 在BT5辅助广播数据包中可以包含0-255字节数据
    • 扫描
      • 1. 扫描是扫描者为发现和连接广播设备,或仅仅接收广播数据进行的一种操作
      • 两种扫描模式被支持:被动扫描、主动扫描
      • 在被动扫描模式中,扫描者仅仅监听传入的广播数据包。扫描者循环切换每一个广播信道,每次只监听一个信道
      • 1. 在主动扫描模式中,扫描者监听传入的广播数据包,然后向广播者发送一包额外的扫描请求数据帧以获取更多信息。
        2. 通常在扫描应答帧中包含像所支持的服务列表、友好名称等信息,但是应用程序可以完全控制扫描应答帧中的内容
      • 应用程序通常可以控制以下广播参数
        参数描述
        扫描间隔2.5ms-10240ms1. 扫描间隔是从一个扫描事件开始到下一个扫描事件开始的ms数
        2. 扫描间隔一定要大于或等于扫描窗口
        扫描窗口2.5ms-10240ms1. 扫描窗口定义了扫描事件中的监听(RX)窗口周期
        扫描类型1. 有限
        2. 普通
        3. 观察
        1. 定义扫描者可应答的广播者类型
        扫描模式1. 主动
        2. 被动
        1. 定义执行主动扫描还是被动扫描
        连接模式1. 不可连接
        2. 定向连接
        3. 不定向连接
        1. 定义广播者是否可连接
    • 连接
      • 1. 连接允许应用层数据以一种可靠、稳健的方式传输。
        2. BLE使用CRC校验、应答、重传以确保数据的正确交互。
        3. BLE连接使用自适应跳频(AFH)来检测和适应周围的环境,并提供一个可靠的物理层。
        4. 连接支持数据的加密和解密以确保它的安全性

      • 扫描者当收到一个可连接的广播者发送的广播数据帧后发起BLE连接。下图示例BLE连接过程

      • 应用程序通常可以控制以下广播参数

        参数描述
        最小连接间隔7.5ms1. 最小允许的连接间隔
        最大连接间隔4000ms1. 最大允许的连接间隔
        连接(外设)延迟0-500(连接间隔)1. 定义扫描者可应答的广播者类型
        监督超时100ms-32000ms1. 定义通信可中断多长时间在连接被丢弃并向用户告知错误之前
      • 在一个连接的生命周期中连接参数可以通过”连接更新消息”被修改和更新

      • 1. 当主设备在定义的连接间隔内向从设备发送一包数据帧则连接事件开始(如图4.5)。
        2. 从设备在收到来自主设备的数据包150us后可以进行应答。
        3. 如果从设备没有数据要发送,它可以跳过在“连接(外设)延迟”中定义的一定数量的连接事件(如图4.6)。
        4. 如果主设备或从设备在规定的“监督超时”时间内没有收到数据包,则连接终止

      • 1. 如果从设备要发送的数据超过了单包数据的容量,则连接事件会自动扩展。
        2. 从设备可以发送尽可能多的数据包在下一个连接间隔开始前。
        3. 这中操作只能与不需要应答的属性协议一起使用

  • 网络拓扑:在BLE中定义的设备角色

    • 广播者:一个设备发送广播帧,但它自己不能接收,它可连接或者不可连接
    • 扫描者:一个设备仅仅监听广播帧,它能连接广播
    • 从设备:一个设备连接单个主设备(BT 4.0)或多个主设备(BT4.1和更新)
    • 主设备:一个设备被单个或多个从设备连接。理论上一个主设备可以有无数个从设备连接到它,实际上一个主设备一次可连接4-20从设备
    • 混合者:一个设备可以同时进行广播和扫描,或者广播被连接到一个主设备并同时进行扫描
    • BLE网络拓扑图:
    • BLE网络拓扑图:

3. HCI(主机与控制器通信接口)

  • HCI:提供主机和控制器的标准接口
  • HCI由两个独立的部分组成:逻辑接口和物理接口
  • 逻辑接口:逻辑接口定义命令和事件及其相关的行为,逻辑接口可以交付给任何物理传输或者通过位于控制器上的本地应用程序编程接口(API)交付给控制器
  • 物理接口:物理接口定义命令、事件和数据如何通过不同的连接技术来传输,已定义的物理接口包括USB、SDIO和两个UART的变种

4. L2CAP(逻辑链路控制及适配协议)

  • L2CAP定义了:L2CAP信道和L2CAP信令
  • L2CAP信道:是一个双向数据通道,通向对端设备上的某一特定的协议或规范
  • 低功耗蓝牙中只使用固定信道:一个用于信令信道,一个用于安全管理器,一个用于属性协议

5. ATT(属性协议)

  • 低功耗蓝牙规范展示了设备状态。状态被定义为一个或多个称为属性的值。访问这些属性的协议被称为属性规范(ATT)
  • 属性协议(ATT)定义了位于L2CAP通道之上服务器角色设备和客户端角色设备之间的通信。属性协议定义了两个角色:
    • 服务器:作为存储一个或多个属性数据的设备
    • 客户端:收集一个或多个服务器信息的设备
  • 客户端可以访问服务器的属性,客户端通过发送请求来触发服务器的应答
  • 为了提高效率服务器可以主动发送两种未经请求的属性消息:
    • notifications:不需要确认
    • indications:需要客户端发送确认
    • 客户端也可以向服务器发送消息以写入属性值。请求/响应、指示/确认事务遵循stop-and-wait模式
  • 为了提高效率服务器可以主动发送两种未经请求的属性消息:
  • 属性定义:
    • 属性可以是0-512字节不等的数组,它可以是定长也可以是变长
    • 所有的属性都包含句柄,句柄用于寻址单个属性。如图所示客户端通过句柄访问服务器的属性
    • 属性同样包含类型,用UUID进行描述
  • 属性协议操作
    • 属性协议是一种无状态、顺序的协议,这意味协议中不存储状态,一次只能执行一个操作
    • 属性协议方法如下面描述
  • 应答
    • ATT操作通常需要应答(ACKs)。这允许应用程序知道哪些数据包已成功传输,这可应用于设计可靠的应用程序
    • 因为服务器必须等待客户端的应答,因此数据的吞吐量会受到影响
    • Non-ACKed操作可以应用于高吞吐量的应用,它可以在一个连接间隔内执行多个操作。链路层仍会重传丢失的包,所以可靠性不受影响。但应用程序不知道哪些数据包已经成功发送
    • 多种操作如图所示:

6. GATT(通用属性规范)

  • 通用属性协议(GATT)建立在属性协议(ATT)之上,并为属性协议传输和存储的数据提供统一的框架。GATT定义两个角色:服务器和客户端
  • GATT服务器存储通过ATT传输的数据,并接收来自GATT客户端的ATT请求。GATT服务器另一方面发送请求应答,当收到配置时发送指示和告知到GATT客户端。GATT还指定存储在GATT服务器上的数据格式
  • 属性分为服务和特性,服务包含一系列特性。特性包含单个值和描述特性值的任意数量的描述符
  • 蓝牙规范定义了数据交换的结构。规范定义了元素例如服务和特性,他也包含安全定义和连接建立参数。通常规范包含高级用例所需的一项或多项服务,例如心率、节能监控。标准的规范允许设备和软件供应商互连互通
  • 服务:是由一个或多个特性组成的数据集合,用于完成设备的特定功能,例如电池监控或温度数据而不是完整的用例
  • 特性:是在服务中使用的一个值,用于公开或交换数据或控制信息。特性具有明确定义的已知格式。它们包含如何访问信息、必须满足哪些安全需求、特性值如何被显示和解释。特性同样包含特性描述符、特性配置权限、数据指示和告知
  • 下图说明了GATT客户端、GATT服务器、服务、特性、特性声明、数据、描述符之间的关系:

7. GAP(通用访问规范)

  • GAP通常是蓝牙开发者所接触到第一个协议。这是因为GAP通常用于控制一个设备对于其它设备的可见和可连接,以及如何被远程设备发现和连接
  • 简单来说,GAP提供了对链路层操作(如链路操作章节描述的那样)的访问,这些链路层操作和设备发现,连接建立,终止以及连接时序控制有关
  • GAP定义了为底层控制器提供特定要求的设备角色。角色允许设备射频只Tx、只Rx或者两种功能都有
    • 广播者(TX only):发送广播事件和广播数据
    • 侦察者(RX only):侦听广播事件和广播数据
    • 从设备(RX TX):从设备总是能被连接和广播,能被主设备单一连接的一种简单设备
    • 主设备(RX TX):通常主设备从不广播,专门负责启动和管理多个连接
  • 一个设备可以支持多个角色,但在给定的时间内只能支持一个角色
  • GAP还定义了发现、连接、绑定的模式和过程
    • 模式:
      • 可连接:能够创建一个连接。状态:不可连接、可连接
      • 可发现:能够被发现(is advertising)。状态:无、有限、常规
      • 可绑定:如果可连接,将于连接的设备配对以实现长时间连接。状态:不可绑定、可绑定
    • 过程:
      • 名称发现:进入菜单并发现其它设备的名称。该名称与双模设备中的BR/EDR共享
      • 设备发现:搜索可用于连接的设备
        1:发现设备地址和名词

        2:定义设备角色
      • 连接建立:选择一个广播设备和它建立连接
        1:指示链路层发送CONNECT_REQ
        2:执行服务发现
        3:请求设备认证
        4:请求使用服务
      • 服务发现:用于查找主设备和从设备之间对等的服务

8. 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和最新的标准中,私有地址在控制器处解析和生成,而不涉及主机