
蓝牙ACL(Asynchronous Connection-Less)连接确立后,存在一系列可选操作,这些操作旨在进一步增强连接的安全性、可靠性和功能性。本文将深入探究蓝牙 ACL 连接确立后的可选操作,包括认证请求、获取远程设备信息、数据传输优化、服务发现和连接以及安全和认证等方面。
在蓝牙设备之间的连接成功建立之后,可以随时明确执行认证过程。认证是确保设备间安全通信的重要步骤,它验证了设备的身份并防止了未经授权的访问。

执行说明:
链路密钥的来源:链路密钥可以预先存储在设备中,也可以在需要时从主机获取。主机通常会管理和存储与各个连接设备相关的链路密钥。如果在连接建立后发现没有可用的链路密钥,就需要采取措施获取它。
配对过程的触发: 如果控制器、链路管理器和主机都没有链路密钥,那么设备就需要进行配对操作。配对是为了建立新的链路密钥或者获取已有的链路密钥。具体的配对方式取决于设备的类型、安全需求以及应用场景等因素。
例如,在一些对安全要求较高的应用场景中,如金融交易或敏感数据传输,设备可能会在连接建立后立即进行认证操作,以确保通信的安全性。如果没有链路密钥,设备将按照特定的配对流程进行配对,生成新的链路密钥或者从其他存储位置获取已有的链路密钥。
当两个设备都支持安全连接(Secure Connections)时,它们会使用安全认证(Secure Authentication)来确保连接的安全性。安全连接是蓝牙技术中一种增强的安全机制,它采用了更先进的加密算法和认证流程,以保护设备之间的通信不被未经授权的访问和窃听。

在安全认证过程中,设备会交换一系列的加密信息,并使用这些信息来验证对方的身份。安全认证的优势在于它提供了更高的安全性,因为使用了更强大的加密算法和更复杂的认证流程。例如,安全认证可能使用椭圆曲线密码学(ECC)等更先进的加密算法,提供更高的安全性和性能。同时,安全认证可能还包括设备身份验证、数字签名等机制,以防止中间人攻击和其他安全威胁。
需要注意的是,安全认证并不是蓝牙连接中唯一的安全机制。蓝牙技术还提供了其他的安全特性,如加密、身份验证和数据完整性检查等,这些特性与安全认证一起工作,共同确保蓝牙连接的安全性。
安全简单配对(Secure Simple Pairing,SSP)是一种在蓝牙设备之间建立安全连接的方法,旨在提供更便捷、更安全的配对体验。这个过程涉及多个步骤,包括信息收集、启用安全功能、连接建立、认证和密钥计算等。两个设备之间的安全简单配对流程图如下图所示。

这个过程分为 11 个不同的步骤,其中一些步骤有多个不同的选项。这些步骤共同构成了Secure Simple Pairing的完整流程,确保了两个设备之间安全、可靠的连接。在实际应用中,这些步骤可能因设备的具体实现和蓝牙版本的差异而略有不同。
OOB(Out of Band)信息收集是指在蓝牙设备间进行OOB信息交换之前,设备的主机(Host)从控制器(Controller)中获取必要的OOB信息(如C值和R值)的过程。这些信息通常用于后续的设备配对和认证过程,以增强连接的安全性。

HCI_Read_Local_OOB_Data命令。
OOB信息收集通常应用于需要高度安全性的蓝牙设备配对场景中。例如,在智能家居、医疗设备或汽车蓝牙连接等领域,使用OOB信息收集可以增强设备间的认证过程,防止未经授权的设备接入网络。
通过OOB信息收集,设备可以在不依赖传统蓝牙通信通道的情况下,通过其他安全通道(如NFC、二维码等)交换关键认证信息。这有助于降低蓝牙通信被拦截或干扰的风险,提高设备间的互操作性和安全性。
OOB信息收集是蓝牙设备间进行安全配对的重要步骤之一。通过从控制器获取必要的OOB信息,并将其传输给OOB系统,设备可以准备好与其他支持OOB信息交换的设备进行安全配对。
当控制器和主机都支持安全连接时,为了更好地处理带外信息,会使用 “HCI_Read_Local_OOB_Extended_Data” 命令。这个命令可能提供了更丰富的功能或者更安全的方式来获取和处理带外信息,相比 “HCI_Read_Local_OOB_Data” 命令更加适合安全连接的场景。

例如,在某些安全要求较高的工业环境中,无源标签可能在生产阶段就通过带外信息交换进行了预配置。当设备在实际使用中需要进行配对或认证时,主机可以根据设备的支持情况选择合适的命令来获取带外信息,确保安全连接的建立。
在实际应用中,设备制造商可能会根据他们的具体需求和设计来实现OOB信息收集的流程和机制。这包括确定如何存储和传输OOB信息,以及如何在蓝牙配对过程中使用这些信息。
为了启用安全简单配对功能,蓝牙设备需要使用HCI_Write_Simple_Pairing_Mode命令。这个命令是在设备之间建立任何使用安全简单配对的连接之前必须执行的。安全简单配对是一种增强的配对机制,旨在提高蓝牙设备间配对的安全性和易用性。

在执行HCI_Write_Simple_Pairing_Mode命令时,设备可以指定其支持的配对模式,如数字比较、仅输入(Passkey Entry)或仅输出(Passkey Display)等。这些模式决定了在配对过程中用户需要执行的操作。
为了配置控制器以使用安全连接相关的HCI命令和事件,设备需要使用HCI_Write_Secure_Connections_Host_Support命令。这个命令必须在没有任何ACL(Asynchronous Connection-Less)连接存在的情况下执行。

安全连接是蓝牙技术的一项安全增强功能,它提供了更强大的加密算法和更安全的密钥交换机制。通过使用安全连接,设备可以确保在配对和连接过程中数据的安全性,并降低被攻击的风险。
除了启用安全简单配对和配置安全连接外,设备还可以通过执行HCI_Write_Authenticated_Payload_Timeout命令来配置控制器。

这个命令允许设备设置在使用AES-CCM加密时,包含MIC(Message Integrity Code,消息完整性代码)的数据包之间的最大间隔时间。如果在这个时间间隔内没有接收到包含MIC的数据包,控制器可能会认为连接已经中断或存在安全问题,并采取相应的措施。
HCI_Write_Simple_Pairing_Mode:必须在建立任何使用安全简单配对的连接之前执行。这个命令的执行将启用设备的安全简单配对功能,并为后续的配对过程做好准备。HCI_Write_Secure_Connections_Host_Support:必须在没有任何ACL连接存在的情况下执行,以配置控制器以支持安全连接相关的HCI命令和事件。HCI_Write_Authenticated_Payload_Timeout:可以在任何时间执行,但通常建议在配置安全连接后执行,以确保在加密通信中设置合适的超时参数。通过执行这些命令,设备可以启用安全简单配对和安全连接功能,并配置认证有效载荷超时参数,从而提高蓝牙通信的安全性和可靠性。这些功能对于保护用户数据和隐私至关重要,特别是在需要高度安全性的蓝牙应用场景中。
HCI_Write_Secure_Connections_Host_Support命令时,请确保没有任何ACL连接存在,以避免命令执行失败或导致连接中断。安全简单配对的主要作用是提高蓝牙设备间配对的安全性和易用性。通过减少用户输入和提供更强的加密,它使得设备之间的配对过程更加简单和安全。
一旦安全简单配对功能被启用,可以通过以下两种可能的动作之一被触发:
一旦安全简单配对被触发,设备将开始执行一系列步骤来建立安全的连接:
安全简单配对是一种重要的蓝牙安全技术,它可以通过L2CAP连接请求或OOB信息传输来触发,从而确保设备之间建立安全的连接。
在蓝牙技术中,L2CAP(Logical Link Control and Adaptation Protocol Layer)是蓝牙协议栈中的一层,它负责数据包的传输和适配。当两个蓝牙设备之间已经建立了连接(通常是指ACL连接,即Asynchronous Connection-Less连接),并且其中一个设备希望与另一个设备上的某个特定服务进行通信时,它会发起一个L2CAP连接请求。

如果请求连接的服务是一个需要认证和加密的服务(即安全服务),那么发起连接请求的设备将启动安全简单配对(Secure Simple Pairing,SSP)过程。这是为了确保在传输敏感数据之前,两个设备之间已经建立了安全的连接,并且双方的身份都得到了验证。
当设备收到一个针对需要安全性的服务的L2CAP连接请求时,它将检查是否已经与该设备配对,并且配对信息是否仍然有效。如果设备尚未配对,或者配对信息已经过时,那么它将启动安全简单配对过程。这个过程通常包括以下几个步骤:
一旦安全简单配对过程完成,并且设备之间建立了安全的L2CAP连接,那么发起连接请求的设备就可以开始访问目标设备上的安全服务了。这通常涉及到数据包的传输和接收,以及可能的服务特定协议的处理。
当设备请求一个需要认证和加密的服务的L2CAP连接时,它将启动安全简单配对过程,以确保在传输敏感数据之前建立安全的连接。
OOB(Out of Band)信息传输是一种在蓝牙设备间传输额外信息的方法,这些信息通常用于增强设备间的认证过程。即使两个蓝牙设备之间尚未建立连接,OOB信息传输也可以发生。它主要用于传输设备的蓝牙设备地址和用于身份验证的其他OOB信息。

OOB信息传输是一种在蓝牙设备间传输额外信息以增强认证过程的方法。它可以在设备间尚未建立连接时发生,并包括蓝牙设备地址和其他用于身份验证的OOB信息。通过OOB信息传输,蓝牙设备可以更安全地建立连接并提高用户体验。
在蓝牙设备之间建立连接的过程中,如果主机(Host)确定需要启动安全简单配对(Secure Simple Pairing,SSP),它将向控制器(Controller)发出一个HCI_Authentication_Requested命令。这个命令是蓝牙主机控制器接口(HCI)的一部分,用于指示控制器开始认证过程。

HCI_Authentication_Requested命令后,控制器会生成一个链路密钥(Link Key)请求。链路密钥是用于加密蓝牙设备之间通信的密钥。HCI_Link_Key_Request_Negative_Reply命令,表示它无法提供链路密钥。这个回复是启动安全简单配对过程的触发点。HCI_Link_Key_Request_Negative_Reply命令,它将知道需要通过安全简单配对过程来生成一个新的链路密钥。这个过程通常包括交换随机数、生成密钥、进行认证等步骤,以确保两个设备之间能够安全地建立连接。当主机确定需要启动安全简单配对时,它会向控制器发出
HCI_Authentication_Requested命令。如果主机没有为这个连接存储有效的链路密钥,它将发送一个负面回复来触发安全简单配对过程。这个过程将确保两个设备之间能够安全地建立连接,并生成一个新的、经过认证的链路密钥用于后续的通信加密。
在蓝牙SSP配对过程中,为了确定使用哪种正确的认证算法,两个设备需要交换它们的输入输出(IO)能力。这些能力决定了设备在配对过程中能够支持哪些类型的用户交互和认证方法。

蓝牙标准定义了四种主要的IO能力:
在蓝牙设备开始配对之前,它们会通过蓝牙协议栈中的相关层(如L2CAP和HCI)来交换这些IO能力信息。一旦两个设备知道了彼此的IO能力,它们就可以根据这些信息来选择最合适的认证算法。
根据交换的IO能力,设备可以选择以下四种认证方法之一:
输入输出能力交换是蓝牙安全简单配对过程中的一个重要步骤,它允许设备根据彼此的IO能力来选择最合适的认证算法。这个过程对于确保配对过程的安全性和用户体验至关重要。
接下来,两个设备之间会进行公钥交换。一旦某个设备接收到了对等设备的公钥,它就能够开始计算迪菲 - 赫尔曼密钥(Diffie-Hellman Key,简称 DHKey)了。这个密钥将用于后续的加密和认证过程,确保设备之间通信的安全性。

公钥是一种基于非对称加密算法的概念,每个设备都有自己的公钥和与之对应的私钥,公钥可以公开分享给其他设备,而私钥则需要严格保密。通过交换公钥,设备之间就建立起了后续进行密钥协商和生成的基础,为安全通信做好准备。
例如,就好比两个人要进行秘密通信,他们先互相交换了一把特制的 “公开锁”(公钥),后续基于对方提供的这把 “公开锁” 来进一步打造只有彼此能打开的 “专属锁”(DHKey 等用于安全通信的密钥)。
DHKey在蓝牙安全简单配对过程中起着至关重要的作用。它是基于两个设备共享的私钥和公开的公钥计算得出的,因此只有这两个设备才能知道这个密钥。这个密钥将用于后续的加密和认证过程,确保设备之间通信的安全性。
需要注意的是,虽然DHKey在公钥交换后就开始计算,但它并不是立即需要的。实际上,它直到配对过程的第8步(即加密和认证步骤)才会被使用。因此,在计算DHKey的过程中,设备可以继续进行其他配对相关的操作。
公钥交换是蓝牙安全简单配对过程中的一个重要步骤,它允许两个设备共享一个基于Diffie-Hellman密钥交换算法的密钥(即DHKey)。这个密钥将用于后续的加密和认证过程,确保设备之间通信的安全性。在计算DHKey的过程中,设备可以继续进行其他配对相关的操作,但需要注意确保通信的安全性和设备的支持情况。
在蓝牙SSP配对过程中,认证是一个至关重要的步骤。它的主要目的是验证两个设备的身份,确保它们确实是彼此想要通信的设备,从而防止中间人攻击和其他安全威胁。
蓝牙标准定义了三种主要的认证算法,这些算法的选择取决于两个设备的输入输出(IO)能力的组合。以下是这三种算法及其适用场景:
一旦选择了合适的认证算法,两个设备就会开始执行认证过程。这个过程可能包括生成随机数、显示或输入数字、进行数学运算等步骤。在认证过程中,设备会验证对方的身份,并确保它们确实是彼此想要通信的设备。
认证是蓝牙安全简单配对过程中的一个重要步骤,它允许设备验证彼此的身份,并确保它们之间的通信是安全的。在选择认证算法时,需要考虑设备的IO能力,并根据实际情况选择最合适的算法。在认证过程中,需要确保通信的安全性和设备的支持情况,以确保配对过程的安全性和用户体验。
在蓝牙SSP配对过程中,数字比较是一个关键的认证步骤。当两个设备都具备输出能力,或者其中一个设备没有输入或输出能力时,就会执行这一步。数字比较的目的是通过显示一个用户确认值来验证两个设备是否正在尝试与正确的对方进行配对。

例如,在蓝牙设备配对场景中,如果是两个智能手机进行配对,它们都拥有屏幕等输出方式,满足第一种情况,就会执行数字比较步骤。又比如,一个简单的蓝牙传感器(可能只具备基本的数据采集功能,没有输入或输出能力用于复杂交互)与一个智能终端设备配对时,就符合第二种情况,同样也会进入数字比较环节。
2.10.1. 数字比较的执行条件
数字比较方法与“Just Works”方法在流程上非常相似,但有一个关键的区别:在数字比较方法中,主机会显示数字给用户进行比较;而在“Just Works”方法中,主机不会显示任何数字给用户,因为这种方法通常用于没有输入或输出能力的设备,或者当安全性要求不是非常高时。
数字比较是蓝牙安全简单配对过程中的一个重要步骤,它允许用户通过比较两个设备上显示的数字来验证配对的正确性。在执行数字比较时,需要考虑设备的输出能力和用户交互方式,以确保配对过程的安全性和用户体验。
如果发起方(即主动发起配对请求的设备)上的用户发现两个设备显示的用户确认值不匹配,他们可能会选择拒绝配对。这种情况下,数字比较步骤就会失败。

例如,在用户将手机与一个新的蓝牙音箱进行配对时,手机作为发起方,在数字比较步骤中,手机屏幕上显示的数字本应和音箱上显示(如果音箱有显示功能)或者提示(通过语音等其他方式)的数字一致。但如果用户发现手机上的数字与音箱那边对应的数字不一样,那么按照安全机制,就表明此次配对存在问题,为了保障数据安全以及避免连接到不可信的设备,整个安全简单配对流程就会立刻终止,手机和音箱之间也就无法成功建立蓝牙连接。
数字比较失败是蓝牙安全简单配对过程中可能遇到的一个问题。当发生这种情况时,用户应该采取适当的应对措施来解决问题,并确保他们只与可信的设备进行配对。
如果响应方(即接收配对请求的设备)上的用户发现两个设备显示的用户确认值不匹配,他们可能会拒绝配对。这种情况下,数字比较步骤在响应方就会失败。

例如,在将智能手表与手机进行蓝牙配对时,手机发起配对请求后,智能手表作为响应方会展示相应的确认值(可能通过屏幕显示或者语音提示等方式),此时用户需要核对手表显示的确认值和手机上显示的是否一样。
数字比较失败在响应方同样会导致蓝牙安全简单配对过程被终止。为了解决这个问题,用户应该采取适当的应对措施,并确保他们只与可信的设备进行配对。同时,设备制造商和技术支持团队也应该提供必要的帮助和指导,以改善用户体验和确保设备的安全性。
密码输入步骤是蓝牙安全简单配对过程中的一个重要环节。它确保了只有经过用户确认的设备才能成功配对。通过遵循正确的输入步骤和注意事项,用户可以确保他们的蓝牙设备能够安全地与其他设备建立连接。

密码输入步骤主要用于以下两种情况:
与数字比较方法相比,密码输入方法更适用于那些只有一个设备具有显示能力,而另一个设备只能输入数字的情况。数字比较方法则要求两个设备都具有显示能力,以便用户可以比较两个设备上显示的数字是否相同。
请注意,上述描述是基于蓝牙安全简单配对过程的一般理解。不同设备和制造商可能会有一些特定的实现细节和差异。因此,在实际操作中,用户应该参考他们所使用的设备和软件的官方文档或指南来获取更详细的信息。
如果响应方(即接收配对请求并需要输入密码的设备)上的用户未能正确输入或确认密码,就会导致密码输入失败。这种情况可能由以下原因引起:

当响应方密码输入失败时,整个Secure Simple Pairing过程将被终止。这意味着两个设备将无法建立安全连接,也无法进行后续的通信。此外,密码输入失败还可能导致用户感到困惑或不满,特别是当他们确信已经正确输入了密码时。
响应方密码输入失败是蓝牙安全简单配对过程中可能遇到的一个问题。为了解决这个问题,用户应该采取适当的应对措施,并确保他们只与可信的设备进行配对。
如果发起方(即主动发起配对请求的设备)上的用户未能正确输入或确认密码,就会导致密码输入失败。这种情况可能由以下原因引起:

当发起方密码输入失败时,整个Secure Simple Pairing过程将被终止。这意味着两个设备将无法建立安全连接,也无法进行后续的通信。此外,密码输入失败还可能导致用户感到困惑或不满,特别是当他们确信已经正确输入了密码时。
值得注意的是,发起方密码输入失败的情况通常只在以下特定条件下发生:
发起方密码输入失败进而终止安全简单配对这一机制,是蓝牙安全机制中不可或缺的一部分,它有力地保障了蓝牙设备间配对过程的严谨性以及后续通信的安全性,为用户营造一个安全可靠的蓝牙使用环境。
带外认证(Out of Band,OOB)是一种蓝牙配对过程中的安全机制,它利用设备之间的非蓝牙通信渠道来增强配对的安全性。这种机制通常用于确保只有经过用户确认的设备才能成功配对,从而防止未经授权的设备接入。


