蓝牙L2CAP协议简介及报文格式

news2024/12/24 2:18:08

概述

逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)是蓝牙的核心协议,负责适配基带中的上层协议。它同链路管理器并行工作,向上层协议提供定向连接的和无连接的数据业务。L2CAP具有分割和重组功能,使得更高层次的协议和应用能够以64KB的长度发送和接收数据包。它还能够处理协议的多路复用,以提供多种连接和多个连接类型,同时提供服务质量支持和成组通信。L2CAP在协议栈中的结构和位置如下:
在这里插入图片描述
SDU:Service Data Unit,是L2CAP与上层协议进行交换的数据包,可以被分成几个段(segment)以便用于L2CAP流量控制(L2CAP的分段功能,将段重新组合为完整的SDU就是重组功能)。L2CAP使用CID来标识SDU源自上层什么协议。

L2CAP的组成部分

如图1所示,在L2CAP中包含了信道管理(Channel Manager)和资源管理(Resource Manager)两个组成部分,介绍如下:
L2CAP资源管理器负责管理发送至基带的协议数据单元(Protocol Data Unit,PDU)片段的提交顺序以及信道间的相关调度,以确保L2CAP信道对物理信道的访问因Bluetooth控制器资源耗尽而被拒绝(Bluetooth控制器缓冲有限、HCI带宽有限)。L2CAP资源管理器也可以执行通信量符合性管制功能,以确保这些应用在他们协商好的QoS设置的限制范围内提交L2CAP服务数据单元(Service Data Unit,SDU)。
L2CAP信道管理器负责创建、管理和结束用于服务协议和应用数据流传输的L2CAP信道。信道管理器L2CAP与远程(对等)设备上的信道管理器交互,以创建这些L2CAP信道并将它们的端点连接到对应的实体(Entity,如下图)。信道管理器与本地链路管理器交互来创建新的逻辑链路和配置这些链路,以提供被传输数据类型要求的质量服务(Quality of Service,QoS)。
在这里插入图片描述
Channel ID:信道标识符(CID),相当于TCP里面的Port,约定了device之间的逻辑连接端点。在图2中,在面向连接的通道中,CID标识通道的两个端点,而面向无连接的通道是单一方向的,CID代表目标端点。
。L2CAP使用CID在一个控制器的逻辑链路上实现了多路ACL数据传输。
上面图2还说明了L2CAP信道有三种类型:
A、面向连接信道:Connection-OrientedCO,用于两个设备之间的数据通信。
B、无连接信道:Connection-LessCL,用来向一组设备广播方式传输数据。CID为固定值:0x0002。
C、信令信道:Signaling Channel,用于发送信令的通道。对于ACL-U逻辑链路,CID为0x0001,对于LE-U则使用0x0005。
下面是CID的定义,ACL-U和LE-U略有不同。0x00010x003F是固定CID,0x400xFFFF是动态分配CID。
在这里插入图片描述
在这里插入图片描述
LE的CID略有不同(特别留意0x0004是ATT协议):
在这里插入图片描述

L2CAP的功能

L2CAP的功能包括协议/信道多路复用、分段和重组(SAR)和服务质量3个组成部分。

  • 协议/信道复用:L2CAP应支持协议复用,因为基带协议、报文格式里面没有用于标识更高层协议“类型”的字段,所以L2CAP要能够区分高层协议,例如GAP、RFCOMM等。
  • 分段和重组:基带协议是基于硬件(物理)介质的,其报文中有效数据载荷受到最大输出单位(MTU,最大64KB)的限制。而更高层协议的报文可能需要更大的数据载荷,为此,来自高层协议的SDU在传输前可能会被L2CAP分段成多个符合基带传输大小的PDUs,然后再发送出去。同样,当基带收到多个PDU时,会重新组装为SDU,然后提交给高层协议处理。
  • 服务质量:L2CAP连接建立过程,允许交换有关两个蓝牙设备之间服务质量的信息。每个L2CAP这杯必须监视协议使用的资源并保证服务质量的完整实现。

