BLE链路层空口包--数据物理信道PDU

连接建立之后,BLE通信便从广播信道切换到了数据物理信道。数据物理信道(Data Physical Channel)PDU是蓝牙通信中的核心组成部分,它负责在已建立的连接上高效、可靠地传输数据。

本文将深入拆解数据物理信道PDU的结构,并解释它是如何通过精巧的头部设计,实现对数据(LL Data PDU)和控制(LL Control PDU)的统一承载与管理。

1. 数据包 vs. 广播包

在BLE链路层中,无论哪种类型的空中包(Air Interface Packet),其外层结构都是一致的:前导码(Preamble)、接入地址(Access Address)、PDU和CRC。然而,正是接入地址(Access Address) 这个字段,决定了这个包是发给所有人的"广播包",还是只给特定对象的"数据包"。

  • 广播包 :接入地址是固定值 0x8E89BED6,主要在3个广播信道(37、38、39)上传输,用于设备发现和广播数据。

  • 数据包 :接入地址是一个32位的随机值 ,由连接发起方(Initiator)在建立连接时生成,并在数据信道(除37/38/39外的其余37个信道)上传输。每建立一次连接,这个接入地址都会重新生成,确保了连接的隐私性和唯一性。

一旦连接建立,通信双方便开始在数据信道上交换数据包。这时,PDU本身的结构就决定了它承载的是用户数据还是链路层控制信息。

2. PDU的整体结构

数据物理信道PDU由头部(Header)可变长度的有效载荷(Payload) ,以及可选的消息完整性检查(MIC) 字段组成。其头部可能是16位或24位,这取决于是否包含CTEInfo字段。

3. PDU头部(Header)

数据PDU头部的核心是16位(2字节) 的固定部分,之后可能紧跟着可选的CTEInfo字段。这16位的布局如下:

各字段含义如下:

字段 位数 描述
LLID 2 bits 链路层标识符,这是最关键的字段,用于区分有效载荷的类型。
NESN 1 bit 下一个期望的序列号,用于实现ACK和重传双重功能。
SN 1 bit 序列号,用于区分是新数据包还是重传包。
MD 1 bit 更多数据,指示发送端是否还有数据要发。
CP 1 bit CTEInfo是否存在,为1时表示头部后紧跟CTEInfo字段。
RFU 2 bits 保留供未来使用。
Length 8 bits 有效载荷长度,范围0-255字节,但有效载荷实际最长251字节。
CTEInfo 8bits 指示恒音扩展的类型及长度

3.1 LLID:区分"数据"与"控制"的关键

LLID(链路层标识符)决定了有效载荷的解析方式。根据LLID的值,数据物理信道PDU的有效载荷可以分为两种类型:

LLID值 类型 描述
01 LL Data PDU L2CAP消息的延续片段(Continuation fragment),或空PDU。
10 LL Data PDU L2CAP消息的起始片段(Start of L2CAP message),或完整的非分片消息。
11 LL Control PDU 链路层控制PDU,包含各种控制命令。
  • LL Data PDU

当头部中 LLID 字段设为0b10时,LL数据PDU的长度字段不得设为0,也不得设为小于4的值。

  • LL Control PDU

由Opcode和CtrData字段组成。对于给定的opcode,CtrData字段的长度是固定的。

其中Opcode包括:

3.2 NESN/SN:无额外ACK包的ARQ重传机制

BLE链路层通过NESNSN两个1-bit字段,巧妙地实现了确认(ACK)和重传(Retransmission)的双重功能,而无需专门的ACK包

  • SN(Sequence Number) :发送端使用。每发送一个新的 数据包,SN翻转一次(0→1或1→0)。如果重传,SN保持不变。

  • NESN(Next Expected Sequence Number) :接收端使用。接收端通过NESN告诉发送端,它期望 收到的下一个数据包的SN值。

其工作原理如下:

  1. 发送端发送 :发送一个SN=X的数据包。

  2. 接收端回复 :如果成功收到,接收端在回复包中将NESN设置为1-X(即期望下一个SN1-X)。如果没收到,则NESN保持为X

  3. 发送端判断 :发送端检查收到的回复包中的NESN

    • 如果NESN == 1-X,说明包已成功接收,SN翻转,发送新包。

    • 如果NESN == X,说明包未被接收,SN不变,重传该包。

工作流如下图所示:

3.3 MD:让一个连接事件传输多个数据包

MD(More Data)位用于实现在一个连接事件(Connection Event)中传输多个数据包

当一个设备还有数据要发送时,它会在当前数据包的头部将MD位置为1。接收端看到MD=1后,会继续保持射频窗口打开并回复一个包(可能是空包),从而允许发送端继续发送下一个数据包。这大大提高了单个连接事件内的数据吞吐量。

3.4 CP与CTEInfo:为"方向定位"预留的接口

CP(CTEInfo Present)位指示头部之后是否紧跟着一个CTEInfo(恒定音调扩展信息)字段。

  • CP=0 :头部为16位,不包含CTEInfo字段,数据包也没有恒定音调扩展。

  • CP=1 :头部扩展为24位,包含CTEInfo字段,并且数据包会包含恒定音调扩展(CTE)。

这个设计为蓝牙5.1引入的到达角(AoA)和离开角(AoD) 等高精度定位功能提供了支持。

4. 数据长度扩展(DLE)

在蓝牙4.2之前,数据信道PDU的有效载荷最大仅为27字节 。蓝牙4.2引入了数据长度扩展(Data Length Extension, DLE) 功能,将这一限制提升至251字节

DLE通过LL_LENGTH_REQLL_LENGTH_RSP等控制PDU进行协商,允许连接双方动态调整各自发送和接收的最大数据包长度。这一特性显著提升了BLE的数据吞吐量。

5. 总结

数据物理信道PDU是BLE连接通信的基石。它的设计体现了极简与高效的哲学:

  1. 统一的头部设计 :通过LLID一个字段,优雅地区分了"数据"与"控制"两种截然不同的使命。

  2. 无额外开销的ARQ :利用NESNSN两个1-bit字段,在不增加额外ACK包的情况下,实现了可靠的数据传输。

  3. 灵活的扩展性CP位和CTEInfo字段为高级功能(如方向定位)预留了接口,而Length字段的扩展(DLE)则让BLE能够适应更高吞吐量的应用场景。

掌握了数据物理信道PDU的结构,就理解了BLE连接通信的核心运作机制。无论是应用数据的传输,还是连接参数的更新,都建立在这个精巧的PDU格式之上。

相关推荐
疯狂打码的少年1 小时前
【计算机网络】TCP/IP协议族(四层体系结构,与OSI对比)
网络·笔记·tcp/ip·计算机网络
snow@li1 小时前
服务器运维:Linux命令速查手册(全景梳理)
linux·服务器·网络
布莱克6052 小时前
TCP 三次握手与四次挥手详解
服务器·网络·tcp/ip·计算机网络·网络编程
anxiao_m3 小时前
2026企业AI数字孪生选型攻略,不同场景对应不同解决方案
大数据·网络·数据库
by组态3 小时前
Ricon组态系统API参考手册
前端·后端·物联网
xiaoye-duck3 小时前
《Linux 网络编程》深入理解 TCP 协议(二):序号、确认应答与流量控制机制详解
linux·网络·tcp
北京盛世宏博3 小时前
物联网传感器通信协议:帧字段规划、CRC 校验、异常包过滤方案
网络·物联网·php
dog2504 小时前
网络的时延抖动
linux·运维·网络
阿钱真强道4 小时前
01 嵌入式操作系统 | 课程导论与虚拟机安装 Ubuntu
linux·ubuntu·嵌入式·虚拟机
devpotato4 小时前
高可用系统如何定义可用性
服务器·网络·可用性测试