蓝牙核心规范(V5.2)7.1-深入详解之L2CAP(2)

举报
心跳包 发表于 2021/11/13 00:20:01 2021/11/13
【摘要】   蓝牙篇之蓝牙核心规范(V5.2)深入详解汇总 本小结主要阐述主机的A部分,逻辑链路控制和适配协议规范(L2CAP)。支持更高级别的协议多路复用、分组分割和重组,以及服务质量信息的传输。协议状态机描述了本规范的包格式和组成。  1. 状态机  1.1 状态机规则 ...

  蓝牙篇之蓝牙核心规范(V5.2)深入详解汇总


本小结主要阐述主机的A部分,逻辑链路控制和适配协议规范(L2CAP)。支持更高级别的协议多路复用、分组分割和重组,以及服务质量信息的传输。协议状态机描述了本规范的包格式和组成。 

1. 状态机

 1.1 状态机规则

 根据需要,在状态事件表中使用以下抽象的内部事件:

         每个L2CAP面向连接的通道都有一个活动的状态机。将为接收到的每个新L2CAP_ConnectReq创建一个状态机。状态机始终在关闭状态下启动。

1.1.1 CLOSED 状态

除了关闭状态之外,L2CAP_ConnectReq消息在任何其他状态中都没有被提到,因为它会触发新通道的建立,从而导致分支进入到状态机的新实例中。

 1.1.2 WAIT_CONNECT_RSP 状态

 

 这里不包括L2CAP_DisconnectReq消息,因为源和目标L2CAP_DisconnectReq还不可用,无法将其正确地与特定通道的状态机联系起来。

1.1.3 WAIT_CONNECT 状态

 

 这里不包括L2CAP_DisconnectReq或L2CAP_ConfigReq消息,因为源和目标光盘还不可用,无法将其与特定通道的状态机正确联系起来。

 1.1.4 CONFIG 状态

         存在两个配置过程。配置过程是标准流程和锁定步骤过程。

        在标准和锁定步骤配置过程中,两个L2CAP实体都会在配置过程中启动配置请求。这意味着每个设备为传出的配置请求采用一个发起者角色,为传入的配置请求采用一个接受者角色。在两个方向上的配置可以按顺序发生,但也可以并行发生。

        在锁步配置过程中,L2CAP实体在向其本地控制器提交流规范之前都发送L2CAP_CONFIGURATION_REQ数据包并接收带有挂起结果代码的L2CAP_CONFIGURATION_RSP数据包。每个L2CAP实体发送最后一个L2CAP_CONFIGURATION_RSP数据包,指示来自其本地控制器的响应。

 在配置状态下,可以区分以下子状态:

        配置状态是通过来自关闭状态的WAIT_CONFIG子状态输入、WAIT_CONNECT状态或WAIT_CONNECT_RSP状态。如发起者和接受者路径都成功完成,则配置状态留为打开状态。

 处于配置状态的接收数据PDU(L2CAP_Data)应该只有在过渡到重新配置过程(从OPEN状态)时才相关。只有在重传输模式和增强的重传输模式下才允许丢弃接收到的数据。允许丢弃s帧,但不建议使用。如果一个s帧被丢弃,监视器计时器将导致在超时后发送一个新的s帧。

指示配置响应中的失败并不一定意味着整个配置过程的失败;相反,基于在负响应中接收到的信息,可以触发修改后的配置请求。

1.2 定时器事件

1.2.1 RTX

        响应超时(RTX)定时器用于在远程端点不响应信令请求时终止通道。

        当发送到远程设备的信令请求时,将启动此计时器。

        当收到响应时,将禁用此计时器。如果初始定时器过期,则可以发送重复的请求消息或者断开请求中识别的通道断开。如果发送了重复的请求消息,则RTX超时值应重置为至少是以前值的两倍的新值。在重新传输请求消息时,应假定与原始传输具有相同状态的上下文。如果接收到被标识为重复(重传)的请求消息,则应在接收到原始请求消息时应用的相同状态的上下文中进行处理。

