概要:
逻辑链路控制和适配协议(L2CAP),
支持高层协议多路复用、数据分段和重组,并且支持传送服务质量信息。
本文件主要针对协议状态自动机、分组格式及构成相关内容进行描述。
L2CAP层次结构(L2CAP architectural blocks):
基带规范定义了两种链路类型:同步面向连接链路(SCO)和异步无连接链路(ACL)。SCO 链路采用保留带宽支持实时语音通信。ACL链路支持最佳通信。L2CAP规范仅定义ACL链路而不支持 SCO链路。
下面介绍L2CAP的几大功能:
1.协议复用
L2CAP应支持协议复用,因为基带协议不支持任何 ‘类型’ 域,而这些类型域则用于标识要复用的更高层协议。L2CAP必须能够区分高层协议,例如,服务搜索协议,RFCOMM,和电话控制等。
2.分段与重组
与其它有线物理介质相比, 由基带协议定义的分组在大小上受到限制。输出与最大基带有效载荷(DH5分组中的341字节)关联的最大传输单位( MTU )限制了更高层协议带宽的有效使用,而高层协议要使用更大的分组。大 L2CAP分组必须在无线传输前分段成为多个小基带分组。同样,收到多个小基带分组后也可以重新组装成大的单一的 L2CAP 分组。在使用比基带分组更大的分组协议时,必须使用分段与重组( SAR )功能。
3.服务质量
L2CAP 连接建立过程,允许交换有关两蓝牙单元之间服务质量的信息。每个L2CAP设备必须监视由协议使用的资源并保证服务质量(QoS)的完整实现。
4.组
许多协议包括地址组的概念。基带协议支持微微网, 微微网为能够使用同一时钟进行同步工作的一组设备。L2CAP 组概念可以实现在微微网上的有效协议映射。如果没有组概念,为有效管理组,高层协议就必须直接与基带协议和链路管理器打交道。
协议设计的依据:
1.使用链路管理器协议在两单元间建立ACL链路。基带提供数据分组的有序传输,但也可能有个别分组损坏或重复。任两台设备之间只会有一条ACL链路。
2.基带通常提供全双工信道。但这并不是说所有L2CAP 通信都是双向的。多点传送和单向通信(例如,视频)并不要求双工信道。
3.通过使用基带层提供的机制,L2CAP提供了一条可靠的信道。当收到请求和重发数据时,基带通常要执行数据完整性校验,直到数据成功确认或发生超时。由于可能会丢失确认报文,所以甚至在数据成功发送后也会发生超时。基带协议使用长度为1位的序列号,该序列号用于删除重复发送的分组。由于所有广播的L2CAP数据分组的首段都以同一序列位为起始位, 如果需要提供可靠传输,就应禁止使用基带广播分组。
L2CAP适用范围:
1.L2CAP 不传输由 SCO链路所指定的音频数据。
2.L2CAP 不能进行可靠信道传输或保证数据完整性,即:L2CAP不会重发或数据校验。
3.L2CAP 不支持具有可靠性的广播信道。
4.L2CAP 不支持一个全局组名的概念。
链路主要操作
逻辑链路控制和适配协议( L2CAP )是以信道概念为基础的。通过信道识别符引用每条 L2CAP 信道的端点。
1.信道标识符
信道标识符(CIDs)是表示逻辑信道本地端设备的名字。从 0x0001 到0x003F 的标识符保留用于特定的 L2CAP 功能。空标识符( 0x0000 )则定义为一个非法标识符,并且不得用于目标端。可以根据实际应用目的和情况,以合适方式自由管理其余的CID。但在本地设备与多个远端设备存在多个并发L2CAP信道的情况下,同一CID不得重新用作本地L2CAP信道端。
上图是对CID命名空间的定义和划分进行的总结。
CID的指定与特定设备有关,一台设备可以独立于其他设备指定CID(如果它不使用在下表列出的保留CID的话)。这样,即使通过连接到一个本地设备的多个远程设备, 将同一CID值指定给(远程)信道端,本地设备仍然能够将远端CID与每一不同的远程设备联系起来。
2.设备间操作(OPERATION BETWEEN DEVICES)
上图说明了CID在不同设备对等L2CAP实体间通信中的使用方式。
面向连接的数据信道提供了两设备间的连接,而CID则用于标识信道的每一端。无连接信道限制数据向单一方向的流动。这些信道用于支持一个信道“组”,在该信道“组”里发送端CID用于表示一个或多个远程设备。因此保留了一些CID以备将来特殊用途使用。信号信道是一个保留信道的实例,固定的CID=0x0001。该信道用于创建和建立面向连接的数据信道,并可对这些信道的特性变化进行协商。L2CAP实体必须支持信号信道。另一CID则保留用于呼入的无连接数据通信,无连接的接收信道CID=0x0002.
信道标识类型图示:
3.层间操作(OPERATION BETWEEN LAYERS)
L2CAP的实施应遵循上图总体体系结构, 并可在高层协议和低层协议间传送数据。本文列出了一些L2CAP应用必须实现的服务。每个应用都必须支持一组用于L2CAP 应用间通信的信号指令。L2CAP应用还应准备从低层接受某类型的事件, 并可向高层生成事件。事件如何在层间传递则根据实际应用情况而定。
4.MODES OF OPERATION
L2CAP channels may operate in one of five different modes as selected for
each L2CAP channel.
The modes are:
• Basic L2CAP Mode (equivalent to L2CAP specification in Bluetooth v1.1) 1
• Flow Control Mode
• Retransmission Mode
• Enhanced Retransmission Mode
• Streaming Mode
• LE Credit Based Flow Control Mode
5.MAPPING CHANNELS TO LOGICAL LINKS
L2CAP映射运行在控制器物理链接之上的通道到控制器的逻辑链接。所有的逻辑链接都运行在本地控制器和远程控制器的单一物理链接之上。每一个BR/EDR物理链接都有一个ACL-U逻辑链接,每一个LE-U物理链接都有一个LE逻辑链接但是AMP物理链接可能有多个AMP-U逻辑链接。
运行在两个BR/EDR设备物理链接上的通道都应该被映射到一个单一的ACL-U逻辑链接。运行在两个AMP设备上的物理链接上的通道都应该被映射到一个单一的AMP-U逻辑链接,然而在两个控制器之间的每一个通道都必须到他自己的一一对应的AMP-U逻辑链接。运行在两个LE设备上的物理链接上的通道应该被映射到一个单一的LE-U逻辑链接。
对于BR/EDR控制器,由L2CAP实现权限控制(创建和授权逻辑链接)。对于AMP控制器,L2CAP通知控制器创建和授权逻辑链接,最终由控制器实现创建和授权逻辑链接。
数据包格式
1.面向链接的通道
1.1BASIC L2CAP MODE
1.2
RETRANSMISSION/FLOW CONTROL/STREAMING MODES
1.3
LE CREDIT BASED FLOW CONTROL MODE
2.没有连接的通道
1.1
BASIC L2CAP MODE
3.信号包格式(SIGNALING PACKET FORMATS)
命令负载格式:
Code具体见【BLUETOOTH SPECIFICATION Version 4.1 [Vol 3] page 60 of 668】
SDP请求链接数据包:
00000010 00110010 00000000 00001100 00000000 00001000 00000000 00000001 00000000 0000001000000001 00000100 00000000 00000001 00000000 01000001 00000000
每种颜色对应的域如下: