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

news2024/11/20 10:44:09

概述

逻辑链路控制和适配协议(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/669492.html

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

相关文章

彻底理解SQL中的JOIN

数据准备 -- 建表语句 CREATE TABLE tbl_dept (id int(11) NOT NULL AUTO_INCREMENT,deptName varchar(30) DEFAULT NULL,locAdd varchar(40) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8;CREATE TABLE tbl_emp (id int(11) NOT NULL …

【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)

我们在做自定义监控项的时候,一个一个取比较麻烦,取出一个数值,就要把该数值相关信息以一定格式写入/etc/zabbix/zabbix_agentd.d/下的配置文件里,当遇到需要取很多数值的时候,这样的操作会很繁琐,当有一种…

前端程序员必须要知道的跨域问题以及解决方法

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 前言 前端程序员必须要知道的跨域问题以及解决方法 node 代理 原理 同源策略发生在浏览…

基于Java+socket实现多线程聊天室-控制台版

基于Javasocket实现多线程聊天室-控制台版 一、系统介绍二、功能展示1.运行效果 三、代码展示四、其它1.其他系统实现2.获取源码 一、系统介绍 首先启动server端,然后启动client端。任意一个client发送给server的消息都将会被转发给所有在线的client,实…

C++基础(16)——STL常用算法(排序、拷贝和集合)

前言 本文介绍了C中STL常用排序、拷贝和集合算法 9.3:常见的排序算法(sort、random_shuffle、merge、reverse) 9.3.1:sort 9.3.2:random_shuffle 将容器中的数据位置重新打乱,可以配合随机数种子使用 9…

【Java】Java核心要点总结 69

文章目录 1. BIO NIO AIO2. 多线程3. 线程的生命周期和状态4. sleep() ⽅法和 wait() ⽅法对比5. 为什么 wait() ⽅法不定义在 Thread 中? 1. BIO NIO AIO 在Java中,BIO、NIO和AIO是针对网络编程的不同I/O模型: BIO(Blocking I/O…

【kotlin】使用MPAndroidChart实现PieChart(饼图)并设置每个数据的颜色、标签等属性

概述 MPAndroidChart 是 Android 上一个非常流行的开源图表库,它提供了多种类型的图表,包括折线图、柱状图、饼图等。 MPAndroidChart 实现饼图 下面是一个使用 MPAndroidChart 实现饼图的示例代码: 首先,需要在项目的 build.…

Makerbase CANable V2.0 产品简介

一、产品介绍 MKS CANable V2.0模块为MKS CANable V1.0升级版本。CANable 2.0是一款小型低成本开源 USB转CAN分析仪。CANable枚举为您计算机上的虚拟串行端口,并充当 CAN总线接口的串行线路。使用candleLight固件时,CANable在Linux上枚举为本地CAN接口。…

MySQL中float、double以及decimal的用法

1、浮点型和定点型 1.1 浮点型: 浮点型能够表示更大的数据范围,但是容易发生精度的问题 float和double属于浮点型,其取值范围与java中的浮点类型的取值范围相同,float占用4字节,double占用8字节 1.2 定点型&#xf…

springboot校园疫情防控管理与数据可视化系统-计算机毕设 附源码84534

springboot校园疫情防控管理与数据可视化系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针…

实战之如何在VUE中播放RTSP实时推流播放解决方案

一、知识点 常见的直播协议有以下几种 RTMP(Real-Time Messaging Protocol)实时消息传输协议:是一种用于互联网应用中的协议,最初由 Adobe 公司设计,用于 Flash Player 向 Flash Media Server 或其他支持 RTMP 的服务…

三、Docker命令及基本使用

学习参考:尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、帮助启动类命令1.1 启动docker1.2 停止docker1.3 重启docker1.4 查看docker状态1.5 开机启动1.6 查看docker概要信息1.7 查看docker总体帮助文档1.8 查看docker命令…

模板文件导出Excel【EasyPoi实战系列】- 第478篇

​历史文章(文章累计470) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 …

慎投!6月有3本SCIE期刊被剔除!(附SCI/SSCI目录下载)

期刊动态:2023年6月SCI、SSCI期刊目录更新 2023年6月20日,科睿唯安更新了WOS期刊目录,继上次5月WOS期刊目录剔除4本SCIE&SSCI期刊之后,此次6月更新又有3本SCIE期刊发生变动,其中有1本期刊被踢出SCIE数据库&#x…

Python基础(18)——Python推导式

Python基础(18)——Python推导式 文章目录 Python基础(18)——Python推导式目标一. 列表推导式1.1 快速体验1.2 带if的列表推导式1.3 多个for循环实现列表推导式 二. 字典推导式1 快速体验 三. 集合推导式四. 总结 目标 列表推导…

PowerShell系列(七)PowerShell当中的Provider介绍

往期回顾PowerShell系列(一):PowerShell介绍和cmd命令行的区别 PowerShell系列(二):PowerShell和Python之间的差异介绍 PowerShell系列(三):PowerShell发展历程梳理 P…

管理类联考——写作——素材篇——论说文——写作素材05——志篇:奉献·公益06——制篇:原则·准则

管理类专业学位联考 (写作能力) 论说文素材 05——志篇:奉献公益 论文说材料: 自己活着,就是为了使别人过得更美好。 ——雷锋 一:道理论据 成人善事,其功更倍;动人善愿,其量无涯。——陈龙正 凡人为善…

谷歌tryOnDiffusion实现了高度逼真的虚拟试穿;ChatGPT 或将推出 AI 应用商店

🦉 AI新闻 🚀 ChatGPT Plus 用户已支持联网和插件功能,OpenAI 或将推出 AI 应用商店 摘要:OpenAI 宣布 ChatGPT Plus 用户已支持联网和插件功能。据外媒 The Information 报道,OpenAI 正考虑为 AI 软件创建一个应用商…

postgresql snapshot快照源码解析, 快照内容生成规则, 可见性是这样判断的

postgresql snapshot快照源码解读 ​专栏内容:postgresql内核源码分析 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 概述 本文主要介绍数据库事务快照,分别从源码实…

VisualSVN Server 5.1.5 Crack

特征 VisualSVN Server 提供以下主要功能。 Active Directory 单点登录 允许用户使用他们当前的 Active Directory 域凭据访问 VisualSVN Server。使用安全 Kerberos V5 或 NTLM 身份验证协议。支持双因素身份验证和智能卡。 多站点存储库复制 使用 VisualSVN 分布式文件系统…