1.2.2 ERTX

        当不信任远程端点正在执行对请求信号的额外处理时,使用扩展响应超时执行(ERTX)计时器来代替RTX计时器 。当远程端点响应请求正在挂起时,将启动此计时器。当收到正式响应或物理链接丢失时,将禁用此计时器。如果初始计时器过期,则可能会发送重复的请求或断开通道。

         当收到正式响应或物理链接丢失时,将禁用此计时器。如果初始计时器过期,则可能会发送重复的请求或断开通道。

         这个计时器的值依赖于实现,但最小初始值为60秒,最大初始值为300秒。与RTX类似,对于每个收到等待响应的未决请求,必须至少有一个ERTX计时器。每个未完成的请求最多应该有一个(RTX或ERTX)关联。从此计时器的初始开始到信道终止的开始(如果没有接收到任何响应)之间的最大运行时间为300秒。终止通道时,不需要发送L2CAP_DisconnectReq并进入WAIT_DISCONNECT状态。通道应直接转换到关闭状态。

状态和转换

状态和转换-AMP启用的操作

 2.通用程序

 本节介绍L2CAP的一般操作,包括配置过程、通过空中接口传输的用户数据的处理和处理。本节还描述了L2CAP特性的操作,包括交付错误数据包、刷新过期数据和在无连接模式下操作、操作冲突解决、最佳努力流规范的聚合和HCI数据优先级。

 2.1 配置过程

 配置的两个流程:标准流程和锁步流程。

 锁步流程:如果两个L2CAP实体都支持扩展流规范选项;否则使用标准流程。

2.1.1 请求路径

请求路径可以配置以下内容:

  • 请求者的传入MTU
  • 请求者的输出刷新超时
  • 请求者的输出QoS
  •  请求者的进出出流程和错误控制信息
  •  请求者的输入和输出的帧检查序列选项
  •  使用扩展流规范的请求者的传出QoS选项
  •  请求者的传入扩展窗口大小选项加上传入和传出帧格式。

 2.1.2 响应路径

响应路径可以配置以下内容:

  • 响应方的传出MTU,即远程端的传入MTU
  • 远程端的刷新超时
  • 响应方的传入QoS流规范(远程端的传出QoS流规范)
  • 响应方的传入流和错误控制信息
  • 响应方的传入QoS扩展流规范(远程端的传出QoS流规范)
  • 响应方的传出扩展窗口大小

2.1.3  锁步配置过程

发送L2CAP_CONFIGURATION_REQ数据包来建立或更改通道参数,包括两个L2CAP实体之间的QoS合同。

在发送或接收接受正在配置通道的L2CAP连接请求的连接响应后,应以L2CAP_CONFIGURATION_REQ形式发送扩展流规范选项以及任何非默认参数。

每个L2CAP实体只发送一个L2CAP_CONFIGURATION_REQ数据包

锁步配置使用场景:只有在用于重新配置的L2CAP_CONFIGURATION_REQ数据包中存在扩展流规范选项。

扩展流规范应发送给在AMP-U逻辑链路上创建的所有通道,并且只有当本地和远程L2CAP实体在其扩展特性掩码中都表示支持BR/EDR的扩展流规范时,才应发送给在ACL-U逻辑链路上创建的通道。

如果发送的L2CAP_CONFIGURATION_REQ包含扩展流规范选项,则不包括服务质量选项和刷新超时选项。

L2CAP_CONFIGURATION_RSP包应响应L2CAP_CONFIGURATION_REQ包,除非L2CAP_COMMAND_REJECT_RSP响应覆盖错误情况。虽然L2CAP配置信令机制允许使用通配符,但扩展流规范不支持通配符值,因为每个参数只代表一个方向的流量属性,并且打算在L2CAP配置级别进行协商。

L2CAP_CONFIGURATION_REQ的接收者应与控制器执行所有必要的检查,以验证所请求的QoS。在BR/EDR或BR/EDR/LE控制器的情况下,L2CAP层执行控制器检查。如果使用了HCI,那么L2CAP实体应该检查所请求的QoS是否可以通过HCI的传输来实现。为了执行这些检查,接收者需要具有两个方向的QoS参数。为了让各方确定何时执行相关的控制器检查,各方将回复结果为“未决”(0x0004)。

如果在L2CAP_CONFIGURATION_RSP数据包中没有发送参数,结果为“待定”,则接受在L2CAP_CONFIGURATION_REQ中发送的参数而不需要更改。

此锁步过程将导致两个L2CAP实体执行以下操作:

  • 接收一个包含扩展流规范选项以及所有非默认参数的L2CAP_CONFIGURATION_REQ
  • 发送包含对扩展流规范选项进行任何修改的L2CAP_CONFIGURATION_RSP,并允许对非默认参数进行修改(结果为“待定”)
  • 发送一个包含扩展流规范选项以及所有非默认参数的L2CAP_CONFIGURATION_REQ
  • 接收一个包含对扩展流规范选项的任何修改的L2CAP_CONFIGURATION_RSP,并允许对非默认参数进行修改(结果为“待定”)。

当接收到结果为“待定”的L2CAP_CONFIGURATION_RSP时,将使用ERTX计时器。

 如果在收到结果“挂起”的L2CAP_CONFIGURATION_RSP之前收到结果“成功”的L2CAP_CONFIGURATION_RSP,接收人应断开通道的连接。这违反了锁步的配置过程。

如果设备在服务类型为“最佳努力”的L2CAP_CONFIGURATION_REQ中发送扩展流规范选项,并接收到服务类型为“保证”的L2CAP_CONFIGURATION_REQ,则应断开通道。

如果设备在具有“保证”类型的L2CAP_CONFIGURATION_REQ中发送扩展流规范,并接收到具有服务类型为“最佳努力”的L2CAP_CONFIGURATION_REQ,则应断开通道。

如果服务类型是“最佳努力”,那么某些参数的值可以在L2CAP_CONFIGURATION_RSP中发送,结果为“等待”,以指示L2CAP_CONFIGURATION_RSP的发送者能够接收到的最大带宽。

在收到结果为“待定”的L2CAP_CONFIGURATION_RSP后,L2CAP可能会向控制器发出必要的检查。

如果控制器不能支持服务类型为“保证”的扩展流规范,那么L2CAP_CONFIGURATION_REQ的接收者应发送L2CAP_CONFIGURATION_RSP,指示“失败流规范”的结果代码(0x0005)。如果控制器指示它可以支持扩展流规范,那么L2CAP_-CONFIGURATION_REQ的接收者应该发送一个结果代码为“成功”(0x0000)的L2CAP_CONFIGURATION_RSP。

2.1.4 标准配置过程

一般步骤

(1)本地设备通知远程设备本地设备将使用L2CAP_CONFIGURATION_REQ接受的参数。

(2)远程设备使用L2CAP_CONFIGURATION_RSP响应,同意或不同意这些值,包括默认值。

(3).本地和远程设备重复步骤(1)和(2),直到对所有参数达成一致为止。

终止配置前,定时器超时时间不能超过120s.

配置参数类型:

可协商:指接收L2CAP_CONFIGURATION_REQ的远程端可以通过发送具有不可接受参数(0x0001)结果代码的L2CAP_-CONFIGURATION_RSP,提出可以接受的新值。不可协商的参数只是信息性的,L2CAP_CONFIGURATION_REQ的接收者不能不同意它们,但可以对正L2CAP_CONFIGURATION_RSP中的值进行调整。

注:MTU不可协商,但如果建议的值低于规定的最小值,则可以拒绝

请求路径中的参数协商应采用以下规则:

  • L2CAP实体应发送至少一个L2CAP_CONFIGURATION_REQ数据包,作为初始配置或重新配置的一部分。如果所有默认或先前商定的值都是可接受的,则应发送一个没有选项的L2CAP_CONFIGURATION_REQ数据包。
  • 当L2CAP实体从远程设备接收到正L2CAP_CONFIGURATION_RSP时,它应考虑L2CAP_CONFIGURATION_REQ中显式包含的所有配置参数,以及远程设备所接受的L2CAP_CONFIGURATION_REQ中未显式包含的默认和先前同意的值 
  • 当L2CAP实体接收到负L2CAP_CONFIGURATION_-RSP并发送新的L2CAP_CONFIGURATION_REQ时,它应该包含在之前L2CAP_CONFIGURATION_REQ中发送的所有选项,除了在负L2CAP_CONFIGURATION_RSP中明确拒绝的可协商选项将有新的值。
  • 远程设备认为可以接受不包括在负L2CAP_CONFIGURATION_RSP中的可协商选项。

 响应路径中的参数协商应采用以下规则:

  • 正L2CAP_CONFIGURATION_RSP接受接收到的L2CAP_-CONFIGURATION_REQ中显式包含的所有配置参数的值,以及未显式提供的默认和先前商定的值。
  • L2CAP实体应发送一个负的L2CAP_CONFIGURATION_RSP,以拒绝不可接受的可协商的参数值,无论是在接收到的L2CAP_CONFIGURATION_REQ中明确提供的值,还是先前商定的或默认值。以负L2CAP_CONFIGURATION_RSP发送的被拒绝的参数应具有发送负L2CAP_CONFIGURATION_RSP的L2CAP实体可接受的值。
  • 所有被拒绝的可转让期权应以同一负L2CAP_CONFIGURATION_RSP被拒绝。
  • 负L2CAP配置中允许的唯一选项是被拒绝的可转让期权。不可转让期权的通配符或调整不得为负L2CAP配置RSP
  • 不包括在负的L2CAP_CONFIGURATION_RSP中的可谈判的选项被认为是可接受的。

