51822蓝牙协议之实例解析L2CAP协议

2023-12-20 02:58

本文主要是介绍51822蓝牙协议之实例解析L2CAP协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概要:
逻辑链路控制和适配协议(L2CAP),支持高层协议多路复用、数据分段和重组,并且支持传送服务质量信息。
本文件主要针对协议状态自动机、分组格式及构成相关内容进行描述


一、下面介绍L2CAP的几大功能:
1.协议复用
L2CAP应支持协议复用,因为基带协议不支持任何 ‘类型’ 域,而这些类型域则用于标识要复用的更高层协议。
L2CAP必须能够区分高层协议,例如,服务搜索协议,RFCOMM,和电话控制等。

2.分段与重组
与其它有线物理介质相比, 由基带协议定义的分组在大小上受到限制。输出与最大基带有效载荷(DH5分组中的341字节) 关联的最大传输单位( MTU )限制了更高层协议带宽的有效使用,而高层协议要使用更大的分组。 大 L2CAP分组必须在无线传输前分段成为多个小基带分组。 同样,收到多个小基带分组后也可以重新组装成大的单一的 L2CAP 分组。
在使用比基带分组更大的分组协议时,必须使用分段与重组( SAR )功能。

3.服务质量
L2CAP 连接建立过程,允许交换有关两蓝牙单元之间服务质量的信息。每个L2CAP设备必须监视由协议使用的资源并保证服务质量(QoS)的完整实现
4.组
许多协议包括地址组的概念。基带协议支持微微网, 微微网为能够使用同一时钟进行同步工作的一组设备。L2CAP 组概念可以实现在微微网上的有效协议映射。如果没有组概念,为有效管理组,高层协议就必须直接与基带协议和链路管理器打交道。

L2CAP适用范围:
1.L2CAP 不传输由 SCO链路所指定的音频数据。
2.L2CAP 不能进行可靠信道传输或保证数据完整性,即:L2CAP不会重发或数据校验。
3.L2CAP 不支持具有可靠性的广播信道。
4.L2CAP 不支持一个全局组名的概念。

二、 L2CAP主要操作
      逻辑链路控制与适配协议(L2CAP)是以信道概念为基础的。每个L2CAP信道的端点有信道标识符(Channel Identifier,CID)来表示。

2.1 信道标识符
        不同蓝牙设备的L2CAP层之间通信时建立在逻辑链路的基础上,这些逻辑链路被称为信道(channel),每条信道的每个端点都被赋予了一个信道标志(Channel Identifier,CID).CID是表示逻辑信道本地端设备的名字.从0x0001到0x003F的标志符保留用于特定的L2CAP功能,空标识符(0x0000)则定义为一个非法标识符,并且不得用于目标端,在本地设备与多个远端设备存在多个并发L2CAP信道的情况下,同一CID不得重新用作本地L2CAP信道端。
                                 

             CID的分配与特定设备有关,一台设备可以独立于其他设备指定CID。L2CAP信道有三种类型:面向连接(Connection-Oriented,CO)信道,用于两个连接设备之间的双方通信;无连接(Connection-Less,CL)信道,用来向一组设备进行广播式的数据传输,为单项信道;信令(Signaling)信道,用于创建CO信道。

2.2 设备间操作
       下图说明了不同设备之间的L2CAP实体间通信的使用方式.面向连接的数据信道提供了两设备间的连接,而CID则用于标识信道的每一端。无连接信道限制数据向单一方向的流动。这些信道用于支持一个信道”组”,在该信道组里发送端CID用于表示一个或多个远程设备。

         面向连接的数据信道提供了两设备间的连接,而CID则用于标识信道的每一端。无连接信道限制数据向单一方向的流动。这些信道用于支持一个信道“组”,在该信道“组”里发送端CID用于表示一个或多个远程设备。因此保留了一些CID以备将来特殊用途使用。信号信道是一个保留信道的实例,固定的CID=0x0001。该信道用于创建和建立面向连接的数据信道,并可对这些信道的特性变化进行协商。L2CAP实体必须支持信号信道。另一CID则保留用于呼入的无连接数据通信,无连接的接收信道CID=0x0002.

建立不同类型的L2CAP连接的CID规则如下:


2.3  连接和运行模式 
L2CAP Channels可运行在以下模式之一(1是默认模式)
1 基本L2CAP模式(Basic L2CAP Mode)
2 流量控制模式(Flow Control Mode)
3 重传模式(Retransmission Mode)
4 加强版重传模式(Enhanced Retransmission Mode)
5 流模式(Streaming Mode)

此外,L2CAP有以下几种连接类型:
A:CONNECTION-ORIENTED CHANNELS in basic L2CAP mode(面向连接,采用基本L2CAP模式)
B: CONNECTIONLESS DATA CHANNEL in basic L2CAP mode(无连接的,采用基本L2CAP模式)
C:CONNECTION-ORIENTED CHANNELS的连接类型分为:BASIC L2CAP MODE和RETRANSMISSION/FLOWCONTROL/STREAMING MODES这两种(面向连接,重传/流量控制/流模式)


  这里只介绍模式 A  :采用的是B-Frame(我们主从设备连接就是这个模式)

Length: 2 bytes,
Channel ID: 2 bytes, 对端目的信道 
Information payload: (对应上层协议数据单元23个字节)
This contains the payload received from the upper layer protocol (outgoing
packet), or delivered to the upper layer protocol (incoming packet). The MTU
for channels with dynamically allocated CIDs is determined during channel
configuration . The minimum supported MTUvalues for the signaling PDUs。



看一个完整的数据抓包:






这篇关于51822蓝牙协议之实例解析L2CAP协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514567

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