Bluetooth协议学习

蓝牙协议学习

背景知识

蓝牙(Bluetooth)是一个短距离无线传输的技术,工作在免证的ISM频段。最初名字为Wibree,在90年代由Nokia设计开发,随后转交给蓝牙特别兴趣小组(SIG)专门维护。

蓝牙标准经过了数十年不愠不火的发展,核心版本从1.0迭代了到目前的5.2,其中在2010年推出的蓝牙4.0版本标准中引进了Bluetooth Smart或者Buletooth Low Energy(BLE)。由于在功耗上有了极大改善,加上智能手机和智能设备的发展,BLE的应用也进入了爆发期。

4.0之前蓝牙通常称为经典蓝牙(Classic Bluetooth),包括1.0提出的BR(Basic Rate,基础速率) 以及2.0提出的EDR(Enhanced Data Rate,增强数据速率),两者往往放在一起表示与低功耗蓝牙相对的传统蓝牙。BR/EDR常用于相对短距离无线的连续连接,比如耳机的音频传输。

为了进一步提高蓝牙传输速率,在3.0中又提出了基于802.11的**AMP(Alternate MAC and PHY layer extension)**拓展,这是和BR/EDR不并存的一种传输模式

两种蓝牙技术:Basic Rate(BR)和 Low Energy(LE)简介

蓝牙协议包括两种技术:Basic Rate(简称BR)和Low Energy(简称LE)。这两种技术,都包括搜索(discovery)管理、连接(connection)管理等机制,但它们是不能互通的!

BR/EDR和BLE虽然都称为蓝牙,但它们在实现上大相径庭。前者主要侧重于点对点的通信,连接性和传输速率是考虑的重点;
而BLE则侧重于低功耗的设计,在射频层和基带层上优化了多播和广播的支持。
传统上Controller芯片只支持一种射频模式,但越来越多设备中也同时支持两种系统,以覆盖尽量多的使用场景。
在这里插入图片描述
蓝牙的核心系统架构包含一个Host和一个或多个Controller,Host可以理解为主核或者主板,运行主流的富操作系统;而Controller可以看做是蓝牙芯片,运行的是裸机程序或者RTOS,主要功能是对射频信号进行编解码。Host和Controller之间通过HCI接口(Host Controller Interface)进行通信,可通过UART、USB等物理接口进行传输。核心系统中包含的组件和之间的关系如下图所示:
在这里插入图片描述

Host部分主要是基于L2CAP抽象出的逻辑信道实现应用层的协议和功能,涉及的关键组件和协议有:

• Channel Manager:负责创建、管理和释放L2CAP channel。

• L2CAP Resource Manager:负责管理PDU数据的顺序、调度、分片、重组等功能,是L2CAP核心功能的一部分。

• SMP:Security Manager Protocol,实现BLE系统中的点对点安全认证功能,包括秘钥生成和认证等;BR/EDR系统的对应功能则在Controller的Link Manager中实现。

• ATT:Atrribute Protocol,应用层attribute client和server之间的协议。

• GATT:Generic Attribute Profile,表示ATT server或者client的功能,profile描述了服务和属性的层级结构,主要用于LE profile服务发现中。

• GAP:Generic Access Profile,表示所有蓝牙设备通用的基础功能,比如传输层、协议、应用所使用的模式或流程等。GAP服务包括设备和服务发现、连接模式、安全认证和关联模型等。

Controller部分中更多是逻辑链路和物理链路的管理,包括:

• Device Manager:基带(baseband)中控制设备行为的模块,主要负责不与传输直接相关的部分,比如查询周围蓝牙设备,连接蓝牙设备,切换蓝牙设备的状态(discoverable/connectable),以及修改蓝牙名称、属性等。
• Link Manager:负责创建、修改和释放逻辑链路(logical links)以及对应的逻辑传输(logical transports),并更新设备之间对应物理链路(physical links)的相关参数。在BR/EDR系统中,与对端的Link Manager通过LMP协议(Link Manager Protocol)进行通信;在BLE系统中则使用的是LL协议(Link Layer Protocol)。
• Link Controller:负责对指定物理信道(逻辑链路和逻辑传输)的蓝牙数据进行编解码。
常见协议:
HCI

在前面的介绍中我们已经多次提到,主机系统称为Host,蓝牙射频芯片的系统称为Controller,它们之间的通信接口称为HCI(Host Controller Interface),同时这也是其传输协议的名字。

HCI是Host端所能接触的最底层协议,通过内核的HCI驱动进行操作,基于HCI逐步往上封装和实现了一系列高级协议。HCI协议是HCI接口最底层的协议,可根据传输层的介质分为不同类型。

HCI数据包分为command、event和data三种类型。command表示Host发送给Controller的命令,event为Controller发送给Host的事件,data通常是实际的蓝牙传输数据

HCI command的格式为:
16bit opcode | 8bit 参数长度 | 可变参数

其中opcode又分为两部分,高6位为OGF(Opcode Group Field),低10位为OCF(Opcode Command Field)。在Linux中我们常用的bluez框架也可以直接发送hci命令:

$ hcitool cmd --help
Usage:
        cmd <ogf> <ocf> [parameters]
Example:
        cmd 0x03 0x0013 0x41 0x42 0x43 0x44

HCI event的格式为:
8bit event code | 8bit 参数长度 | 可变参数

