BLE (低功耗蓝牙)协议入门-01

本章介绍蓝牙协议(重点介绍:BLE)的基本特点、版本演进、协议的构成、等基础知识,本章重在了解,目的是对BLE协议有个大概的认知,即了解BLE协议栈的全貌。后续的章节会对每一部分单独进行详细的讲解。

00-蓝牙的历史

  • 蓝牙(英语:Bluetooth),一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由2.4至2.485 GHz的ISM频段来进行通信。1994年由电信商爱立信(Ericsson)发展出这个技术。它最初的设计,是希望创建一个RS-232数据线的无线通信替代版本。它能够链接多个设备,克服同步的问题。

  • 蓝牙技术目前由蓝牙技术联盟(SIG)来负责维护其技术标准,其成员已超过三万,分布在电信、电脑、网络与消费性电子产品等领域。IEEE曾经将蓝牙技术标准化为IEEE 802.15.1,但是这个标准已经不再继续使用。

  •  蓝牙技术联盟 (英语:Bluetooth Special Interest Group,缩写为SIG)拥有蓝牙的商标,负责制定蓝牙规范、认证制造厂商,授权他们使用蓝牙技术与蓝牙标志,但本身不负责蓝牙设备的设计、生产及贩售。

   
版本 主要功能
1.1 传输率约在748~810kb/s,因是早期设计,容易受到同频率之间的类似通信产品干扰,影响通讯质量;单工
1.2 同样是只有748~810kb/s的传输率,但增加了抗干扰跳频功能;单工
2.0 2.0是1.2的改良提升版,传输率约在1.8M/s~2.1M/s,可以有(双工)的工作方式
2.1 为了改善蓝牙技术存在的问题,蓝牙SIG组织(Special InterestGroup)推出了Bluetooth 2.1+EDR版本的蓝牙技术。改善装置配对流程:以往在连接过程中,需要利用个人识别码来确保连接的安全性,而改进过后的连接方式则是会自动使用数字密码来进行配对与连接
3.0+HS 2009年4月21日,蓝牙高速版,传输速率可达24Mbps
4.0 支持低功耗;AES-128加密 将传统蓝牙技术、高速蓝牙技术和低功耗蓝牙(Bluetooth Low Energy,简称BLE)技术集为一体
4.1 IoT相关的特性增强
4.2 2014年12月4日,支持:IPv6;隐私保护;加密算法升级;DLE支持
5.0 2016年6月16日在伦敦正式发布,为现阶段最高级的蓝牙协议标准; • 4 X Range • 2 X Speed • 800% Broadcast Capacity

​ 2019年1月,蓝牙技术联盟推出了蓝牙5.1规范。

​ 2020年1月,蓝牙技术联盟推出了蓝牙5.2规范。
  • 从上表演进史可以得出,4.0之前的版本演进主要在追求通信速度,3.0高速蓝牙达到了24Mbps;4.0及其之后的版本演进主要在追求低功耗/低成本等物联网IoT特性。
  • 我们常说的蓝牙4.0不等同于BLE,BLE只是蓝牙4.0的子集;蓝牙4.0是一个综合性协议规范。
  • 蓝牙4.0版本以后技术模式上分为低功耗蓝牙(BLE)和经典蓝牙(BR/EDR)两种、市场芯片多数为仅支持BLE的,也有两者都支持的(双模蓝牙芯片)。
  • 蓝牙芯片的三种功能配置:

undefined



01-蓝牙协议栈

蓝牙协议栈由主机 + HCI(可选) + 控制器三大块组成,其中对于单芯片方案是没用HCI的。

  • 主机(Host) :主机部分由核心协议层(L2CAP、SDP、SMP、ATT)和核心规范(GAP、GATT)构成;
  • 控制器(Controller):此部分拆分为低功耗蓝牙(Vol 6: Low Energy Controller)和经典蓝牙(Vol 2: BR/EDR Controller)两个章节说明
  • HCI:此部分定义了主机和控制器之间通信的接口标准(Vol 4: Host Controller Interface),可以是UART、USB等通信方式。

undefined

  • 上图中红色部分是BR/EDR经典蓝牙的必选项,绿色部分是LE低功耗蓝牙必选项,蓝色部分是公共部分;当然经典蓝牙也可以具备绿色部分特性。HCI接口根据芯片架构有关,是可选项。
  • BLE协议栈的实现方式采用分层的思想:
    • 控制器部分包括:物理层(PHY)、链路层(LL)、控制接口层(HCI)
    • 主机部分包括:裸机链路控制及自适应协议层(L2CAP)、安全管理层(SMP)、属性协议层(ATT)、通用访问配置文件层(GAP),通用属性配置文件层(GATT)
  • 下图为一个经典BLE系统框架图,尔其中的  Host 、 Controller 就是BLE协议栈。

undefined



