蓝牙协议规范--L2CAP

2023-11-18

L2CAP 分析

记住一点,软件和硬件分开理解,数据经由物理通道交互,上层通道由各层协议打通。

L2CAP 全称为逻辑链路控制与适配协议(Logical Link Control and Adaptation Protocol),位于基带层之上,将基带层的数据分组交换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。

L2CAP 是基于下列假设为依据而设计的:

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

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

● 基带通常提供全双工信道。但这并不是说所有 L2CAP 通信都是双向的。多点传送和单向通信(例如,视频)并不要求双工信道。

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

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

L2CAP 特点

● 协议复用:能够区分高层协议,在信道建立时,协议复用功能用来发送请求来连接正确的上层协议;在数据传输时,逻辑信道复用必须能够把用同一个协议的不用几个高层实体的区分出来(一对多情况)。

● 分段与重组:高层协议需传输的数据长度不定,L2CAP 层控制了 PDU 的长度,不仅易于管理而且通过对数据标记分组,允许数据单元的交错,可以满足延时要求,发生错误时的重传也可以更加方便准确。

● 差错控制和重传:

L2CAP 以信道概念为基础,每个信道的端点有信道标识符(channel identifier, CID)来表示。从 0x0001 到 0x003F 的标识符保留用于特定的 L2CAP 功能。空标识符(0x0000)则定义为一个非法标识符, 并且不得用于目标端。可以根据实际应用目的和情况, 以合适方式自由管理其余的 CID。但在本地设备与多个远端设备存在多个并发 L2CAP 信道的情况下,同一 CID 不得重新用作本地 L2CAP 信道端。 下表对 CID 命名空间的定义和划分进行的总结。

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

L2CAP 信道有三种类型:面向连接(Connection-Oriented,CO)信道,用于两个连接设备之间的双方通信;无连接(Connection-Less,CL)信道,用来向一组设备进行广播式的数据传输,为单项信道;信令(Signaling)信道,用于创建CO 信道,并可以通过协商过程改变 CO 信道的特性.

BT/BLE 在 L2CAP 层的区别?? Note

下图说明了 CID 在 L2CAP 实体间通信的使用方式,以及 L2CAP 信道的三种类型工作方式。信令信道是一个保留信道的实例,该信道用于创建和建立面向连接的数据信道,并可对这些信道的特性变化进行协商。

CID

L2CAP 操作模式

根据每个 L2CAP 信道的上层协议,L2CAP 有三种不同的操作模式

(1)基本 L2CAP 模式(这点和版本 1.1 的蓝牙协议里是一样的)

(2)流控制模式

(3)重传模式

在流控制模式和重传模式中,双方传输的数据分组都是被编了号的。数据分组中的序列号码是用来控制缓冲, TxWindow 大小是用来限制需要的缓冲区空间和/或提供一种流控制的方法。另外对于窗口大小(window size)来说,流控制规范的 Token Bucket size 参数可以用来描述缓冲区的大小; 一些特殊的信道不使用流量和差错控制。

在流控制模式下,丢失的数据分组可以被检测出来,并能通知对方丢失,但不进行重传。

在重传模式下,使用一个定时器,把需要重新传输的数据分组传送,来确保所有的数据分组都传输给对方。

数据分组格式

1、面向连接信道

connect
各字段描述如下:

长度: 2个字节,主要指基本 L2CAP 报文头除长度以外的信息净荷的大小,即图中空白部分,其长度可达65535字节。

净荷信息: 静荷信息包含来自上层协议(发出的分组)的净荷或者发送到上层协议(接收的分组)的净荷。 MTU 的值在信道配置时确定。所支持的用于信令分组的 MTU 的最小值为 48 字节。

信道ID: 2个字节,用于标识分组的目标信道终端。

2、无连接数据信道

disconnect
各字段描述如下:

长度: 2个字节,是信息净荷/有效载荷与 PSM 字段长度的和。

净荷信息/有效载荷: 静荷信息包含来自上层协议(发出的分组)的净荷或者发送到上层协议(接收的分组)的净荷。 MTU 的值在信道配置时确定。所支持的用于信令分组的 MTU 的最小值为 48 字节。

信道ID: 2个字节,CL 信道 ID 固定为0x0002

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

