2.4 蓝牙协议子集及应用规范
世界蓝牙组织(SIG)已经确定了一些应用模型,每个应用模型都有一个协议子集。它定义了支持特定应用模型的协议和功能。如果不同厂商的不同设备遵循相同的蓝牙SIG应用规范,那么在应用于该特定服务和使用环境时,这些设备之间就可望实现互连。
一个协议子集定义了用于实现某种功能的一些消息和进程。有些功能是强制的,另一些是可选的,还有一些是有条件的。所有定义的功能都是强制过程的,即要实现某一种功能就必须遵循一种特定的方式。这保证了同样的功能对每个设备来说都是以相同方式工作,而与制造商无关。
有4个通用的协议子集可用于各种不同的应用模型:通用接入协议子集(GAP),串口协议子集(SPP),服务发现应用协议子集(SDAP)及通用对象交换协议子集(GOEP)。
2.4.1 通用接入协议子集
通用接入协议子集(GAP)构成了所有蓝牙协议子集的一个公共基础,因此也为蓝牙传输协议组的通用互操作应用提供了基础。GAP的一个最重要的贡献是它定义了一套标准的术语。除了公共的术语之外,GAP的大部分内容是对建立蓝牙连接所需的必要过程进行的定义。这些定义包括设备和名字的发现、查询过程、匹配和绑定以及链路、信道和连接的建立。对于上述的所有考虑,GAP提供了通用的和标准的过程,在某些情况下,给出了流程图。定义基本的通信操作是非常重要的:如果没有设备之间基本互操作通信方法的规范定义,其他的协议子集就无法实现。
GAP主要包含三项内容:词典、连接和个性化。词典汇集了所有术语和术语的定义。这些术语既出现在核心规范中,也出现在了协议子集中,词典为术语在规范中的清晰使用提供了依据。连接包含了设备为与其他设备建立或断开连接、鉴权或不鉴权而需要完成的操作。个性化包括了对蓝牙设备进行识别和定制的内容,例如使用友好的用户名称和PIN。对于连接和个性化这两项内容,只需要GAP提供的术语就可以在用户接口层(UI)显示。
1.连接模式
一个设备可以进入查询扫描模式或寻呼扫描模式,既可以被其他发送查询消息的设备发现,也可以通过发送寻呼消息与其他的设备建立连接。基带规范没有说明设备执行查询扫描和寻呼扫描的条件,因此规范也没有规定什么时候设备允许自己被发现或被连接。GAP定义了设备建立通信的策略,并将它们分类成发现模式、连接模式和匹配模式。
1)发现模式
当一个蓝牙设备允许自己被其他的蓝牙设备发现时,这个设备就被称为是可发现的。特别地,一个可发现的设备会定期执行查询扫描,并响应其他的查询设备发来的查询消息。设备的发现有3个等级:
(1)完全可发现模式。在这个可发现的等级中,一个设备使用通用查询接入码进入查询扫描,而通用查询接入码(GIAC)是用48比特蓝牙地址中特别保留的LAP“0x9E8B33”产生的查询接入码(IAC)。在这种模式中一个设备响应所有的查询,这样它总能被所有的其他正在查询的设备发现。
(2)有限可发现模式。在这个可发现的等级中,一个设备使用有限查询接入码进入查询扫描,而这个有限查询接入码(LIAC)使用48比特蓝牙地址中特别保留的LAP“0x9E8B00”产生的查询接入码(IAC)。在这种模式中,一个设备只响应包含LIAC信息的查询,这样它只能被使用LIAC进行查询的设备发现。
(3)不可发现模式。在这个发现等级中,一个设备不响应任何查询,所以它不能被其他的查询设备发现。说一个设备是可发现的,它必须一直处在完全可发现模式:即使它处在有限可发现模式也不能说是可发现的。设备可以同时处于有限可发现模式和完全可发现模式,也可以顺序进入有限可发现模式和完全可发现模式。一个可发现的设备必须以至少每2.56s一次的频率进入查询扫描,查询扫描的持续时间不少于10.625ms。
2)连接模式
当一个蓝牙设备允许自己与其他的蓝牙设备建立蓝牙链路时,这个设备被称为是可连接的。特别地,一个可连接的设备能定期执行寻呼扫描,并响应其他寻呼设备发来的寻呼消息。一个不可连接的设备不响应寻呼消息,所以不能与其他的设备建立链路。可发现模式和连接模式可以彼此独立地设置,然而一个仅仅是可发现却不可连接的设备并不会经常用到。
3)匹配模式
一个蓝牙设备允许自己被其他的蓝牙设备鉴权认证时,这个设备被称为是可匹配的,这意味着该设备可以在一个鉴权事务中承担申请者的角色。此外,一个可匹配的设备除了要接收LMP_au_rand PDU之外,还必须接收从校验设备发出的包含在LMP_in_rand PDU中的初始鉴权请求信息。一个不可匹配的设备用一个LMP_not_accepted PDU来响应LMP_in_rand PDU,表明这个设备不愿意与任何新设备匹配。
2.安全模式
蓝牙设备有三种安全模式。当处于安全模式1时,蓝牙设备不会发起安全进程。当处于安全模式2时,蓝牙设备只有在收到信道建立请求或已经启动信道建立进程之后,才能启动安全进程。安全进程是否启动取决于被请求的信道或服务的安全要求。至少处于安全模式2的蓝牙设备必须以授权、鉴权和加密来区分安全要求。
当处于安全模式3时,蓝牙设备在发送链路设置完成的消息之前启动安全进程。处于安全模式3的蓝牙设备可能会根据内部设置拒绝连接请求。
3.空闲模式过程
连接和安全模式与外界激励引起的行为有关,这些到来的外部激励(例如查询、寻呼等)可以使蓝牙设备再次激活,而空闲模式过程与设备发送出去的激励信号有关。这些过程包括一般查询和有限查询、名字和设备发现及绑定等。
通用查询和有限查询分别用来发现处于完全可发现模式和有限可发现模式的设备。设备发现过程返回可发现和可连接设备的友好用户名。对名字的请求仅与这两个设备的LMP层有关,而与主机无关。
绑定是一个为了在设备间建立链路密钥并将之存储以备将来使用而执行的一个匹配过程。在一般绑定中,绑定与其他设备的通信,如访问高层服务相结合。在专用绑定中,一个设备将另一个可匹配设备与这两个设备之间创建的一个绑定联系起来,而不涉及高层事务。
2.4.2 串口协议子集
1.协议概况
1)SPP应用规范协议模型
图2.8中端口仿真是一个模拟串行端口和给应用层提供API的实体。两边的应用是典型的继承性应用,能通过仿真的串行电缆进行通信。但是,继承性应用并不清楚设置仿真串行电缆的蓝牙进程,它们可能需要在链路双方都采用蓝牙规范的一个辅助性应用的协助。
图2.8 SPP应用规范协议模型
2)SPP包含的作用
在两个设备上设置虚拟串口,并用蓝牙连接模拟两个设备之间的串行电缆。
任何继承性应用可以运行在任一设备上,使用虚拟串口,好像在两个设备间有真正的电缆连接一样。这一应用规范支持一个时隙数据包,仅需要一个时隙的分组,这样可以确保最大为128kbps的数据速率,对更高速率的支持作为可选要求。
虽然蓝牙技术标准描述了一段时间内仅支持一个串口连接,因此可知,它也仅支持点对点的配置。然而,这不妨碍在一设备上同时运行多个SPP,以支持多重连接。在这种情况下,设备可同时成为发起者和接收者。
3)SPP基础
- 为了运行这一PROFLIE,一些安全性能例如授权、鉴权以及加密是可选的。然而,一个设备被对方要求,那他就必须支持相应的安全进程。如果需要采用安全功能的话,则在连接建立阶段两个设备就结对。
- 在串口应用规范中没有明确规定使用捆绑,故其对捆绑的支持是可选的。
- 当发起者开始建立链路时,为了建立模拟串行电缆连接要执行业务发现进程。
- 在这一应用规范中没有固定的主从设备的角色,双方被认为是对等的。
- RFCOMM用于传输用户数据、Modem控制信号和配置命令。
2.应用层
表2.3显示了要求的三种应用级程序。
表2.3 三种应用级程序
1)建立链路/创建虚拟串行连接
这一过程描述了与远端设备的虚串口建立连接所需的步骤:
(1)使用SDP提交一个查询,以找到在远端设备上所要应用的RFCOMM服务器的通道号。如果包含浏览功能,用户可以在其对等设备可用的端口或服务中进行选择。如果用户已知要使用哪项服务,那么只需使用与该项服务关联的服务类别D进行参数查找。
(2)作为可选项,远端设备可以要求鉴权和密码认证。
(3)请求与远端RFCOMM实体建立一条新的L2CAP信道。
(4)在该L2CAP信道上启动一个RFCOMM回话进程。
(5)使用服务器信道号在该RFCOMM回话进程上建立一个新的数据链路连接。
当此进程完成的时候,此虚拟电缆连接即可供两个设备上的应用来进行通信。如果当建立新数据链路连接时,两设备之间已经存在RFCOMM进程,那么新连接将建立在已有的RFCOMM进程上,在这种情况下,步骤(3)和步骤(4)就不需要了。
2)接收链路/建立虚拟串行连接
这一进程要求参与下面的步骤:
(1)如果远端设备需要,就要参鉴权,或进一步采用加密。
(2)接收来自L2CAP的一个新的信道建立指示。
(3)在该信道上接收一个RFCOMM会话进程的建立。
(4)在该RFCOMM会话进程上接受一个新的数据链路连接。如果请求虚拟串口的用户需要安全服务,并且这些进程还没有执行,则可能会触发一个本地请求来鉴权远端设备并启用加密。
注:当已经和远端设备建立RFCOMM会话进程,步骤(1)和步骤(4)可以单独存在。
3)在本地SDP数据库注册服务记录
这一进程提到虚拟串口服务记录在SDP数据库中的注册,这暗示了服务数据库的存在和其响应查询的能力。所有通过RFCOMM可用的服务/应用都必须有一个SDP服务记录,其包括获取相应服务/应用所需的参数。为了支持运行在虚拟串口上的继承性应用,服务注册由一个可以协助用户设置端口的辅助应用来完成。
3.功率模式和链路丢失处理
通过虚拟串口连接设备的功率需求可能会有很大差别,因此在SDP中没有要求使用功率节省模式。不过,可能的话禁止使用低功耗模式。如果使用侦听、休眠和保持模式,RFCOMM数据链路和L2CAP信道就都不释放。如果检测到链路丢失,RFCOMM就被认为已关闭。如果在高层可再继续通信之前,必须先执行RFCOMM初始化进程。
2.4.3 服务发现应用协议子集
服务发现是大多数蓝牙应用的关键组成部分。几乎所有的协议子集都包含了服务发现的内容。与GAP一样,服务发现应用协议子集(SDAP)提供了一个通用且标准的方法,使用蓝牙协议栈来完成服务发现。与大多数其他协议子集不同的是,SDAP描述了一个标准的服务发现应用模型,还定义了抽象的、类似于应用程序接口(API)的服务元语。
在面向应用的协议子集中,例如文件传送和LAN接入协议子集等,SDAP是独一无二的。为了支持特定的应用情况,其他的那些协议子集所描述的是在进行联合工作时,在两个(或多个)设备上运行的用户级应用所需要补充的内容。而SDAP应用只需要在一个设备中存在。SDAP应用与设备协议栈中的SDP层进行交互,SDP层向其他设备的一个或多个SDP层发起SDP事务,以便了解其他设备所能提供的服务。从其他设备返回的响应中,服务发现应用可以得到结果,并将这个结果提供给发起事务的设备用户。
在非蓝牙环境中,服务发现通常是利用服务的广播查询或定位服务地址目录的查询来完成。在后一种查询方式中,广播一律是单向的,只是从微微网的主控设备到从属设备。此外,广播传输是不可恢复的,因为广播传输在出错后无法重传,所以在蓝牙微微网中,服务发现不使用广播方式。同时蓝牙微微网中的服务发现与设备发现是密切相关的。服务发现在完成了鉴权的匹配设备之间进行,并且还要在设备彼此之间已经发现并且建立了蓝牙链路(直到包括了一个L2CAP连接)之后进行。
根据SDAP,参与服务发现的设备可以担任以下角色:①本地设备,该设备实现服务发现应用。它还能实现SDP层的客户端功能。一个本地设备可以发起多个SDP事务。②远程设备,本地设备与远程设备进行联络,以查询服务。一个远程设备能实现SDP层的服务器功能。它响应本地设备发出的SDP事务请求。为了产生响应,远程设备需要显示或隐式地维持一个数据库,这个数据库包含通过远程设备可以提供的服务纪录。
尽管某些设备只能充当本地设备,或只能充当远程设备,一般来讲,这些设备角色是暂时的,只有在两个设备间进行SDP事务处理时才有意义。一个设备可以在不同的时刻,甚至是在相同的时刻,扮演本地和远程设备角色,这取决于设备创建服务查询或响应服务查询的时间。SDAP设备所扮演的角色与基带传输中的主从角色无关,因为基带传输中的主从角色在链路管理层之上是没有意义的。一个本地设备在微微网中可以是主控设备,也可以是从属设备,远程设备也是如此。
SDAP对蓝牙协议栈的需求是直接的。要实现该协议子集,除了使用SDP层以下所有协议层的默认设置之外,不需要做其他的任何改动。特别地,当仅仅是为了完成服务发现这个目的进行连接时,设备彼此之间不需要鉴权,也不需要对蓝牙链路进行加密。SDP事务在设备间的ACL基带链路上传输。在L2CAP层,SDP事务在面向连接的信道中传输,这个信道的配置为尽“最大努力(Best Effort)”传输业务数据。
SDAP协议子集的另一个不同之处是它规定了传输SDP业务的L2CAP信道的拆除条件,因为SDP没有为传送SDP_PDU定义一个会话或传输协议。SDP本身也是一个无连接的协议。为了运行无连接的SDP的请求/响应事务,L2CAP层至少需要在事务持续时期内保持承载事务信息的L2CAP信道。为了有效地利用传输资源,SDP客户端和服务期间的L2CAP信道甚至可以保持更长的时间。从根本上讲,执行一个SDP事务是为了某个应用,因此这个应用应该负责打开一个L2CAP信道,并根据所需的时间维持两个设备之间用于事务处理的L2CAP信道。