BLE 协议之 L2CAP

目录

  • 一、简介
  • 二、L2CAP Protocol 架构
    • 1、逻辑信道划分
    • 2、信道模式
    • 3、设计思想
    • 4、帧结构
      • 4.1 面向连接信道 B-frame
      • 4.2 无连接数据信道包 G-frame
      • 4.3 重传/流量控制/流传输模式下的面向连接的信道 S-frame、I-frame
      • 4.4 面向连接的通道分为 LE 信用流控模式和增强型信用流控模式 K-frame
    • 5、信道包格式


一、简介

经过 Link Layer 的抽象之后,两个 BLE 设备之间可存在两条逻辑上的数据通道:

  • 一条是无连接的广播通道,天高任鸟飞
  • 另一条是基于连接的数据通道,是一个点对点(Master to Slave)的逻辑通道。

广播通道暂且不提,这个数据通道(后面简称逻辑通道,Logical Channel),要怎么使用,还需要一番思索,例如:

  • Logical Channel 只有一条,而要利用它传输数据的上层应用却不止一个(例如上图中的 ATT 和 SMP),怎么复用?
  • Logical Channel 所能传输的有效 payload 长度最大只有 251bytes,怎是否意味着上层应用每次只能传输少于这个长度的数据?(显然不能!)
  • Logical Channel 仅提供了简单的应答和流控机制,如果传输的数据出错怎么办?

