蓝牙协议栈
无线射频
- 负责数据的发射和接收
- 采用全向天线,支持点到多点通信,使得多台蓝牙设备可以分享网络资源;
- 调制方式:高斯滤波二进制频移键控(GFSK)三种可用功率级别:
功率等级 | 最大输出功率 | 正常输出功率 | 最小输出功率 |
1 | 100 mW | - | 1 mW |
2 | 2.5 mW | 1 mW | 0.25 mW |
3 | 1 mW | - | - |
频带:2400-2483.5MHz,分为79个跳频信道,每个信道带宽为1MHz,上保护带宽3.51MHz,下保护带宽2MHz。
蓝牙2.0 EDR模式对分组调制方式的修改:
- 分组头和接入码使用GFSK调制,速率为1 Mb/s
- 同步序列、载荷与尾序列使用增强数据传输速率下的PSK调制,支持的射频数据传输速率为2 Mb/s与3 Mb/s
基带
- 与射频一起构成蓝牙协议栈的物理层
- 发送数据时负责把高层协议的数据编码。接收数据时负责将来自射频的数据解码。
- 组网(微微网,散射网)
- 组合了电路交换和分组交换的功能
蓝牙地址 (BD_ADDR)
全世界所有蓝牙设备地址唯一
公司分配号 | 公司ID | 公司ID |
低位地址LAP(24bit) | 高位地址UAP(8bit) | 无意义地址NAP(16bit) |
链路管理
LM(link manager)将上层的命令转化为基带层的操作。
基本功能:
- 处理和协商基带分组的大小,满足特定的服务质量;
- 链路管理和安全性管理,包括ACL和SCO链路的建立和关闭等。
- 管理设备功率。
LMP协议数据单元
- LMP消息称为LMP_PDU,主要用于链路管理、安全和控制。优先级高,可以优于SCO分组传输。
- LMP_PDU是ACL分组的净荷,作为单时隙分组在链路管理逻辑信道上传输信息。
L2CAP
逻辑链路控制和适配。
- 将高层使用的大分组拆分成基带可以传输的小分组,并在接收阶段完成组装
- 支持对不同的高层协议进行多路复用,允许高层协议共享底层链路。
- L2CAP只支持ACL,最大速率64KBytes。只传输数据分组,不传输蓝牙音频
RFCOMM
电缆替代协议
- 蓝牙最早开发的目的是取消电器之间的连线,替代电缆是最基本、最主要的应用方式
- 在蓝牙基带上仿真RS232的控制和数据信号,为串行电缆作为传输机制的高级业务提供传输能力
- 作用类似于TCP/IP中的TCP,为各种高层应用提供接口,实现端到端通信
- 依靠基带提供可靠、有序的比特流,本身没有纠错能力,流量控制也依赖基带
服务发现协议
蓝牙场景具有ad-hoc特征,动态性强
帮助网络中的设备和服务之间容易彼此发现、相互协商和配置
SDP是客户机-服务器结构的协议
- 服务器是为其他蓝牙设备提供服务的设备
- 客户机是在一个有效通信范围内想要查找服务的设备
服务查询过程
- 建立L2CAP远程连接
- 搜索SDP服务器上指定的服务类型,或浏览服务列表
- 获得连接到指定服务所需要的属性值
- 建立一个单独的连接使用该服务
SDP数据库
属性标志符ID 属性值(类型和长度可变) |
服务属性1 |
服务属性2 |
… |
服务属性n |
强制属性
- 服务类型,属性标志符为0x0001
- 服务句柄,32bit无符号证书,是服务记录的指针,唯一地标志了一个SDP服务记录
通用唯一标志符 UUID
- 标志服务类型
- 为开发者自己开发的服务类别分配独特的UUID避免命名冲突。
- 分布式生成,不重复
- 传统的UUID是128bit,可以缩减为16bit或32bit。
- 128_bit_value = 16_bit_value * 296 + Base_UUID
- 128_bit_value = 32_bit_value * 296 + Base_UUID
SDP消息
设计目标:简单易实现,与L2CAP良好兼容
消息浏览模式
- 浏览服务器中所有可用服务来查找需要的服务(查找服务列表,返回列表中所有的UUID)
- 根据查找特定的服务(根据UUID)
协议子集
GAP
- 描述了两个蓝牙设备建立通信时必要的基本操作,包括设备发现、链路建立和配置,以及安全方面的内容。
- 设备角色
- 广播者(Broadcaster):周期性发送广播信息
- 观察者(Observer):侦听信道,接收广播信息
- 中心设备(Central):发起连接的一方
- 外设(Peripheral):接收连接的一方
主设备和从设备之间的链路
SCO链路(电路交换)
- 主设备与从设备之间对称、点对点同步链路;
- 主要用于传送实时性需求较高的语音分组
- 通过预先保留的时隙连续的传输信息,可以看做电路交换
- 不允许分组重传(无校验位),保证实时性
- SCO包使用前向纠错FEC(Forward Error Correction)
- 分组头:1/3 FEC (每一位重复三次)
- 负载:2:3 FEC (2:3简要海明码)
- 不管有无数据发送,系统都会预留固定间隔的时限给主设备与从设备,其他从设备就不能利用此连接上的时隙来发送数据
ACL链路(异步分组交换)
- 分组交换只传输数据分组。
- 主设备在为SCO传输预留时隙后,把异步ACL传输分配在剩下的时隙中
- ACL比SCO优先级低,一旦系统要SCO传输,ACL必须自动让出预留时隙
- 支持广播,主设备可以向微微网中所有从设备发送消息。
- ACL采用CRC校验,接收错误会重传
蓝牙组网
蓝牙个域网的ad hoc 特性
- 独立组网:很短的时间里自动组成一个独立的网络
- 多跳路由:相互通信范围之外的节点需要经过多跳
- 拓扑动态变化:某些节点移动、关闭和开启电源,引起节点和链路数量及分布的变化
- 特殊的信道特征:受无线信道冲突等影响,链路的实际带宽远小于理论带宽,且动态变化
- 节点能耗受限
- 安全性:易受到窃听、主动入侵、拒绝服务等攻击
微微网
- 首先提出通信要求的为主设备,被动进行通信的设备是从设备(仅在基带有此区分)
- 一个微微网中有1个主设备,最多有7个从设备
- 主设备的时钟传送给从设备,从设备加上偏移量
微微网内部调度
- 如果主设备没有数据给从设备,就发送POLL分组
- 如果从设备没有数据给主设备,发送NULL
- 降低POLL和NULL分组的比例,是提高调度效率的根本
时钟
- 每个蓝牙设备有一个独立运行的28bit内部系统时钟,频率为3.2kHz
- 决定收发器的定时和跳频
- 与提他设备同步时,在本地时钟上增加一个偏移量
散射网
同一个区域中可以同时存在多个微微网,如果有蓝牙设备进入这样的网络,并作为桥接设备,将在空间上重叠的微微网相互连接起来,组成散射网
循环轮询的改进方法
- 彻底循环轮询
- 直到主设备和从设备发完信息后才轮询至下一个设备;(有什么问题?)
- 公平性问题,一些节点可能一直有数据发送,使得其他设备没法发数据
- 限制的循环轮询
- 限制每次连接后的数据传输数量
- 依赖主设备和从设备状态的轮询
- 给每一对M-S安排优先级
- 1代表有数据发送,0代表无数据发送。
- 1-1优先级最高,其次是1-0和0-1,最低是0-0
环轮询 - 直到主设备和从设备发完信息后才轮询至下一个设备;(有什么问题?)
- 公平性问题,一些节点可能一直有数据发送,使得其他设备没法发数据
- 限制的循环轮询
- 限制每次连接后的数据传输数量
- 依赖主设备和从设备状态的轮询
- 给每一对M-S安排优先级
- 1代表有数据发送,0代表无数据发送。
- 1-1优先级最高,其次是1-0和0-1,最低是0-0