BLE 协议栈中的 L2CAP层详解

目录

概述

[1 核心功能](#1 核心功能)

[1.1 L2CAP层简介](#1.1 L2CAP层简介)

[1.2 L2CAP层的主要功能](#1.2 L2CAP层的主要功能)

[2 BLE L2CAP vs. 经典蓝牙 L2CAP](#2 BLE L2CAP vs. 经典蓝牙 L2CAP)

[3 核心概念](#3 核心概念)

[3.1 信道标识符](#3.1 信道标识符)

[3.2 L2CAP数据包结构(B帧 - 基本信息帧)](#3.2 L2CAP数据包结构(B帧 - 基本信息帧))

[3.3 MTU - 最大传输单元](#3.3 MTU - 最大传输单元)


概述

L2CAP的全称是逻辑链路控制与适配协议。为上层ATT/GATT提供了稳定可靠的数据传输管道。理解L2CAP是深入理解BLE数据流和协议栈交互的关键一步。

1 核心功能

1.1 L2CAP层简介

L2CAP的全称是逻辑链路控制与适配协议 。可以把它想象成BLE协议栈中的"交通调度中心 "或"数据搬运工"。它位于底层射频协议(HCI/链路层)之上,为上层应用协议(如ATT、SM)提供稳定、可靠的数据通道。

BLE中的L2CAP层是一个高效、精简的适配层,它核心完成了三件事:

  1. 多路复用: 用CID标识不同业务(ATT/SM),让一条物理连接能同时服务多个上层协议。

  2. 适配分片: 将上层的大数据包切割成底层能传输的小块,并对上层隐藏这一细节。

  3. 基础流控: 通过信用机制,确保数据收发节奏匹配,防止丢失。

1.2 L2CAP层的主要功能

在BLE中,L2CAP的设计相对于经典蓝牙大为简化,主要承担三大核心功能:

1) 协议/通道复用

  • 功能: 这是L2CAP最基本也是最重要的功能。底层的射频链路只有一条物理连接,但上层可能有多个应用(如读取设备信息、传输心率数据、进行配对加密)需要同时通信。

  • 实现 : L2CAP通过信道标识符来区分不同的上层协议。每个数据包都带有CID,指明它属于哪个"逻辑通道"。例如:

    • CID 0x0004: 属性协议

    • CID 0x0006: 安全管理协议

  • 类比: 就像一栋大楼只有一根总光纤入户(物理连接),但通过路由器(L2CAP)可以分出Wi-Fi给手机、网线给电脑、IPTV给电视(多个逻辑通道),各走各的数据,互不干扰。

2) 数据分片与重组

  • 功能 : 上层协议(如ATT)要发送的数据包可能很大(例如,读取一个很长的特征值)。但底层链路层传输有最大传输单元 的限制(BLE 4.x/5.0 默认是 27字节, ATT层可用23字节)。L2CAP负责将大的上层数据包分割成适合底层传输的小块(分片),并在接收端重新组装成完整的原始数据包(重组)。

  • 重要性: 这是实现可靠传输大数据的基础,对上隐藏了底层MTU的复杂性。

3) 流量控制

  • 功能 : 确保发送方的数据不会淹没接收方的缓冲区,防止数据丢失。BLE使用一种称为 "基于信用的流量控制" 的机制。

  • 工作原理

    1. 建立连接时,接收方会告诉发送方:"我有 X 个信用值"。每个信用值代表可以接收一个完整的L2CAP数据包(即一个PDU)。

    2. 发送方每发送一个数据包,就消耗一个信用值。

    3. 接收方处理完数据后,可以发送"信用更新"给发送方,返还信用值。

    4. 发送方只有信用值 > 0 时才能发送新数据。

  • 优点: 这是一种简单有效的反压机制,保证了数据传输的可靠性。

2 BLE L2CAP vs. 经典蓝牙 L2CAP

这一点非常重要,因为BLE的L2CAP是简化版:

特性 BLE L2CAP 经典蓝牙L2CAP 差异原因
信道类型 主要是固定信道 支持多种信道类型 BLE简化设计
模式 LE Credit-Based Flow Control 基本模式、重传模式、流控模式 BLE追求低功耗
信令复杂度 极简信令 复杂信令命令集 BLE无需复杂协商
分段重组 主要在链路层完成 L2CAP层处理 BLE优化延迟
头部开销 固定4字节 可变,至少4字节 BLE减少开销
QoS支持 支持服务质量协商 BLE场景简单
错误恢复 无内置重传 支持错误检测和重传 由上层处理
最大MTU 默认23,可协商到517 默认672,可到65535 BLE低内存需求

BLE的L2CAP是"轻量级"的,只保留了在低功耗场景下必不可少的功能。

3 核心概念

3.1 信道标识符

CID范围 用途 说明
0x0001-0x0003 保留 不使用
0x0004 ATT协议 属性协议专用通道
0x0005 L2CAP信令通道 用于L2CAP控制命令
0x0006 安全管理协议 安全配对、加密通信
0x0007 ATT协议(备用)
0x0008-0x003F 保留/SIG分配
0x0040-0x007F 动态分配 面向连接的信道
0x0080-0x00FF 动态分配 LE Credit-Based连接

3.2 L2CAP数据包结构(B帧 - 基本信息帧)

这是BLE中最常见的L2CAP包格式:

  • Length (2字节): 指示后面 Payload 的长度(以字节为单位)。不包含Length和CID字段本身的4个字节。

  • CID(2字节): 逻辑信道标识符,指明这个包属于哪个上层协议。

  • Payload: 来自上层协议(如ATT、SM)的完整数据包。

信令包格式

分片过程 : 这个完整的B帧会被L2CAP交给链路层。如果B帧长度超过链路层的有效载荷容量(MTU),链路层会将其在射频层面进行分片(注意:这个分片对L2CAP透明,它只管生成完整的B帧)。接收端的链路层负责重组,再交给L2CAP一个完整的B帧。

3.3 MTU - 最大传输单元

这是一个贯穿协议栈的概念:

  • 链路层MTU : BLE 4.x/5.0 默认是 27字节(有效载荷)。

  • L2CAP MTU : 链路层MTU减去L2CAP头部(4字节)后,留给上层ATT的默认空间是 23字节 。这就是著名的 ATT_MTU = 23 的由来。

  • ATT_MTU交换: 连接建立后,主从设备可以通过ATT协议交换一个更大的MTU值(例如247字节)。一旦协商成功,L2CAP就需要能够处理更大的B帧,并将其分片成多个链路层包进行传输。这个协商过程极大地提升了数据传输效率。

相关推荐
奔跑吧 android8 个月前
【android bluetooth 案例分析 03】【PTS 测试 】【PBAP/PCE/SSM/BV-02-C】
android·pts·l2cap·pbap·bqb测试
奔跑吧 android8 个月前
【android bluetooth 协议分析 06】【l2cap详解 11】【l2cap连接超时处理逻辑介绍】
android·bluetooth·l2cap·gd·aosp13
byte轻骑兵9 个月前
【SPP】深入解析蓝牙 L2CAP 协议在SPP中的互操作性要求 —— 构建可靠的蓝牙串口通信基础
spp·蓝牙技术·l2cap