L2CAP 所具备的主要功能如下:

  • 协议信道复用(Protocol/channel multiplexing) :能够区分高层协议,在信道建立时,协议复用功能用来 发送请求来连接正确的上层协议 ;在数据传输时,逻辑信道复用必须能够把用同一个协议的不同几个高层实体的区分出来(一对多情况)。
  • 分段与重组(Segmentation and reassembly) :高层协议需传输的数据长度不定,L2CAP 层控制了 PDU 的长度,不仅易于管理而且通过对数据标记分组,允许数据单元的交错,可以满足延时要求,发生错误时的重传也可以更加方便准确。
  • 基于 L2CAP Channel 的流控机制(Flow control per L2CAP channel) :对传输的数据进行流量控制
  • 错误控制和重传机制(Error control and retransmissions
  • 协议数据单元(PDUs)的分片(和重组)(Fragmentation and Recombination):生成符合 Link Layer 传输要求的数据片(长度不超过251)
  • 支持流式传输(Support for Streaming):如音频、视频等,不需要重传或者只需要有限重传

二、L2CAP Protocol 架构

见 Core v5.4 P1016

1、逻辑信道划分

在了解逻辑信道划分前,先了解以下 CID(Channel Identifier

CID :逻辑链路通道的端点标识,其分配情况如下:

CID说明
0x0000无效标识
0x0001发送信令的信道
0x0002无连接的接收信道
0x0003-0x003f保留(特定功能)
0x0040-0xffff动态分配

其中的 0 x 0004 − 0 x 0005 0x0004-0x0005 0x00040x0005 被分配给 BLE(低功耗蓝牙) :

如果设备支持 BLE 功能, 0 x 0005 0x0005 0x0005 作为其信令通道, 0 x 0004 0x0004 0x0004 0 x 0006 0x0006 0x0006 也会被强制分配给 BLE ,分别作为 ATT 和 SecurityManager 信道。

CID 主要用来区分上层协议,进而保证多协议信道的复用。

2、信道模式

逻辑信道有几种操作模式,最后一种是 LE 设备特有的:

  • Basic L2CAP Mode(equivalent to L2CAP specification in Bluetooth v1.1) 默认模式,在未选择其他模式的情况下,用此模式。
  • Flow Control Mode 流控模式,此模式下不会进行重传,但是丢失的数据能够被检测到,并报告丢失。
  • Retransmission Mode 重传模式,此模式确保数据包都能成功的传输给对端设备。
  • Enhanced Retransmission Mode 增强重传模式,此模式和重传模式类似,加入了 Poll-bit 等提高恢复效率。
  • Streaming Mode 流模式,此模式是为了真实的实时传输,数据包被编号但是不需要 ACK 确认。设定一个超时定时器,一旦定时器超时就将超时数据冲掉。
  • LE Credit Based Flow Control Mode 基于 LE 信用的流控模式,被用于 LE 设备通讯。

3、设计思想

使用链路管理器协议在两单元间建立 ACL 链路。基带提供数据分组的有序传输, 但也可能有个别分组损坏或重复。任两台设备之间只会有一条 ACL 链路。

信道建立在链路的基础上,信道可以有多个,链路只有一条。

通过使用基带层提供的机制,L2CAP 提供了一条可靠的信道。当收到请求和重发数据时,基带通常要执行数据完整性校验,直到数据成功确认或发生超时。由于可能会丢失确认报文,所以甚至在数据成功发送后也会发生超时。基带协议使用长度为 1 位的序列号,该序列号用于删除重复发送的分组。由于所有广播的 L2CAP 数据分组的首段都以同一序列位为起始位, 如果需要提供可靠传输,就应禁止使用基带广播分组。

L2CAP 主要对数据进行 封装 ,支持协议复用,统一高层协议数据格式。

4、帧结构

L2CAP 要想实现信道复用与差错控制,必定也要在数据包前加一些前缀信息。

L2CAP 有以下几种连接类型:

  • Connection-oriented Channels in Basic L2CAP mode
  • Connectionless Data Channel in Basic L2CAP mode
  • Connection-oriented Channel in Retransmission/Flow Control/Streaming Mode
  • Connection-oriented Channels in LE Credit Based Flow Control Mode

4.1 面向连接信道 B-frame

  • PDU Length:2 octets (16 bits),主要指基本 L2CAP 报文头除长度以外的信息净荷的大小,即图中空白部分,其长度可达 65535 字节。
  • Channel ID:2 octets,用于标识分组的目标信道终端。
  • Information payload:0 to 65535 octets, 静荷信息包含来自上层协议(发出的分组)的净荷或者发送到上层协议(接收的分组)的净荷。 MTU 的值在信道配置时确定。所支持的用于信令分组的 MTU 的最小值为 48 字节。

4.2 无连接数据信道包 G-frame

  • Protocol/Service Multiplexer (PSM):2 octets (minimum),一般为 SDP、RFCOMM、TCS 等中介协议复用。小于 0x1000 的值,0x0001 对应 SDP,0x0003 对应 RFCOMM、0x0005 对应 TCS。主要用于标识何种上层协议。

4.3 重传/流量控制/流传输模式下的面向连接的信道 S-frame、I-frame

  • I-frame 用于在 L2CAP 实体间进行信息传输
  • S-Frame 则用于确认 I-frameI-frame 的重传请求

  • Length:2 bytes,除 Basic L2CAP 外的总字节数
  • Channel ID:2 bytes,对端目的信道
  • L2CAP SDU Length:2 bytes,只出现在 Start I-frame(SAR=0x01)中,表示总的 SDU 长度
  • FCS:2 bytes,帧校验序列

Control field 有三种模式:

  • Standard Control Field:用于重传模式和流量控制模式
  • Enhanced Control Field:用于增强的重传模式和流模式
  • Extended Control Field:用于扩展的重传模式和流模式


  • Type:I-frame 的类型位为0,S-frame 的类型位为 1。

  • TxSeq:(6/14 bits),发送序列号,对发送的 I-frame 计数, 用于分段和重组

  • ReqSeq:(6/14 bits),接收序列号,接收方用于应答 I-frame 和请求重传

  • R:(1 bits),重传禁用位,用来实现流控制

  • SAR:(2 bits),分割与重组,指明该 L2CAP 是否是分段过

  • S:(2 bits),表示 S-Frame 的 Type

  • P:(1 bits),置1表示从接收方征求响应

  • F:(1 bits),当 S-frame 的 P 为 1 时,F 也置 1

4.4 面向连接的通道分为 LE 信用流控模式和增强型信用流控模式 K-frame

5、信道包格式

Core v5.4 P1042

这里介绍的是在对端设备上两个 L2CAP 实体间传递的信号命令(Signaling Commands),这些信号命令通过 Signaling Channel 来传输

对于 ACL-U 逻辑链路应该使用 CID 0x0001,而对于 LE-U 则应该使用 CID 0x0005

通用的信号包格式如下:

注意:一个 C-Frame 通过 0x0001 信道可以传递多个命令;而一个 C-Frame 通过 0x0005 信道则只能传递一个命令


上图显示了信号命令的通用格式,各字段含义如下

  • Code:1 byte, 指定 Command 的类别
  • Identifier:1 byte, 用于标识一个 Request 和 Response 匹配对
  • Length:2 byte, Data 字段的长度
  • Data:0~N byte, Code 字段来决定其格式,参照下表:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461745.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『 Linux 』网络传输层 - TCP(二)

文章目录 TCP六个标志位TCP的连接三次握手 四次挥手为什么是三次握手和四次挥手 重传机制 TCP六个标志位 在TCP协议报文的报头中存在一个用于标志TCP报文类型的标志位(不考虑保留标志位),这些标志位以比特位选项的方式存在,即对应标志位为0则表示为假,对应标志位为1则为真; SYN…

安科瑞AMB400分布式光纤测温系统解决方案--远程监控、预警,预防电气火灾

安科瑞戴婷 可找我Acrel-Fanny 安科瑞AMB400电缆分布式光纤测温具有多方面的特点和优势: 工作原理: 基于拉曼散射效应。激光器产生大功率的光脉冲,光在光纤中传播时会产生散射。携带有温度信息的拉曼散射光返回光路耦合器,耦…

Raspberry Pi 树莓派产品系列说明

系列文章目录 前言 随着我们产品线的不断扩展,要了解所有不同的 Raspberry Pi 板可能会让人感到困惑。以下是 Raspberry Pi 型号的高级分类,包括我们的旗舰系列、Zero 系列、计算模块系列和 Pico 微控制器。 Raspberry Pi 电脑分为几个不同的系列&#x…

电阻电容电感为什么通常是10、22、47这些数

电阻电容电感为什么通常是10、22、47这些数 优先数的来源优先数的优点:E24和E96的来源 我们在选择电阻时,经常看到的阻值是33Ohm,4.7KOhm,1KOhm,680Ohm.基本上是以这几个数字开头。 同时在选择电容时,经常看…

以「JIMUMETA元宇宙体验馆」为例,探讨有哪些元宇宙场景?

让我们以「JIMUMETA元宇宙体验馆」为例,深入探讨元宇宙场景中提供的产品与服务。该体验馆由视创云展精心打造,集成了企业主展馆、元宇宙虚拟活动分会场、品牌展示分会场、线上论坛会场以及会议室接待会客等多重功能,旨在全方位满足企业发布会…

在MacOS玩RPG游戏 - RPGViewerPlus

背景知识 由于我一直使用Mac电脑,所以一直对Mac如何玩RPGMV/RPGMZ游戏的方式有进一步的想法。 网上能给出的方案都是自行启动一个HTTP服务进行,进行服务加载。这个方法有效,但兼容性较差。涉及到自定义功能模块的游戏,都会有报错…

使用Scrapy框架爬取博客信息

随着网络的发展,越来越多有价值的信息存储在网络上。使用爬虫技术可以从这些信息源中提取出有用的数据。本文将介绍如何使用Python中的Scrapy框架来爬取博客站点上的文章标题、作者以及阅读数,并将其保存到JSON文件中。 一、项目背景 Scrapy是一个快速…

【Java Web】使用JDBC操作数据库(含代码示例)

文章目录 JDBC主要组成部分访问数据库步骤数据库交互StatementPreparedStatementSQL注入攻击 演示示例单查询多查询返回记录数 JDBC(Java Database Connectivity)是Java中用于执行SQL语句的标准API,它提供了一种统一的方式来访问各种关系型数…

[CUDA] atomic函数闭坑技巧

文章目录 1. 尽量减少atomic的使用频率2. 小心atomic的不规则读数 cuda atomic函数使用时的一些注意事项 1. 尽量减少atomic的使用频率 由于atomic会增加threads之间的同步性,所以在有选择性的atomic操作时,可以考虑用if(condition) atomic;…

开源全站第一个nextron项目--NextTalk:一款集成chatgpt的实时聊天工具

NextTalk 简介 该项目是一个基于Nextron(NextJSElectron)的桌面端实时聊天工具。 但由于使用了NextJS中的ssr及api route功能,该程序只能在开发环境运行。 关于生产版本:我将其网页端部分分离,并用Pake将其打包成桌面端,生产体…

河南高校大数据实验室建设案例分享

泰迪智能科技在与中国各地高校的合作中积累了丰富的经验,尤其是在大数据和人工智能领域。过去多年里与河南省内多所高校在大数据领域进行了积极的探索和建设,形成了一系列具有特色的大数据实验室。这些实验室不仅促进了高校内部的科研创新,也…

Kafka自动生产消息软件

点击下载《Kafka服务端(含Zookeeper)一键自启软件》 点击下载《kafka客户端生产者消费者kafka可视化工具(可生产和消费消息)》 点击下载《Kafka自动生产消息软件》 1. 前言 在软件开发过程中,Kafka常被用作消息队列来处理特定的业务功能。为…

龙迅#LT8668EX显示器图像处理芯片 适用于HDMI1.4+VGA转4PORT LVDS,支持4K30HZ分辨率,可做OSD菜单亮度调节!

1. 一般说明 LT8668EX 是 Lontium 的第二代 LCD 控制器,基于 ClearEdge 技术,支持 VGA 接口和 HDMI 接口,符合 HDMI 1.4 规范。它可以支持带 HDMI 接口的双模 DP。为了向后兼容,该 LCD 控制器还包括一个高性能模拟接口&#xff0…

分享SRC漏洞挖掘中js未授权漏洞挖掘的小技巧

文章目录 0x1 前言0x2 js未授权简介一、什么是未授权?二、常见的未授权访问漏洞三、js漏洞挖掘需要获取的几个信息四、如何挖掘五、浅谈 0x3浅谈 js未授权挖掘技巧一、常规js未授权挖掘二、浅谈交流 0x4 Findsomething应该怎样正确使用?问题一:findsome…

如何保护网站安全

1. 使用 Web 应用防火墙(WAF) 功能:WAF 可以实时检测和阻止 SQL 注入、跨站脚本(XSS)、文件包含等常见攻击。它通过分析 HTTP 流量来过滤恶意请求。 推荐:可以使用像 雷池社区版这样的 WAF,它提…

内感受性注意的电生理特征:频谱和源定位分析

摘要 对内感受信号的关注和有意识地处理能力被认为对最小自我、适应性自我调节和情感体验的发展,以及工具性和执行性认知功能的最佳表现至关重要。然而,尽管关于内感受推论解释的理论非常丰富,但实证证据仍然很少。在此基础上,本…

[OPEN SQL] FOR ALL ENTRIES IN

FOR ALL ENTRIES IN 语句用于从一个内部表中检索与另一个内部表中指定字段匹配的记录 语法格式 SELECT ... FOR ALL ENTRIES IN <itab> WHERE <cond>. <itab>&#xff1a;插入目标数据内表 <cond>&#xff1a;查询条件 使用FOR ALL ENTRY IN 语句时&…

GetX的一些高级API

目录 前言 一、一些常用的API 二、局部状态组件 1.可选的全局设置和手动配置 2.局部状态组件 1.ValueBuilder 1.特点 2.基本用法 2.ObxValue 1.特点 2.基本用法 前言 这篇文章主要讲解GetX的一些高级API和一些有用的小组件。 一、一些常用的API GetX提供了一些高级…

Windows下基于fping进行批量IP测试

fping是Linux下一个很好用的IP测试工具&#xff0c;结合代码可以完成批量的IP测试&#xff0c;在网络调试中用途很广。本文是基于fping for Windows结合bat批处理&#xff0c;定制的测试脚本样例。 一、程序信息 本次测试使用fpingV5.1 for Windows版&#xff0c;版本信息如下…