重要的是,带外认证步骤不需要用户直接交互。一旦设备之间建立了带外通信通道并成功交换了必要的认证信息,它们就可以使用这些信息来完成蓝牙配对的认证阶段,而无需用户手动输入密码或进行其他形式的确认。使得整个配对过程更加自动化和便捷,尤其是在一些对效率要求较高或者用户操作不太方便的场景下,显得尤为重要。
带外认证主要在以下情况下使用:
例如在一些物联网设备的批量部署场景中,众多蓝牙传感器需要与控制中心进行配对,如果每个传感器在带外认证环节都需要用户手动输入信息或者进行确认等操作,那将会耗费大量的人力和时间成本。而带外认证无需用户交互,只要设备自身具备了相应的带外信息,就能自动完成认证过程,大大提高了配对的效率,同时也能保证一定的安全性,确保配对的设备是符合预期且相互信任的。
带外认证是一种有效的蓝牙配对安全机制,它能够提高配对过程的安全性和用户友好性。然而,用户在使用这种方法时应该了解并遵守相关的安全注意事项,以确保其有效性和安全性。
如果发起方(即主动发起配对请求的设备)没有可用的带外(Out of Band,OOB)信息,那么带外认证步骤将无法进行,从而导致带外认证失败。带外信息通常是通过非蓝牙通信渠道(如NFC、二维码等)在设备之间交换的。

如果发起方缺少带外信息,就如同在一场需要双方出示特定 “入场券” 的验证活动中,发起方却拿不出自己的那份 “入场券”,那么整个验证环节就无法正常进行下去。
当发起方带外认证失败时,整个Secure Simple Pairing过程将被终止。这意味着两个设备将无法建立安全连接,也无法进行后续的通信。此外,带外认证失败还可能导致用户感到困惑或不满,特别是当他们期望使用带外认证来提高配对安全性时。
在进行蓝牙配对时,确保设备具备可用的带外信息是非常重要的。这不仅可以提高配对的成功率,还可以增强连接的安全性。如果设备不支持带外认证或没有可用的带外信息,那么用户可能需要使用其他方法(如手动输入密码)来完成配对过程。
当设备已经完成认证流程,并且迪菲 - 赫尔曼密钥(DHKey)的计算也顺利结束后,接下来就要对所生成的 DHKey 值进行检查了。这里的认证过程是通过前面一系列步骤中所采用的诸如基于设备 I/O 能力选择合适的认证算法等方式来完成的,其目的是确保参与配对的双方设备是合法且相互信任的。而 DHKey 的计算则是在设备间交换公钥之后启动的一个耗时的后台运算过程,它对于后续建立安全的蓝牙通信链路起着至关重要的作用。

例如,在智能手机与蓝牙耳机进行蓝牙配对时,智能手机和蓝牙耳机首先会按照既定的认证规则完成相互认证,确认彼此身份合法。然后,它们在之前交换公钥的基础上各自进行 DHKey 的计算,这个计算可能会花费一定时间,不过在后台默默进行,不影响前面认证等步骤的推进。
对 DHKey 值进行检查的意义重大,它相当于对整个安全连接建立过程中的一个关键 “成果” 进行审核。通过特定的检查机制,确保这个生成的密钥符合预期的安全标准和算法要求,以此来验证后续将要用于加密蓝牙通信数据的这个密钥是可靠且有效的。
如果 DHKey 值检查出现问题,那就意味着可能存在安全漏洞,比如计算过程中受到干扰出现错误,或者有恶意攻击篡改了密钥生成相关的数据等情况,这样一来,设备之间的安全通信就无法得到保障。
DHKey检查是蓝牙安全简单配对过程中的一个重要步骤,它确保了两个设备能够成功生成并验证相同的DHKey,从而建立一个安全的连接。如果DHKey检查成功,那么两个设备就可以开始进行后续的通信了。
在蓝牙设备的SSP配对流程全部完成之后,接下来就要进行链路密钥(link key)的计算工作了。

计算链路密钥这一环节在蓝牙设备完成安全简单配对后起着关键的承接作用,它不仅为后续的相互认证提供了重要依据,而且通过生成通知事件,让整个蓝牙通信系统知晓安全保障环节的进展情况,为后续安全、稳定的蓝牙通信奠定了坚实基础。
在链路密钥(link key)被通知到主机之后,“HCI_Authentication_Requested” 命令将会伴随着 “HCI_Authentication_Complete” 事件完成执行。至此,主机就能够运用标准方法来开启加密功能了。

该过程的详细步骤:
例如,当手机与蓝牙耳机之间开启加密后,音频数据在从手机传输到耳机的过程中,就会以加密后的形式存在于蓝牙信号中,即使有人恶意监听蓝牙信号,接收到的也只是一堆毫无意义的乱码,只有耳机凭借正确的链路密钥等要素才能对其进行解密,还原出原本的音频内容,让用户能够安全地享受音乐等音频服务。
启用加密这一环节是在完成链路密钥相关操作以及认证流程之后的关键步骤,它基于前面的工作成果,进一步强化了蓝牙通信链路的安全性,为用户在使用蓝牙设备进行数据传输时提供了可靠的隐私保护,确保信息在蓝牙传输过程中不被泄露或篡改。
在蓝牙设备的交互过程中,如果此次SSP配对是由一个 L2CAP(Logical Link Control and Adaptation Protocol Layer,逻辑链路控制和适配协议)连接请求所触发的,那么只有在完成了上述所有步骤之后,才能够发送 L2CAP 连接响应消息。

该过程的详细说明:
L2CAP 连接响应这一环节是建立在完成安全简单配对诸多前置步骤基础之上的,它是确保蓝牙连接安全可靠且能够正常开展数据传输的关键一步,对于保障蓝牙通信的安全性和功能性有着重要意义。
在蓝牙通信中,当认证有效载荷超时(Authenticated Payload Timeout)即将到期时,链路管理器(Link Manager)会发送一个LMP_PING_REQ协议数据单元(PDU)给远程设备,以强制其发送一个包含消息完整性校验(MIC,Message Integrity Check)的数据包。当在经过认证的有效载荷超时时间内没有接收到包含 MIC 的数据包时,主机将被通知定时器已过期。

该过程的详细说明:
LMP_PING_REQ PDU是蓝牙通信中用于保持连接安全的一种机制。通过发送这个PDU并验证响应数据包中的MIC,设备可以确保它们之间的连接仍然是活跃的,并且没有被未经授权的设备接管。
当主机(Host)启用链路监督超时(Link Supervision Timeout, LSTO)更改功能时,外设(Peripheral)在接收到LMP_SUPERVISION_TIMEOUT协议数据单元(PDU)后会生成一个HCI_Link_Supervision_Timeout_Changed事件。

