介绍
L2CAP给上层协议提供面向连和无连接的数据服务, 带有协议多路复用能力和分段和重组操作.
L2CAP允许高层协议和应用传输和接收上次数据包,最大64KB.
L2CAP还允许每通道的流控制和重传.
L2CAP特性
Protocol/channel multiplexing
Segmentation and reassembly
Flow control per L2CAP channel
Error control and retransmissions
Support for Streaming
Fragmentation and Recombination
Quality of Service
假设
一般操作
通道ID
0x0000 不能用来作为目标端点.
0x00001 ~ 0x003F是固定通道, 保留用作特殊功能.
0x0001 固定通道是信令通道.
0x0005 固定通道是LE信令通道.
如果固定通道0x0005被支持,那么0x0004和0x0006也被支持.
设备间操作
层间操作
操作模式
映射通道到逻辑链接
每个BR/EDR 物理链接有一个ACL-U逻辑链接.
每个LE 物理链接有一个LE-U逻辑链接.
当一个有保证的通道被创建, 一个相应的有保证的逻辑链接也被创建.
数据包格式
L2CAP是基于包的协议, 但是遵循着一个基于通道的通信模型.
一个通道代表远端设备中的L2CAP实体间的一个数据流.
通道可以是面向连接或无连接.
所有通道,除了L2CAP无连接通道(CID 0x0002)和2个L2CAP信令通道(CID 0x0001和0x0005),
都是面向连接的.
基本L2CAP模式中的面向连接的通道
基本L2CAP模式中的无连接的通道
信令包格式
配置参数选项
状态机
CLOSED 通道未连接
WAIT_CONNECT 通道连接请求已被收到.
WAIT_CONNECT_RSP 连接请求已被发送.
CONFIG
OPEN 用户数据传输状态.
WAIT_DISCONNECT 断开连接请求已被发送.
一般程序
配置过程
标准配置过程
- 本地设备通过L2CAP_CONFIGURATION_REQ包告知远端设备本地设备接受的参数.
- 远端设备通过L2CAP_CONFIGURATION_RSP包响应,同意或不同意这些值,包括默认值,
- 本地设备和远端设备重复步骤1和2直到所有参数协商一致.
有2中类型的配置参数: 可协商的和不可协商的.
可协商的参数: 远端接收L2CAP_CONFIGURATION_REQ包后, 不同意参数可以发 L2CAP_-
CONFIGURATION_RSP包.
不可协商的参数: 接收L2CAP_CONFIGURATION_REQ包的那端不能 不同意参数值, 但可以
通过 L2CAP_CONFIGURATION_RSP包返回提供调整值.
注: MTU是不可协商参数,但可以如果值小于强制最小值时,可以拒绝.
分片和重组
分片是为了将PDU传到下层, 把PDU分成许多小片的动作.
重组是为了将分配重组成PDU.
分片
如果L2CAP直接运行在没有HCI的控制器上, 实现可以将PDU分成
多个控制器包传输.
如果L2CAP运行在HCI上, 实现可以发送HCI传输大小的分片到控制器.