2.2 碎片化和重组

 碎片化是指将pdu分解成更小的部分,从L2CAP传递到下层。

重组是从从下层传递的碎片重新组装PDU的过程。

碎片化和重组可应用于任何L2CAPpdu。

2.2.1 L2CAP pdu的片段

为什么要碎片化?

在没有HCI控制器时,方便控制传输。

 举例:BR/EDR控制器的碎片化说明

 注:BR/EDR链路控制器可以通过使用“开始”和“继续”指示来对PDU施加不同的碎片处理。因此,L2CAP和BR/EDR链路控制器都使用相同的机制来控制片段的大小

2.2.2  L2CAP PDUs的重组

为什么要进行L2CAP PDUs重组?

控制器顺序发送数据包时,可能会进行片段重组,L2CAP重组pdu和sdu,检查一致性,丢弃与pdu长度不匹配的包。

2.3 SDU封装

         在基本L2CAP模式下,SDU应至少用L2CAP协议元素封装,从而得到一种称为基本信息帧(b-帧)的L2CAPPDU类型。

        分割和重组操作仅在增强重传输模式、流传输模式、重传输模式和流控制模式下使用。sdu可以被分割成许多较小的数据包,称为SDU段。每个段应用L2CAP协议元件封装,从而得到一个称为信息帧(Iframe)的L2CAP PDU。

        SDU段的最大长度应由最大PDU有效载荷长度(MPS)给出。MPS参数可以使用特定于实现的接口导出到上层。

2.3.1 L2CAPSDUs的分割

 

         在流式控制、流媒体或再传输模式中,传入的SDU可以被分解为分段,然后用L2CAP协议元素(标题和校验和字段)单独封装以形成I帧。I帧受流量控制,并可能受重传程序。报头携带一个2位SAR字段,用于识别i帧是“开始”、“结束”还是“继续”数据包,或者它是否携带一个完整的、未分割的SDU。

2.3.2 L2CAP SDU的重新组装

        接收端使用传入“I帧”的SAR字段进行重新组装过程“SDU开始”I帧中的L2CAP SDU长度字段为
可以使用额外的完整性检查和序列号向应用程序指示丢失的L2CAP SDU。

 2.3.3 分割和碎片化

 2.4 错误L2CAP SDU的交付

         一些应用程序可能需要将损坏或不完整的L2CAPsdu交付到上层。如果启用了错误的L2CAPSDU的交付,接收方将将这些信息传递给L2CAPSDU部分(即L2CAP帧)丢失、错误检查不通过或错误检查通过的上层。如果错误的L2CAPSDU的交付被禁用,接收器应丢弃任何缺失帧或错误检查失败的任何帧的L2CAPSDU段。长度字段与实际帧长度不匹配的L2CAPSDU也应被丢弃。

2.5 acl-u逻辑链接的操作

        在使用刷新超时选项或扩展流规范选项的L2CAP配置中,刷新超时可以根据L2CAP通道分别设置刷新超时,但在BR/EDR基带中,刷新机制按照ACL逻辑传输。 

        当有多个L2CAL通道映射到同一ACL逻辑传输时,自动刷新超时不会区分L2CAP通道。自动冲洗超时也适用于通过L2CAP无连接通道发送的单播数据。异常是通过HCI  ACL数据数据包中的Packet_Boundary_Flag标记为非自动切换的数据包。自动刷新超时刷新特定自动刷新的L2CAPPDU。HCI_Flush命令将刷新用于ACL逻辑传输的所有未完成的L2CAPPDU,包括标记为非自动切换的L2CAPPDU。因此,在使用自动刷新超时和HCI_Flush命令时必须小心。应该使用HCI_Enhanced_Flush命令。