链路监督超时是蓝牙连接中的一个重要参数,它定义了如果两个设备在指定的时间内没有交换任何数据包,则蓝牙连接将被视为无效并断开。这个机制有助于节省设备的电源,并防止因设备长时间未通信而导致的资源占用。
LMP(链路管理层协议,Link Manager Protocol)是蓝牙协议栈中的一层,负责处理链路层的连接管理。LMP_SUPERVISION_TIMEOUT PDU是LMP层用于更改链路监督超时值的一个协议数据单元。当一方设备希望更改连接的链路监督超时值时,它会发送这个PDU给另一方设备。
HCI(主机控制器接口,Host Controller Interface)是蓝牙协议栈中用于主机和蓝牙控制器之间通信的接口。当外设接收到LMP_SUPERVISION_TIMEOUT PDU并成功更改了链路监督超时值时,它会通过HCI层向主机发送一个HCI_Link_Supervision_Timeout_Changed事件。这个事件通知主机链路监督超时值已经被更改,并可能包含新的超时值信息。
在蓝牙通信中,数据的安全性至关重要,尤其是涉及到一些个人隐私信息、敏感业务数据等的传输场景。通过设置连接加密及终止加密的操作流程,能够让蓝牙设备之间灵活地根据实际需求来保障数据安全。无论是开启加密以防止数据被窃取、篡改,还是在合适的情况下终止加密以减少不必要的资源消耗、提高传输效率等,都为蓝牙通信在不同应用场景下的数据安全管理提供了标准化、规范化的操作方式,确保蓝牙连接既能满足安全需求又能兼顾实际使用的便利性和效率。


“Set Connection Encryption”过程涉及主机通过HCI命令来设置蓝牙连接的加密状态。这个过程包括发送加密命令、协商加密模式和密钥大小、启动加密以及(如果需要)终止加密等步骤。在加密过程中,需要特别注意密钥的管理和命令的响应情况。
更改连接链路密钥在蓝牙通信安全管理方面有着重要意义。随着蓝牙技术应用场景日益广泛,涉及的数据敏感性不断提高,例如在传输个人健康数据(如智能穿戴设备与手机的连接)、金融支付信息(如支持蓝牙支付的设备与终端连接)等情况下,定期或者按需更改链路密钥可以增强对中间人攻击、密钥破解等安全威胁的防范能力。及时更新密钥能够让蓝牙连接持续保持较高的安全等级,确保数据在传输过程中的保密性、完整性以及设备间认证的可靠性,更好地保护用户的隐私和数据安全,提升用户对蓝牙设备及相关应用的信任度。
中央设备的主机(主机A)可以使用HCI_Change_Connection_Link_Key命令来更改连接链路密钥。系统会生成一个新的链路密钥,并且所有相关主机(这里涉及的通信双方主机,包括中心设备的 Host A 以及与之连接的其他设备对应的主机等)都会收到这个新链路密钥的通知。

在这个步骤中,中央设备(通常是蓝牙设备网络中的管理者或控制者)通过发送一个特定的命令给其蓝牙硬件接口(HCI),来请求更改与某个从设备(Slave)之间的连接链路密钥。这个命令触发了一个过程,该过程生成一个新的、随机的链路密钥,用于加密和解密两个设备之间的通信。
一旦新的链路密钥生成,中央设备会将其存储在自己的内存中,并且通常会通过某种形式的通信(可能是蓝牙本身,也可能是其他通信手段)将这个新密钥安全地发送给从设备。这样,两个设备就可以使用这个新的链路密钥来加密它们之间的后续通信,从而增强安全性。
此外,如果网络中有其他主机或设备需要知道这个新的链路密钥(例如,为了监控或管理目的),它们也会被相应地通知。这确保了网络中的所有相关方都能保持同步,并使用最新的安全密钥进行通信。
请注意,这个过程的具体实现可能会因不同的蓝牙设备和软件栈而有所不同,但基本概念和步骤是相似的。在实际应用中,更改链路密钥的操作可能需要管理员权限,并且应该谨慎进行,以避免破坏现有的通信链路或引入安全风险。
在蓝牙通信中,连接链路密钥(link key)是保障连接安全的重要元素。当需要更新这个链路密钥时,为了确保数据加密的连贯性和安全性,采用了带有加密暂停和恢复的操作方式。这一操作的主要目的是在更新链路密钥的同时,避免数据在过渡阶段出现安全漏洞,并且能够顺利地切换到基于新链路密钥的加密机制。

通过这个过程,蓝牙设备可以在不中断通信的情况下,安全地更换连接链路密钥,从而提高通信的安全性。
在蓝牙通信的安全机制中,链路密钥(Link Key)起着至关重要的作用,它用于对设备间传输的数据进行加密等安全相关操作,保障通信内容不被未授权的第三方获取或篡改。这里涉及到两种链路密钥,分别是半永久链路密钥和临时性链路密钥,并且通过 HCI_Link_Key_Selection 命令来实现它们之间的切换操作,而这种切换操作是在特定条件下进行的,即当至少有一个设备不支持加密暂停与恢复(Encryption Pause and Resume)功能时,需要按照以下步骤来进行链路密钥的变更。
当蓝牙设备不支持加密暂停和恢复功能时,主机可以使用HCI_Link_Key_Selection命令将当前使用的链路密钥从半永久链路密钥更改为临时链路密钥。这个步骤通常是为了提高安全性,因为临时链路密钥的使用可以减少长时间使用同一密钥所带来的安全风险。

HCI_Link_Key_Selection命令来请求从半永久链路密钥切换到临时链路密钥。该命令包含指示要使用临时链路密钥的参数。HCI_Command_Status事件,确认HCI_Link_Key_Selection命令已被成功发送。LMP_TEMP_RAND和LMP_TEMP_KEY消息可能用于生成和交换临时随机数(用于生成临时链路密钥)。LMP_AU_RAND和LMP_SRES(认证随机数和短期响应)可能用于认证过程。LMP_ENCRYPTION_MODE_REQ (off)消息来关闭加密。LMP_ACCEPTED确认后,发送LMP_STOP_ENCRYPTION_REQ消息来停止加密。LMP_ACCEPTED后,发送LMP_ENCRYPTION_MODE_REQ (on)消息来请求重新启用加密。LMP_ENCRYPTION_KEY_SIZE_REQ和LMP_START_ENCRYPTION_REQ消息来设置加密密钥大小并启动加密。HCI_Link_Key_Type_Changed事件来通知上层应用程序链路密钥类型已经改变。在某些情况下,主机可能需要将链路密钥从临时链路密钥切换回半永久链路密钥。可能是为了恢复与不支持临时链路密钥的设备的兼容性,或者是因为临时链路密钥的使用期限已到。

HCI_Link_Key_Selection命令来请求从临时链路密钥切换回半永久链路密钥。该命令包含指示要使用半永久链路密钥的参数。HCI_Command_Status事件,确认HCI_Link_Key_Selection命令已被成功发送。LMP_USE_SEMI_PERMANENT_KEY消息用于指示将使用半永久链路密钥。LMP_ACCEPTED消息来确认接受该请求。LMP_ENCRYPTION_MODE_REQ (off)消息来关闭加密。LMP_ACCEPTED确认后,发送LMP_STOP_ENCRYPTION_REQ消息来停止加密。LMP_ACCEPTED后,发送LMP_ENCRYPTION_MODE_REQ (on)消息来请求重新启用加密。LMP_ENCRYPTION_KEY_SIZE_REQ和LMP_START_ENCRYPTION_REQ消息来设置加密密钥大小并启动加密。HCI_Link_Key_Type_Changed事件来通知上层应用程序链路密钥类型已经改变。HCI_Link_Key_Selection命令的确切参数和格式可能因蓝牙规范版本和特定实现而异。因此,请查阅相关蓝牙规范或设备文档以获取详细信息。
HCI_Read_Remote_Supported_Features命令)在蓝牙通信中,了解远程设备所支持的功能特性是非常重要的,有助于实现设备间更好的兼容性以及充分利用双方具备的各种功能来进行高效通信。通过使用 HCI_Read_Remote_Supported_Features 命令,就可以实现读取远程设备所支持的链路管理协议(LMP)相关功能的操作,以此来知晓远程设备在蓝牙通信方面能够支持哪些具体的能力,比如是否支持特定的加密模式、不同的连接类型或者某些高级的链路管理功能等。
主机作为发起方,希望获取与之通信的远程设备所支持的功能情况,这一请求的出发点是为了后续能够根据远程设备的能力来调整自身的通信策略、选择合适的连接方式、启用匹配的功能等,以实现与远程设备之间最优的通信效果。例如,如果主机知道远程设备支持某种高效的加密模式,那么它就可以在后续建立连接或者数据传输过程中优先选择使用该加密模式,既能保障通信安全又能提升通信效率;或者若得知远程设备支持特定的高级链路管理功能,主机就可以利用这些功能来更好地维护和管理通信链路。

HCI_Read_Remote_Supported_Features命令来请求Device B的支持特性。这个命令包含了Device B的蓝牙地址(BD_ADDR),以指定要查询的设备。HCI_Command_Status事件,确认HCI_Read_Remote_Supported_Features命令已经被成功发送并正在处理中。LMP_FEATURES_REQ消息给Device B,请求其支持的特性。LMP_FEATURES_RES消息返回其支持的特性给Host A。HCI_Read_Remote_Supported_Features_Complete事件,该事件包含了Device B的支持特性。这个事件是由Host A的蓝牙控制器生成的,作为对HCI_Read_Remote_Supported_Features命令的响应。通过HCI_Read_Remote_Supported_Features命令和后续的LMP消息交换,Host A能够成功地获取到Device B的支持特性。这些信息对于后续的蓝牙通信配置和优化是非常重要的。
在蓝牙通信体系中,除了常规的一些链路管理协议(LMP)功能外,还存在扩展功能,这些扩展功能能够进一步丰富和增强蓝牙设备间的通信能力与交互方式。通过使用 HCI_Read_Remote_Extended_Features 命令,主机(Host)便能够读取远程设备的扩展 LMP 功能,这有助于更全面地了解远程设备的能力情况,从而在后续建立连接、配置通信参数以及启用各类应用场景时,可以充分利用双方所具备的扩展功能,实现更高效、更优化的蓝牙通信。
与读取常规支持功能类似,这里也存在一种效率优化机制,即如果之前已经获取过远程设备的扩展功能信息,那么控制器(Controller)有可能直接返回这些已有信息,而无需再次发送链路管理协议数据单元(LMP PDUs)进行重新查询,以此节省通信资源和时间,提高操作效率。
使用HCI_Read_Remote_Extended_Features命令来读取远程设备的扩展特性的过程与读取标准LMP特性的过程类似,但专注于获取远程设备支持的更高级或额外的功能。

HCI_Read_Remote_Extended_Features命令来请求Device B的扩展特性。这个命令通常包含远程设备的蓝牙地址(BD_ADDR)和一个页面编号(Page Number),页面编号用于指定要读取的特性页(因为扩展特性可能分为多个页面存储)。HCI_Command_Status事件,确认HCI_Read_Remote_Extended_Features命令已经被成功发送并正在处理中。LMP_FEATURES_REQ_EXT消息给Device B,请求其扩展特性。LMP_FEATURES_RES_EXT消息返回其扩展特性给Host A。HCI_Read_Remote_Extended_Features_Complete事件,该事件包含了Device B的扩展特性。这个事件是由Host A的蓝牙控制器生成的,作为对HCI_Read_Remote_Extended_Features命令的响应。通过HCI_Read_Remote_Extended_Features命令和后续的LMP消息交换,Host A能够成功地获取到Device B的扩展特性。这些信息对于了解远程设备的高级功能和优化蓝牙通信配置是非常重要的。
在蓝牙通信的环境中,时钟信息起着重要作用,其中时钟偏移(Clock Offset)是一个关键要素。通过使用 HCI_Read_Clock_Offset 命令,扮演中央设备(Central)角色的设备能够读取外围设备(Peripheral)的时钟偏移值。获取这个时钟偏移值有很重要的实际用途,比如它可以被用来在后续的连接尝试中加快寻呼(paging)流程。寻呼流程通常涉及设备去搜索并建立与其他设备的连接,知晓时钟偏移能让中央设备更精准地把握时机,减少不必要的等待和搜索时间,从而更高效地与外围设备重新建立连接,优化整个蓝牙通信链路的连接效率。
中央设备 发起这一请求,主要是出于对后续可能的连接操作进行优化的考虑。例如,当预计在不久后要与外围设备再次建立连接,或者处于一个频繁连接、断开又重连的通信场景中,提前获取外围设备的时钟偏移值,就能利用该信息在后续寻呼过程中节省时间,提高连接效率,所以会启动对时钟偏移值的读取流程。

HCI_Read_Clock_Offset命令来请求外围设备(Device B,或称为Host B的蓝牙模块)的时钟偏移。这个命令包含了外围设备的蓝牙地址(BD_ADDR)和连接句柄(Connection Handle),以指定要查询的设备和当前的连接。HCI_Command_Status事件,确认HCI_Read_Clock_Offset命令已经被成功发送并正在处理中。LMP_CLKOFFSET_REQ消息给外围设备,请求其时钟偏移。LMP_CLKOFFSET_RES消息返回其时钟偏移给中央设备。HCI_Read_Clock_Offset_Complete事件,该事件包含了外围设备的时钟偏移。这个事件是由中央设备的蓝牙控制器生成的,作为对HCI_Read_Clock_Offset命令的响应。外围设备 发起这一请求可能也是出于自身对于时间同步或者优化后续与中央设备连接等方面的需求。比如,外围设备希望自身能更好地与中央设备的时钟进行同步,以便在后续的数据传输等操作中能更精准地配合,或者同样是为了在后续可能的连接场景中利用时钟偏移信息来提升连接效率等,所以启动对中央设备时钟偏移值的读取流程。

