蓝牙----蓝牙协议栈L2CAP

2024-01-26 09:12
文章标签 协议 蓝牙 l2cap

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

蓝牙协议栈----L2CAP

  • L2CAP的功能
  • 术语介绍
  • L2CAP信道
  • L2CAP的工作模式
  • 经典蓝牙的分段和分解过程


L2CAP—逻辑链路控制和适配层协议
在这里插入图片描述

L2CAP的功能

  • 经典蓝牙的L2CAP层实现了协议复用、数据分段与重组、封装调度等操作。
  • BLE的L2CAP层是经典蓝牙L2CAP层的简化版本:
    在基础模式下,不执行分段和重组,不涉及流程控制和重传机制,仅使用固定信道进行通信,
    在LE令牌流程控制模式下,实现了流程控制,执行数据分段和重组,使用动态信道进行通信。

包括资源管理器和信道管理器

资源管理:
   分段和重组:对APP层的消息(SDU)进行分段,传输到L2CAP。
  重传和流控制
  封装与调度
  分段和重组:对PDU进行分组,传输到HCI层。
通道管理:
  用逻辑通道来区分,使用相同物理信道的是哪个上层协议

术语介绍

  • SDU:服务数据单元,L2CAP与上层交换的数据包。
  • MTU:表示L2CAP层的最大可传输单元,代表L2CAP与上层交换的数据包
    限制了应用层与L2CAP层之间传输数据的最大长度
    普通L2CAP模式时:SDU(MTU位)+L2CAP头(4位)组成PDU的Payload最大的长度 默认23+4=27
  • PDU:协议数据单元,包含L2CAP协议信息字段、控制信息、上层信息数据的数据包,代表L2CAP与下层交换的数据包
  • MPS:L2CAP层PDU的有效数据Payload最大长度,该参数限制了单个PDU的长度(最大的PDU)

在这里插入图片描述

BLE的L2CAP层在基础模式下通常不执行分段和重组机制原理为:
PDU被设计为较小的固定大小,通常等于链路层的最大传输单元(MTU),因此不需要对上层应用层数据进行分割或重组。

L2CAP信道

CID代表高层协议信道功能信道类型
0x0004属性协议信道用于收发属性协议层的数据,代表BLE应用层通信所传输的数据固定信道
0x0005信令信道处理应用层发送的命令固定信道
0x0006安全管理协议信道处理加密、配对和绑定数据固定信道
0x0020 - 0x0003E蓝牙官方编码信道固定信道
0x0040 - 0x0007F令牌连接模式的通信信道用于L2CAP的LE令牌流程控制工作模式动态信道

其中广播数据不适用于任何一个L2CAP信道

对于密令信道而言BLE只支持连接参数的更新,以及COC连接和断开(COC是使用在LE令牌流程控制模式时使用的)

L2CAP的工作模式

工作模式适用蓝牙
默认工作模式传统蓝牙、BLE
流程控制模式传统蓝牙
重传模式传统蓝牙
增强型重传模式传统蓝牙
数据流模式传统蓝牙
LE令牌流控制模式BLE

• 基础模式为默认工作模式,L2CAP层不执行流程控制,对数据不执行分段和重组操作,
• 其他五种模式均使用了流程控制或重传机制,需要执行分段和重组操作。

不同的工作模式,其数据帧格式略有不同

经典蓝牙的分段和分解过程

当出现MTU大于MPS时候,需要L2CAP层对上层SDU进行拆包成一个个小PDU,这是传统蓝牙的分段和分解功能。
• SDU(APP层的信息)被分割成MTU大小的若干段,传入L2CAP,加入L2CAP的Header,组成PDU。
• PDU(L2CAP层)被分割成MPS大小的若干段,传入HCI。

在这里插入图片描述


学习参考:
认识BLE 5协议栈 —— 逻辑链路控制与适配协议层 – Hey, You (sunyouqun.com)
Bluetooth技术学习笔记 ——L2CAP之概述_l2cap的分段与重组-CSDN博客
BLE中L2CAP层基本功能分析 - 不回本不改名 - 博客园 (cnblogs.com)
谷雨《CC2640R2蓝牙5.0入门教程》

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



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

相关文章

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

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

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台