蓝牙官方(The Bluetooth Special Interest Group
)定义了低功耗蓝牙(Bluetooth low energy
,即LE
)和基础/增强速率蓝牙(Bluetooth basic rate/enhanced data rate
,即BR/EDR
)两种技术的协议栈。这两种协议栈可以单独使用,也可以同时使用,如下图所示:
这里仅对Bluetooth LE Protocol Stack
进行介绍:
下图展示了蓝牙的协议栈和OSI(Open System Interconnection
)参考模型的对比。
- OSI模型的数据链路层对应着蓝牙的
Link Layer
和L2CAP
层。 - 蓝牙LE栈的上层提供应用层服务、设备角色和模式、连接管理和安全协议
蓝牙LE协议栈按功能分为三个层:Controller
、Host
和Application Profiles and Services
,
1、Controller
控制层包含着蓝牙LE物理层(PHY
)、数据链路层(LL
)和控制端主机控制接口(HCI
)。
蓝牙LE物理层工作在无需许可的2.4GHz频段,它有以下特性:
- 射频频率范围为2.4GHz~2.4835Hz
- 通道带宽为2MHz,工作频带分为40个频道,第k个通道的中心频率为
2402+k×2Mhz,k=0,...,39
- 用户的数据包在0~36通道传输
- 广播数据包在37、38和39通道传输
- 采用高斯频移键控(
GFSK
)调制方案 - 采用跳频扩频(
FHSS
)来减少干扰和对抗衰落信道的影响。频率跳变的时间范围为7.5ms~4s
(1)LL
LL层执行类似于OSI模型的介质访问控制(MAC
)层的任务,它直接与蓝牙PHY层直接相连,并管理链路状态。
(2)HCI
HCI层负责处理主机和控制器之间的通信。HCI为数据包数据的传输和接收定义了一组命令和事件。当从控制器接收数据包时,HCI从控制器提取原始数据发送给主机。
2、Host
Host层包括了逻辑链路控制与适配协议(Logical Link Control and Adaptation Protocol
,即L2CAP
)、属性协议(attribute protocol
,即ATT
)、通用属性配置文件(generic attribute profile
,即GATT
)、安全管理协议(security manager protocol
,即SMP
)和通用访问配置文件(generic access profile
,即GAP
)。
(1)L2CAP
L2CAP层处理蓝牙数据的收发:
- 将来自蓝牙LE上层的数据封装成标准的蓝牙LE报文格式进行传输
- 根据ATT层和SMP层指定的链路配置,在接收时从标准的蓝牙LL层报文中提取数据
(2)ATT
ATT基于GATT属性概要在客户端和服务端之间传输属性数据。ATT会将数据组织成如下图所示的属性:
attribute handle
:由服务端分配的一个16位的标识符,客服端可以通过这个句柄来查询指定的attributesattribute type
:为蓝牙官方定义的一个通用唯一标识码(universally unique identifier
,即UUID
) ,长度为2或16字节- UUID的标准长度为16字节,但为了减少传输的数据量,蓝牙协议栈中会将用户提供的2字节UUID映射为一个16字节的UUID。
attribute value
:长度可变,与UUID对应的attribute valueattribute permissions
:指定属性的读写权限,以及读写权限所需的安全级别
(3)GATT
GATT封装了ATT,主要用来规范attribute中的数据内容,并将不同的attribute进行分组分类。负责协调蓝牙LE链路中配置文件的交换,配置文件包括诸如handle分配、UUID和权限等信息和数据。
(4)SMP
SMP通过安全算法对数据包进行加解密。
(5)GAP
GAP用于指定设备的角色(Server/Client)、工作模式和过程。它还管理连接的建立和安全。GAP直接与应用程序配置文件和App层连接。目前主要用来进行广播、扫描和发起连接。