设备间的操作

操作模式

L2CAP信道有5中工作模式:

  • 基本L2CAP模式(相当于Bluetooth v1.1中的L2CAP规范)
  • 流量控制模式
  • 重传模式
  • 加强版重传模式
  • 流媒体模式
  • LE流量控制模式(LE特有的)

L2CAP连接类型

L2CAP有4连接类型,如下所示:

  • 面向连接,采用基本L2CAP模式(Connection-oriented Channels in Basic L2CAP mode)。
  • 无连接,采用基本L2CAP模式(Connectionless Data Channels in Basic L2CAP mode)。
  • 面向连接,重传/流量控制/流模式(Connection-oriented Channels in Retransmission/Flow Control/Streaming Mode)。
  • 面向连接,LE流量控制模式(Connection-oriented Channels in LE Credit Based Flow Control Mode)。
    面向连接的数据信道提供两个设备之间的连接,绑定逻辑链路(ACL-U和LE-U)的CID则用于标识信道的每一端。对于无连接的数据信道,当用于广播传输时,CID限制了传输的方向;但用于单播传输时则没有限制。

L2CAP数据包和信号包

L2CAP有数据包和信号包两种格式。

L2CAP数据包格式.

L2CAP 的4中连接类型,其对应的数据包格式是不同的:

  1. 基本L2CAP模式下面向连接通道的数据包(也叫B-frame)
    在这里插入图片描述
    Length:2字节,payload的长度,不包括CID长度。
    Channel ID:2字节,对端目的信道;
    Information payload:0~65535字节(64KB)。

  2. 基本L2CAP模式下无连接数据通信的数据包(G-frame).
    在这里插入图片描述
    Length:2字节,PSM+payload的长度。
    Channel ID:2字节,对于无连接数据传输使用固定值0x0002;
    PSM:>=2字节,Protocol/Service Multiplexer

  3. 增强的重传模式/流量控制模式/流媒体模式下面向连接通道的数据包(S-Frame/I-Frame)
    在这里插入图片描述
    I-Frame用于在L2CAP实体间进行信息传输,S-Frame则用于确认I-Frame和I-Frame的重传请求。
    Length:2字节,除Basic L2CAP header外的总字节数。
    Channel ID:2字节,对端目的信道;
    L2CAP SDU Length:2字节,只出现在Start I-Frame(SAR=0x01)中,表示总的SDU长度。
    FCS:2字节,帧检验序列(Frame Check Sequence)。
    Control Field有 3模式:
    a、Standard Control Field:用于流控/重传模式(Retransmission Mode and Flow Control Mode)。
    b、Enhanced Control Field:用于加强重传合流模式(Enhanced Retransmission Mode and Streaming Mode)。
    c、Extended Control Field:用于加强重传合流模式(Enhanced Retransmission Mode and Streaming Mode)
    Standard Control Field格式如下:
    在这里插入图片描述
    Enhanced Control Field格式如下
    在这里插入图片描述
    Extended Control Field格式如下:
    在这里插入图片描述
    Control Field各字段含义如下:

SAR:    (2 bits),    Segmentation and Reassembly, 指明该L2CAP是否是分段过
TxSeq:  (6/14 bits), Send Sequence Number,        对发送的I-Frame计数, 用于分段和重组
ReqSeq: (6/14 bits), Receive Sequence Number,     接收方用于应答I-Frame和请求重传
R:      (1 bits),    Retransmission Disable Bit,  用来实现Flow Control
S:      (2 bits),    Supervisory function,        表示S-Frame的type
P:      (1 bits),    Poll,1表示从接收方征求相应 
F:      (1 bits),    Final,                       相应P置1的S-Frame

  1. 基于LE流量控制模式下的面向连接通道的数据包
    在这里插入图片描述

L2CAP信号包格式