3、信令信道

在这里插入图片描述
上图所示为信令信道的分组格式,其一般用在连接、断开、请求、拒绝等命令,所有信令通道 CID 均为 0x0001。

信令指令分组长度: 2个字节,除L2CAP分组头部分之外的数据长度,即各指令长度之和 (note:各指令长度不定,具体使用,具体分析)

信令指令格式长度: 2个字节,为数据长度(大小不定,最大为65535字节)

标识符: 1个字节,用于请求与应答间的匹配。

信令命令代码: 如下图所示为各代码代表含义

在这里插入图片描述
举例说明: 下面是一个 L2CAP 包

Role:Master
Address:11
PDULength: 6 //指令的长度,值为 06 00
ChannelID: 0x0001 (Signaling)//L2CAP 的信令通道,值为 01 00
Code:Information request//信息请求,值为 0a
Identifier:1//标识符,值为 01
CommandLength: 2//命令长度,值为 02 00
InfoType:Extended features supported//02 00 (实际传送数据)

这条指令完整的为:06 00 01 00 0a 01 02 00 02 00

注: 蓝牙分组编码为小端模式。

L2CAP 层接收到数据后的处理流程:

在这里插入图片描述
具体分析需要结合源码一起。

详细见蓝牙核心技术概述.pdf 第42页 以及 蓝牙协议及其源码分析 第274页

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝牙协议规范--L2CAP 的相关文章

  • C++三目运算

    三目运算也叫条件运算或三元运算 可以实现简单if语句的功能 但是书写更简洁 语法 表达式一 表达式二 表达式三 先计算表达式一的值 如果为真 整个表达式的结果为表达式二的值 如果为假 整个表达式的结果为表达式三的值 int a b c a
  • BP神经网络与Python实现

    人工神经网络是一种经典的机器学习模型 随着深度学习的发展神经网络模型日益完善 联想大家熟悉的回归问题 神经网络模型实际上是根据训练样本创造出一个多维输入多维输出的函数 并使用该函数进行预测 网络的训练过程即为调节该函数参数提高预测精度的过程
  • three.js(相机 (Camera))

    相机类型 1透视相机 PerspectiveCamera 透视相机模拟人眼观察物体时的效果 具有近大远小的景深效果 创建透视相机需要设置视角FOV 画布宽高比 近平面和远平面距离等参数 2正交相机 OrthographicCamera 正交
  • 实验五循环结构程序设计

    一 实验目的 1 掌握在程序设计条件型循环结构时 如何正确地设定循环条件 以及如何控制循环的次数 2 了解条件型循环结构的基本测试方法 3 掌握如何正确地控制计数型循环结构进行测试的基本方法 4 了解对计数型循环结构进行测试的基本方法 5