通常Host发送的command都会收到Controller的返回event,提示命令的执行结果。
例如,HCI命令0x200c表示LE Set Scan Enable,并通过参数控制开启和关闭BLE的扫描,Controller执行完毕后返回event code 0x0e,即Command Complete,并附带status作为参数表示结果是否成功。

除了command和event,HCI中还包括的一大载荷就是数据,比如前面提到的同步数据包SCO、ISO(isochronous)和无连接数据包ACL等。

L2CAP:

ACL只提供了一个数据传输协议,类比于网络协议栈中的IP协议,在其之上使用的L2CAP协议可以类比于TCP/UDP协议,一个介于应用程序(Profile、Application等)和Link Layer之间的protocol,实现了更为完善的数据传输功能,包括:

• 协议/信道(L2CAP channel)多路复用
• 分段(segmentation)和重组(reassembly)
• 基于L2CAP channel的流量控制机制
• 错误控制重传机制
• 支持流式传输(streaming)
• 分片(fragmentation)和重组(recombination)
• QoS(Quality of Service)

L2CAP channel表示两个设备之间的一条逻辑链路,使用channel id(CID)进行区分,并以此为基本单元在Controller逻辑链路上进行多路复用。
在基于连接的信道(connection-oriented channels)中,L2CAP PDU也称为B-Frame,其格式如下:

16bit length | 16bit CID | information payload

前32bit称为L2CAP header,length是除了header以外的payload长度。在不同的L2CAP模式中,information payload的内容也不尽相同,比如在Supervisor Frame(S-Frame)、Information Frame(I-Frame)。而对于无连接的L2CAP数据包,在payload之前还包含大于等于2字节的PSM(Protocol/Service Multiplexer),头部还是和B-Frame一致的。

在L2CAP之上,有着各种各样的应用层协议,比如服务发现协议SDP,蓝牙传输协议RFCOMM/OBEX,BLE的属性协议ATT,甚至是通用以太网协议BNEP以及其上的TCP/IP网络栈等。通过分层和抽象使得上层应用无需关心底层的细节,从而实现了整个蓝牙协议栈的普适性和拓展性。

GAP(Generic Access Profile)

GAP的主要功能,是定义BLE设备所具备的能力,以实现互联互通的功能。

对BEL基于连接的通信来说,GAP定义了4种连接有关的模式

• Non-connectable mode,不可被连接。
• Directed connectable mode,可以被“直连”(在知道对方蓝牙地址的情况下的快速连接)。
• Undirected connectable mode,可以被“盲连”(不知道对方蓝牙地址)。
• Auto connection establishment procedure,可以被自动连接(不需要host干预)。

相应地,GAP定义了5中和这些模式有关的过程

• General connection establishment procedure,通用的连接建立过程,搜索、发现、连接,都需要Host参与。
• Selective connection establishment procedure,有选择的连接建立过程,Host需要告诉Controller,自己只希望于特定的设备建立连接。
• Direct Connection Establishment Procedure,直接和某一个已知设备建立连接(对方也知道我们)。
• Connection Parameter Update Procedure,连接参数的更新过程。
• Terminate Connection Procedure,断开连接。
SDP (Service Discovery Protocol)

SDP是经典蓝牙中的高层协议,使用 C/S 架构。它定义了 client 如何发现 server 提供的服务:

上图中的关键点是,client 必须等待 server 响应当前的 request PDU 后,才能发送下一个 request PDU。Request PDU 会携带限制 response PDU 返回数据大小的字段,比如 MaximumAttributeByteCount

Bluetooth SDP Protocol

•   PDU: Service Search Attribute Request (0x06)
•   Transaction Id: 0x0000
•   Parameter Length: 15
•   Service Search Pattern: Public Browse Group
•   Maximum Attribute Byte Count: 65535
•   Attribute ID List
•   Continuation State: no (00)

Response PDU 也会携带相应的字段表示自己返回数据的长度,比如 AttributeListsByteCount:

Bluetooth SDP Protocol

•   PDU: Service Search Attribute Response (0x07)
•   Transaction Id: 0x0000
•   Parameter Length: 667
•   Attribute List Byte Count: 662
•   Data Fragment
•   Continuation State: yes (02 96)
•   Continuation State Length: 2
•   Continuation State Value
BNEP

BNEP(Bluetooth Network Encapsulation Protocol) 网络封装协议。为了使集成蓝牙技术的电脑、电话、PDA、家用电器等网络设备交换信息,需要在网络层统一数据分组。网络封装协议将来自不同网络的数据分组重新封装,通过 L2CAP 进行传输。BNEP 支持 Ipv4、Ipv6

在BNEP之上是PAN profile, 实现了网络层。

除了各种封装消息外,BNEP还支持BNEP控制消息。控制消息有助于建立PAN连接和各种流量控制功能

为了可以让多个控制信息在一个L2CAP报文里面,一个可选的Extension header可以加在BNEP header后面,如果将BNEP header中的”extension bit“置为1,则表示这个BNEP报文会包含extension header

未待完续…

参考:
https://mp.weixin.qq.com/s/Ojm3LSw8q8H5pAT-JxUyqA
http://www.wowotech.net/bluetooth/bt_protocol_arch.html
https://evilpan.com/2021/07/10/bluetooth-sec/#%E6%A0%B8%E5%BF%83%E7%B3%BB%E7%BB%9F

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值