信号包格式(Signaling Packet Format):在对端设备上两个L2CAP实体间传递的信号命令(Signaling Commands),这些信号命令通过信令通道(Signaling Channel)来传输,对于ACL-U逻辑链路应该使用CID 0x0001, 而对于LE-U则应该使用CID 0x0005。信号包的格式如下:
在这里插入图片描述
各个信令的具体信息可参考:Vol 3->Part A->4。下面举例:
在这里插入图片描述
如上图,CID=0x0001,表明这个一个信号包,信令值=0x02,Vol 3->Part A->4.2有详细介绍这个信令是Connection Request,发送连接请求包,在两个设备之间创建L2CAP通道。之后才能对L2CAP通道进行配置,比如:
在这里插入图片描述
Connection Request的信令包格式如下:
在这里插入图片描述
PSM:Protocol/Service Multiplexer 协议/服务复用器。其中蓝牙SIG已经为一些高层协议预留了PSM值,参考https://www.bluetooth.com/specifications/assigned-numbers/里面的“Logical Link Control”链接。在本例子中,PSM=0x19,代表AVDTP协议。
在这里插入图片描述
Source CID:表示请求创建的信道端点号(CID),这个CID是动态分配的,即要在0x0040~0xFFFF之间。本例子中CID=0x0044,创建信道成功之后,接下来与AVDTP协议相关的数据通信将在这个信道里面进行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存(C) Baumer工业相机Baumer工业相机BGAPISDK和相机内存的技术背景Baumer工业相机通过BGAPISDK将相机图像写入相机内存功能1.引用合适的类文件2.通过BGAPISDK将相机图像写入相机内存功能…

Cortext-M3系统:异常(3)

1、异常 异常响应系统是再M3内核水平上的,支持众多的系统异常和外部中断。1-15为系统异常,大于16为外部中断。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。优先级数值越小,优先级越高。CM3支持中断嵌套&#xff…

网络嗅探与ARP欺骗

目录 一、网络嗅探概述 1.1 网络嗅探的概念 1.1.2 一把双刃剑 1.1.3 特点 1.2 网络嗅探的原理 1.2.1 网络嗅探的条件 1.2.2 网卡的工作模式 1.2.3 局域网的传输技术 1.3 网络嗅探的前提 1.3.1 网卡设置为混杂模式 1.3.2 同处在一个广播式局域网内 1.4 嗅探工具的使…

4.23 TCP状态转换 4.24半关闭、端口复用

4.23 TCP状态转换 2MSL(Maximum Segment Lifetime) 主动断开连接的一方,最后进入一个TIME_WAIT状态,这个状态会持续:2msl msl:官方建议:2分钟,实际是30s 当 TCP 连接主动关闭方接收到被动关闭方发送的 FIN…

【kubernetes】部署kube-apiserver与kubectl

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

Flutter 组件集录 | RawMagnifier 组件 - 拿起你的八倍镜

theme: cyanosis 1. 前言 今天看 Flutter 源码,偶然发现 Magnifier 组件,这单词不就是 放大镜 嘛! 再结合新版 Flutter 中输入文本的放大镜效果,直觉告诉我这玩意应该可以放大任何组件。如下所示,背景是一张图片,使用 …

0013-TIPS-pawnyable : Race-Condition

原文 Linux Kernel PWN | 040204 Pawnyable之竞态条件 Holstein v4: Race Condition 题目下载 漏洞代码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/cdev.h> #include <linux/fs.h> #include <linux/uaccess.h> #i…

使用 Vite + Vue3 + Element-Plus + Pinia + Ts 搭建 Vue3 项目

使用 Vite Vue3 Element-Plus Pinia Ts 搭建 Vue3 项目 使用Vite搭建配置Router配置 Element-Plus配置sass配置Pinia配置解析 符号&#xff0c;并找到对应的路径TypeScript忽略类型检查 使用Vite搭建 Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#xff0c;有些模…

chatgpt赋能python:Python指定小数点位数的完整指南