随机推荐

  • linux nginx安装【docker容器怎么绑定域名?docker装nginx,nginx域名反向代理转发】centos7 docker系列

    一 安装Docker 1 查看你当前的内核版本 命令 uname r 系统的内核版本高于 3 10 2 确保 yum 包更新到最新 命令 yum update 最新此步骤可省略 3 检查本机是否已经安装docker 命令 docker v
  • 常用内存数据库三

    4 1 2 哪些场合适合使用其他的关系型数据库管理系统 RDBMS 客户端 服务器程序 如果你有许多的客户端程序要通过网络访问一个共享的数据库 你应当考虑用一个客户端 服务器数据库来替代SQLite SQLite可以通过网络文件系统工作 但
  • 压力测试工具Apache JMeter:3:压力测试报告的生成方法

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net liumiaocn article details 101362941 Apache
  • 微信小程序css篇----边框(Border)

    一 边框 border 设置对象边框的特性 1 语法 border length style color 2 style none hidden dotted dashed solid double groove ridge inset o
  • 7种有效安全的网页抓取方法,如何避免被禁止?

    网页抓取是一种从互联网上抓取网页内容的过程 但在网络抓取种相信您也经常遇到障碍 尤其是做跨境业务的 在抓取国外的网站时更有难度 但我们站在您的立场上 提供七种有效的方法来进行网页抓取而不被阻止 最大限度地降低网站禁令的风险 并帮助您应对相关
  • linux 快速安装最新稳定版nginx(CentOS8.1 64位)

    目录 CentOS8 1 安装完成已具备 yum 指令操作 低版本缺少yum 指令自行安装 启动nginx遇到错误 nginx emerg bind to 0 0 0 0 7070 failed 13 Permission denied 配
  • 不用看网课就能学到python的文章(第五天)

    目录 类 对象 实例 类中的成员 面向对象 变量 不用看网课就能学到python的文章 第二天 Why does it work的博客 CSDN博客 不用看网课就能学到python的文章 第三天 Why does it work的博客 CS
  • 自己编写DLL文件——注册——VB工程引用——标准EXE调用(含例子)

    VB6 0的 工程 引用 中有很多控件供用户使用 但有时需要自己编写dll文件以实现某些功能 本文介绍如何自己编写一个简单的dll文件 然后在win7 64位下使用regsvr32注册 并在VB6 0中引用 最后在标准EXE中调用实现某些功
  • ES 版本,及重要特性

    参考 https www cnblogs com flyrock ES release 地址 https www elastic co cn downloads past releases elasticsearch ES版本 发布日期 版
  • 熊啸锋:精准营销及推广的四个步骤,倍增你的利润

    哈喽 我是熊啸锋老师 今天分享的主题是精准营销及推广的四个步骤 作为营销人 企业老板 项目负责人 市场开发人员等 你会经常面临 如何开发客户 如何获得大量的潜在客户名单 等很多的问题 还经常有人抱怨说 我们获取的潜在客户名单不精准 成交率非
  • Linux中清空文件的方法

    Linux中清空文件的方法 平时工作过程中 经常会遇到需要清空linux中某个日志文件的方法 下面总结一下几个常用的方法 以下待清空的文件名统一使用 test txt 表示 方法1 vi 中使用 d 1 输入 vi test txt 回车
  • word添加gif

    word添加gif动图最简单的方法 无需链接无需插件 X to Y的博客 CSDN博客 word插入动图 原文链接 https blog csdn net X To Y article details 124415532 文章目录 word
  • c++ Graphics 实现俄罗斯方块

    俄罗斯方块 一 游戏规则 1 方块种类 2 操作规则 玩家可以通过 按键 功能 a 向左一格 d 向右一格 s 顺时针旋转90度 w 逆时针旋转90度 3 积分规则 玩家根据消除的行列数量获取得分 数量 得分 1行 10分 2行 30分 3
  • Vue中的import中@的作用

    这是webpack的路径别名 相关代码定义在配置文件webpack base config里 resolve 自动补全的扩展名 extensions js vue json 默认路径代理 例如 import Vue from vue 会自动
  • UVA-10603 倒水问题 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 使用广度优先搜索和优先队列 如果找到最小的点则退出 找不到就遍历所有的情况 include
  • 在vue中引入高德地图

    既然要用到高德地图首先要申请成为高德地图开发者 并申请使用高德地图的key这两点在这篇文章就不过多赘述 有需要的小伙伴可以查查资料 或者去高德地图api官网都有很详细的介绍 高德地图官网 简单提一下申请秘钥流程 web端 控制台 gt 应用
  • Android中的关于MDM中的几个方法举例

    首先介绍一下MDM是什么的缩写 MDM是什么 MDM 是 Mobile Device Management 的缩写 中文翻译过来就是移动设备管理 随着移动设备计算能力地增强 移动设备携带越来越方便 移动化办公已经成为一种潮流 一种趋势 企业
  • MATLAB_第二篇神经网络学习_BP神经网络

    非常感谢博主wishes61的分享 这篇博客只是为了记录下第一个神经网络的训练 BP神经网络代码实现 1 BP神经网络的简介和结构参数 1 1 BP神经网络的结构组成 1 2 神经元结构示意图 1 3 BP神经网络训练界面的参数解读 2 B
  • 【华为OD机试】战场索敌(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 有一个大小是N M的战场地图 被墙壁 分隔成大小不同的区域 上下左右四个方向相邻的空地 属于
  • 蓝牙协议规范--L2CAP

    L2CAP 分析 记住一点 软件和硬件分开理解 数据经由物理通道交互 上层通道由各层协议打通 L2CAP 全称为逻辑链路控制与适配协议 Logical Link Control and Adaptation Protocol 位于基带层之上