外围设备(通过 Host A 发起操作)向中央设备(通过 Host B 关联的对应设备)请求读取时钟偏移值的情况,与中央设备发起请求有所不同,其交互过程相对更简洁一些。
HCI_Read_Clock_Offset命令。HCI_Command_Status事件和HCI_Read_Clock_Offset_Complete事件,而不发送任何LMP PDUs(协议数据单元)。通过HCI_Read_Clock_Offset命令和后续的LMP消息交换(或由控制器直接返回的事件),中央设备能够成功地获取到外围设备的时钟偏移。这些信息对于优化蓝牙连接建立过程和提高通信效率是非常重要的。
在蓝牙通信中,设备之间的角色划分(如中央设备 Central 和外围设备 Peripheral)对于通信的组织和管理起着关键作用。有时候,在已经建立加密链路的情况下,出于各种需求(例如优化通信效率、改变通信模式或者适应不同应用场景等),需要对设备的角色进行切换。HCI_Switch_Role命令可用于明确地将本地设备与指定设备之间的当前中央设备(Central)/外围设备(Peripheral)角色进行切换。中央设备的主机(A)向一个外围设备请求角色切换。这个过程首先会暂停加密,然后发送切换请求,外围设备将以槽偏移量和接受响应作为回应。角色切换是通过进行时分双工(TDD)切换和微微网(piconet)切换来完成的。