Python指定小数点位数的完整指南 Python是一种高级编程语言&#xff0c;广泛用于科学、统计和数学计算。在许多情况下&#xff0c;我们需要对浮点数进行更精确的计算。Python 中保留小数位数的能力很强&#xff0c;本文将向您介绍如何在 Python 中指定小数点后的位数。 为什么…

购买服务器/安装宝塔

1、服务器的选择 本人知道并了解一丢丢的就这四个平台&#xff1a; 1、阿里云 2、腾讯云 3、硅云 4、亚马逊 个人觉得阿里云是YYDS&#xff0c;啥都挺方便的&#xff0c;唯一不足就是有点小贵&#xff0c;但是新用户第一次购买还是很优惠的。 腾讯云有的云服务器是真的便宜&am…

【Batch_size 与 梯度 之间的关系】

chatGPT 回答 梯度更新与批大小&#xff08;batch size&#xff09;之间有密切的关系。批大小是指在训练过程中一次迭代所使用的样本数量。 在深度学习中&#xff0c;梯度下降是一种常用的优化算法&#xff0c;用于更新模型参数以最小化损失函数。梯度是损失函数对于模型参数…

Gradio Flagging模块解析与实践

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

基于html+css的图展示135

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

大数据大作业(课程设计)

题目&#xff1a;信息爬取字数统计及可视化 内容及要求&#xff1a; 配置Hadoop平台&#xff1b;利用爬虫技术爬取任一门户网站新闻栏目一定时间段内的新闻信息&#xff0c;保存为一个或多个文件并上传到Hadoop平台以本人学号命名的文件夹下&#xff1b;利用MapReduce框架编程完…

CSS3-显示模式

显示模式 1 块级显示 2 行内显示 3 行内块显示 4 元素显示模式转换 5 拓展 1 块级显示 属性&#xff1a;display:block 显示特点&#xff1a; 1 独占一行&#xff08;一行只能显示一个&#xff09; 2 宽度默认是父元素的宽度&#xff0c;高度默认由内容撑开 3 可以设置宽高 代表…

Cortext-M3系统:异常系统(5)

1、使用中断 在CM3中&#xff0c;NVIC为我们搞定了使用中断时的很多例行任务&#xff0c;如优先级检查、入栈/出栈、取向量等。不过在NVIC能行使职能之前&#xff0c;还需要我们做好如下的初始化工作&#xff1a;建立堆栈、建立向量表、分配各中断的优先级、使能中断。 1.1 建…

node笔记_读取目录的文件

文章目录 ⭐前言⭐fs.readdirSync&#x1f496; 读取目录 不加withFileTypes&#x1f496; 读取目录 加withFileTypes&#x1f496; 读取目录时 判断元素文件还是目录 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于node读取目录文件 往期文章 node_wind…

【java】Jconsole 开启远程连接遇到的一些坑

文章目录 背景一、JMX二、配置远程连接2.1、Java 程序启动2.2、tomcat 启动2.3、无法远程问题排查2.4、解决方案 三、关闭 tomcat 报错3.1、问题分析3.2、问题解决 总结 背景 最近在学习 JVM&#xff0c;其中涉及到性能、内存等指标分析需要使用工具分享&#xff0c;Java 提供…

dvwa靶场通关(六)

第六关&#xff1a;Insecure CAPTCHA&#xff08;不安全的验证码&#xff09; 不安全的验证码&#xff1f;不是这个意思&#xff0c;而是指验证码验证可以被绕过。怎么绕&#xff1f;一般都是验证码的验证和最终修改的验证分离&#xff0c;导致了中间过程&#xff08;验证码的…

io.netty学习(八)零拷贝原理

目录 零拷贝 传统I/O操作存在的性能问题 零拷贝技术原理 虚拟内存 mmap/write 方式 sendfile 方式 带有 scatter/gather 的 sendfile方式 splice 方式 总结 io.netty学习使用汇总 零拷贝 零拷贝&#xff08;Zero-Copy&#xff09;是一种 I/O 操作优化技术&#xff0c…