2.6 无连接数据通道

        在无连接通道上发送的数据只能通过BR/EDR无线电发送。无连接信道允许从主设备到微型网的所有成员的广播传输,或者从主设备或从设备到单个远程设备的单播传输。通过无连接通道发送的数据将以最大努力的方式发送。L2CAP提供的无连接信道没有服务质量。

        除了面向连接的通道外,L2CAP还提供了一个无连接的通道。在无连接通道上发送的数据只能通过BR/EDR无线电发送。无连接信道允许从主设备到微型网的所有成员的广播传输,或者从主设备或从设备到单个远程设备的单播传输。通过无连接通道发送的数据将以最大努力的方式发送。L2CAP提供的无连接信道没有服务质量。

        ·基带不提供对广播传输的确认,因此通过无连接的L2CAP信道发送的广播传输不可靠,因此可能或可能不会到达微网的每个成员。

        如果数据包被发送到PSM并且没有注册应用来接收该PSM上的数据,则接收的L2CAP实体可以无声地丢弃通过无连接的L2CAP通道接收的数据。

        L2CAP不为在基本模式下运行的面向连接的L2CAP通道或在无连接的L2CAP通道上的流量提供流量控制。因此,如果目标不接受L2CAP接收到的数据。在接收L2CAP实现中可以发生拥塞。对于面向连接的信道,如果该信道的目标应用程序不及时接受该数据,则接收器L2CAP实体可以选择关闭该信道。由于此选项不适用于通过无连接的L2CAP通道接收的单播数据,因此接收的L2CAP实体可以选择将接收数据的应用程序取消注册或断开底层物理链路。申请被注销的,应当通知该申请。如果底层物理链路被断开,则应通知所有使用该物理链路的应用程序。

        只有在远程设备表示在L2CAP扩展特性掩码中支持单播无连接的数据接收时,单播数据才能通过无连接的L2CAP通道发送到远程设备。1应使用L2CAP_INFORMATION_REQ数据包检索L2CAP扩展特性掩码,以确定是否支持单播无连接数据接收。可以选择,对单播无连接数据接收可以从通过SDP或EIR获得的信息推断出无连接数据接收的支持。例如,如果通过已知的SDP或EIR找到了要求支持UCD的服务,则可以假定表示支持该服务的设备支持单播无连接数据接收。

        通过L2CAP无连接信道发送的单播数据受自动刷新,因此应设置数据包边界标志如果控制器支持数据包边界标志功能,则应适当。因为接收L2CAP实体没有使其能够知道接收到的数据包是否最初是接收设备在发送设备上标记为可冲洗或不可冲洗L2CAP实体应处理通过无连接网络接收的所有单播数据包L2CAP包不可刷新。

        到无连接信道的广播传输与广播LT_ADDR一起发送,因此可以由图片网中的任何从端接收。如果希望将传输数据的接收限制在微型集中从节点的一个子集,那么可以使用更高级的加密来支持私有通信。

        主机将不会接收无连接网络上广播的传输频道,高层协议必须回送任何广播数据,发送到主设备的通信量。

2.7 操作冲突解决

        当两个设备通过发送具有相同代码的请求包来请求相同的操作时,可能会发生冲突。有些操作需要解决冲突问题。这两个设备都必须知道哪个请求将被拒绝。两个设备都应使用以下算法来确定拒绝哪个请求。

  • 1.设置i=0(代表BD_ADDR中最不重要的八位字节)
  • 2.比较两种设备的BD_ADDR的八重奏。如果八进制不相等,请执行步骤4。
  • 3.增加i乘以1。进入步骤2
  • 4.具有较大的BD_ADDR八字节的设备应拒绝来自其他设备的请求。

2.8 数据优先HCI

        为了保证的通道满足其保证,L2CAP应优先考虑支持HCI的设备中的流量而不是HCI传输。保证通道的包应该比最佳努力通道的包获得更高的优先级。

3.流量控制和重传的程序

         当使用增强式重传模式、流媒体模式、流式控制模式或重传模式时,应使用本章中定义的程序,包括信息帧的编号、SDU分割和重组的处理,以及有错误的帧的检测和通知。重传输模式和增强的重传输模式还允许发送方根据接收方的请求重新发送带有错误的帧。

3.1 信息检索

        在尝试在信道上配置增强的再传输模式、流媒体模式、流式控制模式或再传输模式之前,应通过对“支持的扩展特性”信息类型(0x0002)执行信息检索来验证对建议模式的支持。如果信息检索不成功或未设置“扩展特征掩模”位,则在配置请求中不建议使用该模式。

 3.2 pdu类型的流量控制和重传的功能

         为增强型重传模式、流媒体模式、流式控制模式和重传模式定义了两种帧格式。I帧用于传输用户信息,而不是b帧。s型框架用于监督。

文章来源: xintiaobao.blog.csdn.net,作者:心跳包,版权归原作者所有,如需转载,请联系作者。

原文链接:xintiaobao.blog.csdn.net/article/details/120203595

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。