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格式之上。

相关推荐
蓝斯4971 小时前
C# 调用邮箱应用发送带附件的邮件
网络·c#·github
qetfw2 小时前
Debian 配置 AIDE 文件完整性检测:基线初始化、变更检查与数据库更新
linux·网络·数据库·debian
zhbcddxr2 小时前
北京企业GEO防御风控能力测评:投毒监测与偏差修正排行
网络·人工智能·安全
星恒讯工业路由器9 小时前
AGV集群通信架构:从单点到百台级调度的挑战与对策
网络·物联网·信息与通信·工业物联网·通信架构·agv集群·实时调度
夜月yeyue11 小时前
AUTOSAR CP 从上电到 Runnable
c语言·网络·tcp/ip·车载系统
技术硬汉11 小时前
4G/5G蜂窝天线增益越大越好吗?怎么选适合自己的天线
物联网·5g·信息与通信·iot
lsh曙光11 小时前
延时at指令和定时cron指令
linux·服务器·网络
treesforest11 小时前
IP定位技术在网络犯罪侦查中的应用与价值
网络·网络协议·tcp/ip·网络安全·ip归属地查询·反欺诈
外滩运维专家11 小时前
HTTPS 证书报错排查手册:6 个高频错误码及解决方法
网络协议·http·https