在角色切换过程中,当加密被暂停后,一旦角色切换完成,加密也会被恢复。最终,在双方都会发送一个HCI_Role_Change事件,以通知主机设备角色已经成功切换。
Host A通过LMA(链路管理层A)作为中央设备(Central)与LMB(链路管理层B)作为外围设备(Peripheral)的Host B进行通信。Host A发送HCI_Switch_Role命令来请求与Host B进行角色切换。LMA和LMB分别发送LMP_PAUSE_ENCRYPTION_REQ请求来暂停加密。注意:在实际操作中,可能只会发送一个暂停加密的请求,然后由接收方确认并执行,但图中为了清晰展示了双方都发送了请求。LMA发送LMP_STOP_ENCRYPTION_REQ来完全停止加密。LMB发送LMP_ACCEPTED表示接受暂停加密请求。LMP_SLOT_OFFSET),并通过LMP_ACCEPTED消息确认接受切换请求。LMA和LMB分别更新它们的角色,LMA变为外围设备,LMB变为中央设备。LMA和LMB分别发送LMP_RESUME_ENCRYPTION_REQ和LMP_START_ENCRYPTION_REQ来恢复加密。注意:这里使用了“恢复”和“开始”两个术语,但实际上它们都是指重新建立加密连接。在某些实现中,可能只需要一个请求来指示加密的重新建立。HCI_Encryption_Key_Refresh_Complete事件来表示加密密钥刷新已完成。这是加密恢复过程的一部分,确保新的加密密钥被正确应用。Host A和Host B分别接收HCI_Role_Change事件,通知它们角色已经成功切换。通过这个过程,中央设备和外围设备可以在保持通信连续性的同时,灵活地切换它们的角色。这对于动态变化的蓝牙网络环境来说是非常重要的,因为它允许设备根据当前的需求和资源状况来优化它们的通信行为。
在蓝牙通信的安全保障机制中,加密密钥(encryption key)起着核心作用,它决定了数据在传输过程中的加密方式以及安全性程度。随着通信的持续进行、设备所处环境的变化或者基于一定的安全策略要求,需要定期对加密密钥进行更新(刷新),以维持较高的安全性水平,防止因密钥长时间使用可能导致的安全漏洞被利用等情况。“HCI_Refresh_Encryption_Key” 命令就是供中央设备的主机(Central's Host)使用的一个工具,通过它可以显式地暂停和恢复加密过程,进而实现加密密钥的刷新操作。在完成加密恢复后,两端设备会发送 “HCI_Encryption_Key_Refresh_Complete” 事件来告知整个通信链路加密密钥刷新工作已经完成,同时,当参与通信的双方设备都支持安全连接(Secure Connections)时,加密密钥刷新流程会遵循特定的顺序开展。

HCI_Refresh_Encryption_Key命令来请求刷新与Host B(作为外围设备)之间的加密密钥。LMP_PAUSE_ENCRYPTION_REQ消息给LM-B,请求暂停加密。LMP_PAUSE_ENCRYPTION_REQ消息给LM-A(尽管在实际协议中,这可能是一个单独的确认消息,但为简化流程,这里用相同的消息表示)。LMP_STOP_ENCRYPTION_REQ消息来明确表示加密已被暂停。LMP_START_ENCRYPTION_REQ消息给LM-B,请求恢复加密并同时使用新密钥。LMP_ACCEPTED消息进行确认。HCI_Encryption_Key_Refresh_Complete事件通知。通过这个流程,两个蓝牙设备可以在不中断通信的情况下,安全地它们的刷新加密密钥。这对于需要长期保持安全通信的蓝牙应用场景来说是非常重要的。

当两个蓝牙设备都支持Secure Connections时,刷新加密密钥使用AES-CCM(高级加密标准计数器模式)作为加密算法。AES-CCM是一种结合了认证和加密的模式,广泛应用于蓝牙等无线通信协议中。
HCI_Refresh_Encryption_Key命令来请求刷新与Host B(作为外围设备)之间的加密密钥。LMP_PAUSE_ENCRYPTION_AES_REQ消息(这里特别指出了AES,以区别于其他可能的加密算法)给LM-B,请求暂停当前使用AES-CCM加密的通信。LMP_PAUSE_ENCRYPTION_REQ消息(尽管这里未特别指出AES,但在上下文中应理解为使用相同的加密算法)给LM-A,作为对暂停请求的确认。LMP_STOP_ENCRYPTION_REQ消息来明确表示加密已被暂停。LMP_START_ENCRYPTION_REQ消息给LM-B,请求恢复加密并同时使用新密钥。这个请求中包含了新密钥的相关信息,以便LM-B能够验证并接受新密钥。LMP_ACCEPTED消息进行确认。HCI_Encryption_Key_Refresh_Complete事件通知来确认加密密钥刷新过程的完成。通过这个流程,两个支持Secure Connections的蓝牙设备可以在保持通信连续性的同时,安全地刷新它们的加密密钥。这对于维护长期安全通信至关重要。
在蓝牙通信环境中,了解与之通信的远程设备(remote device)的版本信息是很有必要的,这有助于判断设备间的兼容性、确认对方设备所具备的功能特性以及为后续的通信交互提供合适的配置依据等。通过 “HCI_Read_Remote_Version_Information” 命令,本地设备就能够读取远程设备的版本信息。

HCI_Read_Remote_Version_Information命令给其控制器(LM-A),请求读取Host B(作为远程设备)的版本信息。HCI_Command_Status事件,确认命令已被接收并正在处理。LMP_VERSION_REQ消息给LM-B(Host B的控制器)。LMP_VERSION_REQ消息后,会检查自己的版本信息,并发送LMP_VERSION_RES消息作为响应。LMP_VERSION_RES消息后,会将远程版本信息传递给Host A。HCI_Read_Remote_Version_Information_Complete事件,这个事件包含了远程设备的完整版本信息。通过这个流程,Host A能够安全地获取Host B的蓝牙版本信息,这对于后续的通信和兼容性检查至关重要。
在蓝牙通信中,服务质量(Quality of Service,QoS)参数的设定与通知是保障通信能够按照期望的性能和质量标准进行的重要环节。

上图展示了如何使用HCI_Flow_Specification命令来设置蓝牙连接的服务质量(QoS)和流规范。这个过程涉及到了主机控制器接口(HCI)和链路管理层(LMP)之间的消息交换,以确保数据传输的质量和效率。
HCI_Flow_Specification命令给其控制器(LM-A),通知LM-A关于期望的QoS参数和流规范。这些参数可能包括服务类型、令牌速率、最大传输单元(MTU)大小、服务数据单元(SDU)间隔等。HCI_Command_Status事件,确认命令已被接收并正在处理。HCI_Flow_Specification_Complete事件(针对Tx方向),表明传输方向的QoS设置已完成。HCI_Flow_Specification命令给LM-A,这次是通知关于接收(Rx)方向的QoS参数。HCI_Flow_Specification_Complete事件(针对Rx方向)。LMP_QUALITY_OF_SERVICE_REQ消息给LM-B(作为外围设备的控制器),请求与远程设备建立相应的QoS。LMP_ACCEPTED消息作为响应。HCI_Flow_Specification_Complete事件来确认接收方向的QoS设置也已完成。通过这个流程,Host A能够与其远程设备(Host B)建立和维护所需的QoS和流规范,从而确保数据传输的可靠性和效率。
在蓝牙通信中,设备可以扮演中心设备(Central)或外围设备(Peripheral)的角色。中心设备通常是发起连接请求的设备,而外围设备则是响应这些请求的设备。然而,在某些情况下,可能需要更改这些角色,这就是HCI_Switch_Role命令的用武之地。HCI_Switch_Role 命令可用于明确地将本地设备与指定设备之间的当前中心设备(Central)/外围设备(Peripheral)角色进行切换。
中心设备的主机发送角色切换请求,外围设备将使用槽偏移量和接受状态进行响应。

一旦LMP_ACCEPTED消息被发送,两个设备就达成了进行角色切换的协议。接下来,它们将执行实际的角色切换过程,可能包括调整通信参数、重新分配微微网成员关系等。最后,两个设备都会向它们各自的主机发送一个HCI_Role_Change事件,通知角色已经成功切换。
外围设备的主机发送槽偏移量和角色切换请求,中心设备将使用 LMP_ACCEPTED 协议数据单元(PDU)进行响应。

LMP_SLOT_OFFSET 和 LMP_SWITCH_REQ 这两个消息格式发送给中心设备。LMP协议规定了这样的消息格式用于在链路间传递角色切换相关的关键信息,其中 LMP_SWITCH_REQ 明确表明了是角色切换请求,而 LMP_SLOT_OFFSET 所携带的槽位偏移信息对于后续双方在角色切换后进行时分双工(TDD)通信机制调整等方面有着重要作用,有助于协调通信时间片分配等操作。一旦LMP_ACCEPTED消息被发送,两个设备就达成了进行角色切换的协议。接下来,它们将执行实际的角色切换过程,可能包括调整通信参数、重新分配微微网成员关系等。最后,两个设备都会向它们各自的主机发送一个HCI_Role_Change事件,通知角色已经成功切换。这个事件标志着角色切换过程的完成。
通过执行时分双工(TDD)切换和微微网(piconet)切换来完成角色切换。最后,双方都会发送一个 HCI_Role_Change 事件。

注:
槽位可用性掩码(SAM)的设置可以由链路管理器(Link Manager)发起,其触发目的主要是为了实现多无线系统(MWS)共存或者进行拓扑管理。例如,在一个设备同时存在蓝牙连接以及其他无线通信连接(如 Wi-Fi 等)的场景下,为了让这些不同的无线系统能够和谐共处、避免相互干扰并且合理利用通信资源,就需要通过设置 SAM 来调整蓝牙通信中的槽位可用性情况,从而协调各无线系统间的通信时间分配等。同样,在对蓝牙网络自身的拓扑结构(比如微微网中设备连接关系、主从角色分布等情况)进行管理和优化时,也可能需要通过 SAM 设置来调整通信资源的分配方式。
除了链路管理器主动发起外,SAM 的设置还可以通过HC命令来触发,具体的触发方式和相关命令交互参考下图 。

设备A通过HCI发送一系列命令来配置MWS传输层、信号、外部帧配置和MWS模式配置。
通过实时信号触发(来自共存逻辑接口):另外,来自共存逻辑接口(Coexistence Logical Interface)的实时信号,比如 MWS_PATTERN_Index(多无线系统模式索引,可能用于标识不同的多无线系统共存模式)、FRAME_SYNC(帧同步信号,用于协调不同无线系统间的帧同步情况等)等信号,也能够触发 SAM 的设置。这些实时信号可以为设备提供当前多无线系统运行环境下的实时状态信息,根据这些信息设备可以动态地调整 SAM,以更好地适应无线通信环境的变化。
在这一步中,设备A的链路管理器负责将SAM的配置发送给设备B。之后,设备A会选择一个SAM映射,这个映射定义了哪些时隙是可用的,哪些是不可用的。这个选择是基于当前的通信需求、MWS共存的要求以及可能的微微网时钟调整。

SAM配置保证通信双方能顺利更新槽位使用规则,适应新的通信需求。

这些步骤共同确保了设备A和设备B能够正确地应用新的SAM配置,以实现优化的通信性能和避免干扰。
在蓝牙通信中,中心设备(Central)和外围设备(Peripheral)的链路管理器(Link Manager)有可能会同时发起相同的链路管理协议(LMP,Link Manager Protocol)事务,进而产生冲突的情况。这里以请求嗅探模式(Sniff Mode)为例,展示从主机发起请求到链路层处理以及最终结果反馈的整个流程,说明事务冲突时的表现及相应处理结果。

当两个设备的链路管理器几乎同时尝试发起相同的LMP事务时可能发生的冲突情况。这种冲突可能导致事务被拒绝,并需要实现适当的冲突解决机制来确保设备能够成功地进入所需的连接模式。