02-物理层

  • BLE的物理层定义了如何使用无线电发射器/接收器来编码和解码用于传输和接收的数字数据,以及应用的其他无线电相关参数和属性。[现阶段可以略过]
  • 主要了解下Frequency Band
    • BLE在2400Mhz至2483.5 MHz的2.4GHz免授权频段内工作。BLE采用40个信道,每个信道间隔为2MHz,分为数据信道和广播信道;广播信道占用3个,用于发现设备、建立连接、广播数据;数据信道占用37个,用于已建立连接设备间的数据通信。建立连接的两个设备,必须同一时间处于同一信道上才能通信。
    • 其中37/38/39固定为广播信道,其余为数据信道。 undefined

03-链路层(LL)

  • 低功耗蓝牙参考 《Core_v5.3.pdf》中 Part B: Link Layer Specification 章节部分,LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者GATT。
  • 报文是链路层的基石,是BLE通信的基础设施,它包含四个字段:前导码、访问地址、协议数据单元(PDU)和循环冗余校验(CRC)。在广播、扫描或建立连接的过程中使用广播通道PDU 传输广播包。而用于与连接器件交换数据的数据包是通过数据通道PDU 传输的。链路层数据包的格式如图: undefined
  • 广播包的报头与数据包的报头内容不同
    •  广播包 的报头,包含了:PDU Type(4bit) 广播报文类型、RFU(1bit) 未使用、ChSel(1bit) 未使用、TxAdd(1bit) 发送地址类型、RxAdd(1bit) 接收地址类型、length(8bit) payload长度。
    •  数据包 的包头,包含了:LLID(2bit)逻辑链路标识符、NESN(1bit)下一个预期序列号、SN(1bit)序列号、MD(1bit)更多数据、RFU(3bit)保留、length(8bit)长度。

04-HCI层

  • HCI (Host Controller interface), 为Host访问Controller提供一组标准的接口
  • 主要完成3个任务:
    • Host通过HCI发送命令给Controller
    • Controller通过HCI将事件发送给Host
    • 传递ACL Data(面向连接,在连接通道上进行数据传输)
  • 这里所说的接口既包括两个设备之间的物理接口,也包括逻辑接口。逻辑接口定义了命令、事件和数据的封包格式。而物理接口定义了主机和控制器之前如何传输这些数据。蓝牙规范定义了4种物理接口,3线 串口 、4线串口、HID、SDIO。这里不做过多介绍。

05-L2CAP层

  • L2CAP是个复用层,可以让低功耗蓝牙复用三条不同的信道。它也支持数据的分割和重组功能,使得较大的报文可以在底层无线电中传输。
  • 主要功能:屏蔽了控制器传输协议中的许多特性,方便高层协议的开发;报文分片和重组(SAR);流控、重传、报文完整性校验等。 undefined

06-SMP层

  • SMP(Secure manager protocol)。定义了蓝牙设备配对、认证、解密等行为的安全操作,SMP用来管理BLE连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是SMP要考虑的工作。

07-ATT层

  • ATT(属性协议):定义了访问对端设备上数据的一组规则,是GATT规范的基础,也是低功耗蓝牙的基石。定义了Host端属性报文格式和报文类型。这一层的关键词是Attribute(属性)。一个属性其实就是一条数据,属性是BLE数据提供单元,也是蓝牙空中传播数据的最上层,BLE开发过程中接触最多的就是这一层。
  • ATT数据格式(本章简单了解即可) undefined

08-GATT层

  • GATT(Generic Attribute Profile, 通用属性规范),自己本身不提供数据,而是将ATT层提供的属性组合起来构成的服务。通过ATT层可以读写对端设备的属性值,各个属性之间有什么联系各个属性之间怎么组合起来的,是由GATT层负责。服务是GATT层的关键字,服务由属性组成。

  • 一个BLE设备可以由多个服务组成,一个服务可以包含多个特征(characteristic),一个特征可以包含多个属性。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑,但互联互通就会出问题。

09-GAP层

  • GAP(Generic Access Profile, 通用访问规范):定义了所有蓝牙设备的基础功能,设备间发现、连接、配对绑定的流程;蓝牙设备中四种角色;广播和扫描响应报文的格式;还有一些通用蓝牙参数定义,比如设备地址、名称、配对秘钥和设备的外观特征值,用于区分是什么设备,手机还是电脑;明确了作为一个低功耗蓝牙设备的基本需求,包含哪些层级以及如何协同工作的。 规范了一些通用的蓝牙参数:蓝牙设备地址、设备名称、配对秘钥、外观特征值(用于区分设备是手机还是电脑)。 其他详情可参考《Core_v5.3.pdf》中 Part C: Generic Access Profile 章节部分。

参考:

 蓝牙协议学习入门 - SeeDeer的博客 

蓝牙技术联盟核心规范: http://www.bluetooth.com


九筒网络安全研究社,专注于汽车安全、车联网安全、IoT安全、工控安全领域的研究!

团队博客: 九筒网络安全研究社 - 团队博客 

GitHub: https://github.com/9-tong 

微信公众号:九筒网络安全研究社

CSDN: 九筒网络安全研究社 - CSDN 

看雪论坛: 九筒网络安全研究社 - 看雪论坛 

FreeBuf: 九筒网络安全研究社 - FreeBuf 

腾讯开发者社区: 九筒网络安全研究社 - 腾讯云开发者社区 

知乎: 九筒网络安全研究社 - 知乎


作者

author