1、L2CAP:即Logical Link Control and Adaptation Layer Protocol,是介于上层和底层(例如HCI)之间的一种数据交互的媒介
主要功能:
1)Protocol/channel multiplexing,协议/通道的多路复用;
2)Segmentation and reassembly,上层应用数据(即L2CAP Service Data Units,SDUs)的分割和重组;
3)Flow control per L2CAP channel,基于L2CAP Channel的流控机制;
4)Error control and retransmissions,错误控制和重传机制;
5)Support for Streaming,支持流传输(如音频、视频等,不需要重传或者只需要有限重传);
6)Fragmentation and Recombination,PDU(Protocol Data Unit)的分片和重组
7)Quality of Service,QoS的支持。
2、相关概念
(1)Upper layer:表示L2CAP的上层(统称Service Level Protocol),和L2CAP层之间使用SDU进行数据交互
(2)Lower layer:表示L2CAP的底层(在Controller内部,可以认为是HCI),和L2CAP之间使用PDU(或者PDU碎片)进行数据交互
(3)L2CAP channel:两个设备之间的逻辑链路,每个L2CAP channel都会用CID(Channel Identifiers)表示
(4)SDU或者L2CAP SDU:Service Data Unit,即L2CAP和上层交互用的数据包
(5)Segment或者SDU segment: SDU的一部分,在Enhanced Retransmission、Streaming、 Retransmission和Flow Control模式会用到,Basic L2CAP模式不会用到
(6)PDU或者L2CAP PDU:Protocol Data Unit,即L2CAP和底层交互用的数据包,以Basic L2CAP header开头,分为:B-frames、I-frames、S-frames、C-frames和G-frames.
(7)Basic L2CAP header:PDU的开头,包含数据长度和CID
(8)B-frame :即Basic information frame,用于Basic L2CAP模式的PDU,组成:Basic L2CAP header、一个完整的SDU。
(9)I-frame:即Information frame,在Enhanced Retransmission、Streaming、 Retransmission和Flow Control模式会用到,组成:Basic L2CAP header、一个SDU segment、一些额外的协议信息
(10)S-frame:即Supervisory frame,在Enhanced Retransmission、Retransmission和Flow Control模式会用到,这里面只包含协议信息,不包含SDU数据,组成:Basic L2CAP header、协议信息
(11)C-frame:即Control frame,这里面包含的是L2CAP signaling消息,C-frame是用在L2CAP signaling通道上的,组成:Basic L2CAP header、L2CAP signaling消息
(12)G-frame:即Group frame,只能用来Connectionless L2CAP通道上,用于单播或者组播,组成:Basic L2CAP header、一个完成的SDU、和PSM
(13)LE-frame :即LE Information frame,用于LE Credit Based Flow Control模式,组成:Basic L2CAP header、一个SDU segment、一些额外的协议信息
(14)Fragment:PDU的一部分,用于和底层的数据交互
(15)MTU:即Maximum Transmission Unit,SDU的最大size
(16)MPS:即PDU payload Size,PDU的最大负载size,所以在Basic L2CAP模式下或者没有碎片的情况下,MTU=MPS
(17)MTUsig:即Signaling MTU,Signaling SDU的最大size,也是C-frame除了Basic L2CAP header以外剩余的size
(18)MTUcnl:即Connectionless MTU,即G-frame除了Basic L2CAP header以外剩余的size
(19)MaxTransmit:Enhanced Retransmission和Retransmission模式下,PDU的最大重传次数,最小值是1,设置1表示禁止重传(注意:Enhanced Retransmission模式下这个值可以设置为0,表示无限重传)
3、CID(channel identifier)
(1)CID用来表示L2CAP channel的。本地设备和多个远端设备连接时,本地设备和每个远端设备都有一套独立的CID,不同远端设备之间的CID可能相同,他们之间是通过逻辑链路来区分的。
(2)CID分为NULL CID(0x0000)、Fixed Channels CID(0x0001-0x003F)和dynamically allocated CID(0x0040-0xFFFF)
注意:CID在ACL-U、AMP-U、LE-U逻辑链路上的命名区间是不一样的,ACL-U和AMP-U共享一个命名区间:
LE-U的命令区间:
(3)L2CAP command和event流程图:
(4)L2CAP channel的五种操作模式:
(a)Basic L2CAP Mode:默认模式,最常用的一种模式,如果两个设备其他模式都失败,那么可以使用这种模式
(b)Flow Control Mode:这种模式下不会重发,但是会检测和报告丢失的PDUs
(c)Retransmission Mode:这种模式要保证所有的PDUs都发送到对方设备,有一个定时器,如果没有发送到对方设备,定时器超时会重发,还可以设置重发次数(go-back-n)
(d)Enhanced Retransmission Mode:这种机制和Retransmission Mode相似,但是增加了一个POLL位(请求远端设备回复)、SREJ S-frame(提高错误检测的有效性)和RNR S-frame(代替R-bit,用来报告本地设备处于忙碌状态)
注意:Flow Control mode、Retransmission mode和Enhanced Retransmission mode时,PDUs都会被编号并被识别(注意:这里面的识别都是对方确认收到的意思)
Streaming Mode:这种模式用于实时同步数据交互时,PDUs会被编号但是不会被识别,发送端要有超时机制用来处理未及时发送的数据,接收端如果满了会覆盖之前收到的PDUs,同时报告被覆盖的PDU丢失。
(e)LE Credit Based Flow Control Mode:只能用于LE L2CAP channel