在蓝牙设备的交互世界里,当你按下蓝牙键盘的连接键,它如何被电脑发现?当蓝牙鼠标意外断开后,为何能自动重连?当你输入密码时,数据如何避免被窃听?这些看似简单的交互背后,都离不开一个核心协议------GAP(Generic Access Profile,通用访问规范)。
目录
[2.1 可发现模式的选择:有限发现vs通用发现](#2.1 可发现模式的选择:有限发现vs通用发现)
[2.2 开箱即用的优化:首次使用的可发现性设计](#2.2 开箱即用的优化:首次使用的可发现性设计)
[2.3 可发现性与配对的关联:避免不必要的暴露](#2.3 可发现性与配对的关联:避免不必要的暴露)
[2.4 可发现性的模式转换:规范的状态流转](#2.4 可发现性的模式转换:规范的状态流转)
[3.1 可连接性的核心控制:HIDNormallyConnectable属性](#3.1 可连接性的核心控制:HIDNormallyConnectable属性)
[3.2 重连机制:断开后如何自动重逢](#3.2 重连机制:断开后如何自动重逢)
[3.3 连接建立的细节:通道打开顺序](#3.3 连接建立的细节:通道打开顺序)
[3.4 Page Scan模式:影响重连速度的关键](#3.4 Page Scan模式:影响重连速度的关键)
[4.1 核心安全要求:必须支持的安全特性](#4.1 核心安全要求:必须支持的安全特性)
[4.2 配对与绑定:建立长期安全关系](#4.2 配对与绑定:建立长期安全关系)
[4.3 配对关联模型:根据设备能力选择](#4.3 配对关联模型:根据设备能力选择)
[4.4 HID设备的特殊安全要求](#4.4 HID设备的特殊安全要求)
[4.5 向后兼容性:与旧设备的安全交互](#4.5 向后兼容性:与旧设备的安全交互)
[4.6 虚拟电缆与安全性的关联](#4.6 虚拟电缆与安全性的关联)
如果说SDP协议是蓝牙HID设备的身份名片,那么GAP协议就是设备间的社交规则手册。它定义了蓝牙设备如何发现、连接、配对,以及如何保障通信安全,是所有蓝牙应用的基础。本文聚焦GAP协议在蓝牙HID场景中的具体实现,从可发现性、可连接性、安全性三个核心维度,拆解其工作机制、规范要求和实际应用。
一、GAP的核心定位:为什么它是蓝牙交互的底层规则
在深入技术细节前,我们先理清一个关键问题:GAP协议到底解决了什么核心问题?
蓝牙设备的交互过程可以分为三个阶段:"找到彼此"(发现)、"建立联系"(连接)、"安全沟通"(配对与加密)。不同类型的蓝牙设备(如HID设备、音频设备、传感器)虽然功能各异,但这些基础交互流程是相通的。如果每种设备都定义一套自己的发现、连接规则,必然会导致设备间无法兼容------就像不同国家的人使用不同的社交礼仪,见面后无法正常沟通。
GAP协议的核心价值的就是提供一套统一的底层社交规则,让所有蓝牙设备都能遵循相同的方式完成发现、连接和安全验证。对于蓝牙HID设备而言,GAP协议的作用尤为关键:
保证 兼容性:无论键盘、鼠标来自哪个品牌,都能被电脑、平板等主机发现和连接;
优化用户体验:实现"开箱即用"的配对流程、断开后自动重连等便捷功能;
保障数据安全:通过标准化的配对和加密机制,防止按键信息、控制指令被窃听或篡改。
形象地说,GAP协议就像是蓝牙设备的通用社交礼仪,而HID设备则是遵循这套礼仪的特定人群------它们在通用礼仪的基础上,根据自身特点(如低功耗、低延迟需求)制定了一些专属规则,这也是蓝牙HID规范对GAP协议进行补充定义的原因。
值得注意的是,GAP协议并非HID专属,而是蓝牙技术的基础规范,所有蓝牙设备都必须遵循。但在HID场景中,由于涉及人机交互的实时性、安全性要求,GAP的部分规则被赋予了更具体的要求------比如HID设备的可发现模式时长、重连机制的触发条件等。
二、可发现性:蓝牙HID设备如何主动亮相
可发现性(Discoverability)是指设备让其他设备发现自己的能力,这是设备交互的第一步。对于蓝牙HID设备而言,可发现性的设计直接影响用户体验------如果设备难以被发现,用户就需要反复操作,严重影响使用感受。
2.1 可发现模式的选择:有限发现vs通用发现
GAP协议定义了两种可发现模式:有限可发现模式(Limited Discoverable Mode)和通用可发现模式(General Discoverable Mode),蓝牙HID设备需根据使用场景选择合适的模式:
2.1.1 有限可发现模式:默认的临时亮相
大多数蓝牙HID设备(如键盘、鼠标、游戏手柄)默认使用有限可发现模式。这种模式的特点是:
触发方式:通过用户手动操作触发,比如按下设备上的"CONNECT"键、长按配对键;
时间限制:设备仅在有限时间内(通常30秒以上)处于可发现状态,超时后自动退出;
功耗优化:有限时间的可发现状态能有效降低设备功耗,延长电池寿命------这对电池供电的HID设备至关重要。
规范之所以推荐HID设备使用有限可发现模式,主要是为了平衡用户体验和功耗。用户在需要配对时,只需简单操作即可让设备进入可发现状态;配对完成后,设备退出可发现模式,避免持续广播带来的功耗浪费。
2.1.2 通用可发现模式:特殊场景的持续在线
通用可发现模式适用于一些特殊场景的HID设备,比如工业环境中的温度传感器、公共场所的投影设备遥控器等。这些设备的特点是:
安装位置固定且难以触及,无法通过手动操作触发可发现模式;
需要支持多主机连接,比如公共场所的投影设备需要允许不同用户的蓝牙鼠标临时配对。
通用可发现模式的特点是设备持续处于可发现状态,无需用户手动触发。但这种模式会增加设备功耗,因此仅适用于外接电源或对功耗不敏感的HID设备。
2.2 开箱即用的优化:首次使用的可发现性设计
为了提升用户体验,规范特别要求:蓝牙HID设备在首次安装电池(或首次上电)时,应自动进入可发现、可连接、可配对状态,并保持该状态直到完成首次配对(或超时)。这意味着用户拿到新的蓝牙键盘后,只需安装电池,设备就会主动亮相,等待主机发现和配对,无需额外操作------这就是我们常说的开箱即用。
2.3 可发现性与配对的关联:避免不必要的暴露
规范对可发现性和配对能力的关联也做了明确要求:
支持绑定(Bonding)的HID设备,仅在可发现模式下才具备可配对、可绑定能力;
非可发现模式下,设备应拒绝配对和绑定请求------这能有效避免设备被未授权的主机恶意配对,提升安全性;
例外情况:如果设备通过NFC等带外方式触发配对,即使不处于可发现模式,也可具备可绑定能力。
这种设计既保证了设备配对的便捷性,又避免了设备在非必要时暴露配对能力,实现了便捷性和安全性的平衡。
2.4 可发现性的模式转换:规范的状态流转
规范定义了HID设备在不同状态间的转换规则,下图展示了支持绑定的HID设备的典型状态流转:

(注:图中展示了设备在非可发现模式、可发现模式、连接模式之间的转换,其中可发现模式下设备具备可配对、可绑定能力,非可发现模式下仅保留连接能力)

(注:当HIDNormallyConnectable属性为TRUE时,设备在非可发现模式下仍保持可连接状态,方便主机随时重连)
这些状态流转规则确保了设备在不同场景下的行为一致性------比如设备完成配对后,会自动退出可发现模式,但保留可连接能力;用户需要重新配对时,通过手动操作即可再次进入可发现模式。
三、可连接性:蓝牙HID设备如何保持联系
可连接性(Connectability)是指设备接受其他设备连接请求的能力,这是设备持续通信的基础。对于蓝牙HID设备而言,可连接性的设计直接影响连接稳定性和用户体验------比如鼠标断开后能否自动重连、主机能否随时唤醒休眠的键盘。
3.1 可连接性的核心控制:HIDNormallyConnectable属性
HID设备的可连接性主要由SDP记录中的HIDNormallyConnectable属性控制,该属性的取值直接决定了设备在无活动连接时的行为:
属性值为TRUE:设备在无活动连接时,持续处于页面扫描(Page Scan)模式,能够响应主机的连接请求;
属性值为FALSE:设备在无活动连接时,可关闭蓝牙radio或退出Page Scan扫描模式,以节省功耗------此时需要用户通过物理操作(如按键)唤醒设备,才能接受连接请求。
不同类型的HID设备对该属性的设置不同:
蓝牙键盘、鼠标等常用设备:通常将该属性设为TRUE,方便主机随时重连,提升使用便捷性;
低功耗传感器、遥控器等设备:可将该属性设为FALSE,以降低功耗,延长电池寿命。
3.2 重连机制:断开后如何自动重逢
重连机制是HID设备可连接性的核心体现,规范定义了重连的责任划分规则,主要基于SDP记录中的两个属性:HIDReconnectInitiate和HIDNormallyConnectable。

3.2.1 重连责任划分表
|--------------------------|----------------------------|-------------------|--------------|----------------------------------------|
| HIDReconnectInitiate | HIDNormallyConnectable | 主机行为 | 设备行为 | 备注 |
| FALSE | FALSE | 不主动重连 | 不主动重连 | 需用户手动操作重连,HIDVirtualCable属性必须为FALSE |
| FALSE | TRUE | 主动发起重连(Page Scan) | 等待连接 | 主机负责重连,设备持续处于可连接状态 |
| TRUE | FALSE | 等待连接(Page Scan) | 主动发起重连(page) | 设备负责重连,支持角色切换,HIDVirtualCable属性必须为TRUE |
| TRUE | TRUE | 可主动重连 | 可主动重连 | 双方均可发起重连,HIDVirtualCable属性必须为TRUE |
3.2.2 重连的具体流程
以蓝牙鼠标(HIDReconnectInitiate=TRUE,HIDNormallyConnectable=FALSE)为例,重连流程如下:
-
连接意外断开(如主机超出信号范围);
-
鼠标检测到用户操作(如移动、按键),触发重连机制;
-
鼠标进入页面(Page)模式,搜索之前连接的主机;
-
主机处于页面扫描(Page Scan)模式,响应鼠标的连接请求;
-
双方建立基带连接,鼠标可发起角色切换(从从设备变为主设备);
-
重新打开L2CAP控制通道和中断通道,恢复通信。
规范对重连的超时时间也做了建议:如果重连尝试持续30秒仍未成功,设备或主机可停止重连,等待用户手动触发------这能避免持续重连带来的功耗浪费。
3.3 连接建立的细节:通道打开顺序
规范对HID设备连接建立时的通道打开顺序做了明确要求:
必须先打开控制通道(Control Channel),再打开中断通道(Interrupt Channel);
控制通道打开后,即可发送控制命令(如SET_PROTOCOL、GET_REPORT);
断开连接时,必须先关闭中断通道,再关闭控制通道;
例外情况:设备可直接断开基带连接,此时控制通道和中断通道被视为同时关闭。
这种顺序要求确保了连接建立和断开的稳定性------控制通道用于传输配置命令,先打开控制通道可确保中断通道打开前,双方的配置已协商一致;断开时先关闭中断通道,可避免数据传输过程中通道被强制关闭导致的数据丢失。
3.4 Page Scan模式:影响重连速度的关键
Page Scan模式决定了设备响应连接请求的速度,规范对HID设备和主机的Page Scan模式做了明确要求:
支持设备发起重连的主机:应使用Page Scan模式R1,以平衡功耗和响应速度;
无活动HID连接的主机:可使用Page Scan模式R0,以降低功耗;
作为从设备的HID遥控器:应支持与期望响应时间对应的Page Scan模式。
Page Scan模式的选择直接影响重连速度:模式R1的扫描间隔较短,响应速度快,但功耗较高;模式R0的扫描间隔较长,响应速度慢,但功耗较低。HID设备和主机需根据自身场景选择合适的模式。
四、安全性:蓝牙HID设备如何安全沟通
蓝牙HID设备常涉及敏感数据传输(如键盘输入的密码、信用卡信息),安全性是GAP协议的核心关注点之一。规范定义了一套完整的安全机制,包括配对、绑定、加密、认证等,确保数据传输的保密性和完整性。
4.1 核心安全要求:必须支持的安全特性
规范要求所有蓝牙HID设备和主机必须支持以下安全特性,以保证基本的安全性:
安全简单配对(Secure Simple Pairing):蓝牙2.1+EDR引入的配对机制,支持多种关联模型(如Just Works、Passkey Entry、Numeric Comparison),提升配对安全性和便捷性;
传统配对(Legacy Pairing):为兼容旧设备而保留的配对机制,使用PIN码进行认证;
加密(Encryption):对传输的数据进行加密,防止窃听;
认证(Authentication):验证设备身份,防止恶意设备冒充;
安全模式4(Security Mode 4):蓝牙核心规范定义的安全模式,支持强安全特性,是HID设备的强制要求。
需要注意的是,部分国家对加密算法的进出口和使用有严格限制,设备制造商需遵守当地法规,确保产品合规。
4.2 配对与绑定:建立长期安全关系
配对(Pairing)和绑定(Bonding)是蓝牙安全机制的基础,两者密切相关但又有所区别:
**配对:**建立临时或长期的安全关系,生成共享链路密钥(Link Key);
**绑定:**将配对生成的链路密钥存储在设备的非易失性内存中,用于后续重连时的身份验证------绑定后的设备无需重新配对,可直接建立加密连接。
4.2.1 配对的触发条件
HID设备的配对通常在以下场景触发:
-
首次连接:设备和主机首次建立连接时,通过用户操作触发配对;
-
绑定信息丢失:设备或主机的绑定信息被删除(如恢复出厂设置),需重新配对;
-
**安全模式切换:**设备或主机切换到更高安全级别的模式,需重新配对以生成新的链路密钥。
4.2.2 绑定的实现要求
规范对绑定的实现做了明确要求:
-
支持绑定的HID设备和主机,必须提供非易失性内存(如EEPROM、闪存),用于存储链路密钥、设备地址(BD_ADDR)和链路密钥类型(已认证、未认证);
-
当设备存储的绑定信息达到上限时,应采用最近最少使用(LRU)算法覆盖最旧的绑定信息------这确保了设备能支持与多个主机的绑定,同时避免内存溢出;
-
设备应提供除虚拟电缆断开(Virtual Cable Unplug)外的解绑方式,支持在无对方设备的情况下解绑------比如通过设备的物理按键组合恢复出厂设置,删除所有绑定信息。
4.3 配对关联模型:根据设备能力选择

安全简单配对定义了三种主要的关联模型,HID设备需根据自身硬件能力选择合适的模型:
4.3.1 Just Works关联模型
适用于无显示、无输入能力的HID设备(如鼠标)。该模型无需用户输入PIN码,设备和主机自动生成链路密钥,实现零交互配对。但该模型不提供中间人攻击(MITM)保护,适用于对安全性要求不高的场景。
4.3.2 Passkey Entry关联模型
适用于有输入能力但无显示能力的HID设备(如键盘)。配对流程如下:
-
主机生成6位数字的Passkey,并显示给用户;
-
用户在蓝牙键盘上输入该Passkey,按下回车键;
-
键盘将Passkey传输给主机,双方验证通过后生成链路密钥。
该模型提供MITM保护,安全性较高,是键盘等输入设备的推荐选择。
4.3.3 Numeric Comparison关联模型
适用于既有显示能力又有输入能力的HID设备(如带显示屏的遥控器)。配对流程如下:
-
设备和主机分别生成相同的6位数字Passkey;
-
双方同时显示该Passkey;
-
用户确认两边的Passkey一致后,配对完成。
该模型提供MITM保护,且配对过程便捷,适用于高端HID设备。
4.4 HID设备的特殊安全要求
由于HID设备的特殊性(如键盘传输敏感信息、鼠标需要低延迟),规范对其安全机制做了一些特殊要求:
4.4.1 键盘的安全要求
键盘作为敏感信息输入设备,规范对其安全做了严格要求:
默认支持Just Works关联模型,确保配对便捷性;
提供强制启用MITM保护的机制,比如长按特定按键(如Enter键)+连接键进入可发现模式,此时配对必须使用Passkey Entry或Numeric Comparison模型;
支持安全模式4,确保数据传输加密;
键盘的IO能力应设置为KeyboardOnly或DisplayYesNo------无显示屏的键盘设置为KeyboardOnly,有显示屏的键盘设置为DisplayYesNo。
规范特别警告:即使使用支持MITM保护的关联模型,开发者也需仔细设计设备交互流程,避免潜在的MITM攻击。例如,无显示屏的键盘应提供明确的配对状态指示(如LED灯闪烁),让用户确认当前处于配对状态。
4.4.2 鼠标等无输入/显示设备的安全要求
鼠标、传感器等无输入/显示能力的HID设备,其IO能力应设置为NoInputNoOutput,仅支持Just Works关联模型。这类设备通常不传输敏感信息,Just Works模型能在保证基本安全性的同时,提供便捷的配对体验。
4.5 向后兼容性:与旧设备的安全交互
为了兼容蓝牙2.1+EDR之前的旧设备,规范对HID设备和主机的向后兼容性做了要求:
4.5.1 旧设备的配对机制
旧设备使用传统配对机制,基于PIN码进行认证。规范要求:
-
电池供电的HID设备应支持默认PIN码"0000",方便用户配对;
-
带数字按键的HID设备(如遥控器)可支持自定义PIN码;
-
键盘等设备在传统配对时,应允许在未加密状态下传输安全码字符通知(Security Code Character notifications),以便用户输入PIN码。
4.5.2 旧设备的安全模式
-
传输敏感信息的HID设备(如键盘、密码输入器):应支持安全模式2或3,确保数据传输加密;
-
其他HID设备(如鼠标、传感器):可支持安全模式1、2或3,根据实际需求选择。
4.5.3 加密密钥更新
规范要求,HID设备和主机在连接存续期间,至少每23.3小时(蓝牙时钟翻转周期)更新一次加密密钥------这能有效降低密钥被破解的风险,提升长期连接的安全性。
4.6 虚拟电缆与安全性的关联

虚拟电缆(Virtual Cable)是HID设备的重要特性,它与安全性密切相关:
当虚拟电缆建立且启用加密时,设备和主机自动绑定,存储链路密钥和设备地址;
当虚拟电缆断开(通过Virtual Cable Unplug命令)时,设备和主机应删除对应的绑定信息和链路密钥,防止未授权访问;
仅支持虚拟电缆的HID设备,其绑定信息存储在持久化内存中,即使断电也不会丢失------这确保了设备下次上电后仍能自动重连。
规范对虚拟电缆的安全行为做了明确规定,如下表所示:
|---------------------|----------|-----------------------|
| HIDVirtualCable | 加密状态 | 备注 |
| FALSE | 未加密 | 不存储设备地址,非虚拟电缆连接 |
| FALSE | 加密 | 不推荐,不符合虚拟电缆设计理念 |
| TRUE | 未加密 | 存储设备地址,虚拟电缆连接(如鼠标) |
| TRUE | 加密 | 绑定状态,存储设备地址和链路密钥(如键盘) |
五、检验
题目:蓝牙HID设备的可发现模式有哪两种?分别适用于什么场景?规范对首次使用的HID设备有什么特殊要求?
答案:
蓝牙HID设备的可发现模式分为有限可发现模式和通用可发现模式:
-
有限可发现模式:适用于大多数HID设备(如键盘、鼠标、游戏手柄),通过用户手动操作(如按连接键)触发,仅在有限时间内(30秒以上)处于可发现状态,能平衡用户体验和功耗;
-
通用可发现模式:适用于特殊场景的HID设备(如工业传感器、公共场所的遥控器),设备持续处于可发现状态,无需用户手动触发,适用于安装位置固定、难以触及或需要多主机连接的场景。
规范对首次使用的HID设备的特殊要求:设备在首次安装电池(或首次上电)时,应自动进入可发现、可连接、可配对状态,并保持该状态直到完成首次配对或超时,实现"开箱即用"的用户体验。
题目:蓝牙HID设备的重连责任由哪些属性决定?请简述当HIDReconnectInitiate=TRUE且HIDNormallyConnectable=FALSE时的重连流程。
答案:
蓝牙HID设备的重连责任由SDP记录中的两个属性决定:HIDReconnectInitiate(是否由设备发起重连)和HIDNormallyConnectable(无连接时是否持续可连接)。
当HIDReconnectInitiate=TRUE且HIDNormallyConnectable=FALSE时,重连流程如下:
-
连接意外断开(如主机超出信号范围);
-
设备检测到用户操作(如按键、移动),触发重连机制;
-
设备进入页面(Page)模式,搜索之前绑定的主机;
-
主机处于页面扫描(Page Scan)模式,响应设备的连接请求;
-
双方建立基带连接,设备可发起角色切换(从从设备变为主设备);
-
重新打开L2CAP控制通道和中断通道,恢复数据传输;
-
若重连尝试持续30秒未成功,设备停止重连,等待用户手动触发。
此时HIDVirtualCable属性必须为TRUE,设备需支持角色切换。
题目:蓝牙HID设备支持哪些配对关联模型?键盘类HID设备的安全要求有哪些?
答案:
蓝牙HID设备支持安全简单配对的三种关联模型:
-
Just Works:适用于无输入/显示能力的设备(如鼠标),零交互配对,无MITM保护;
-
Passkey Entry:适用于有输入能力无显示能力的设备(如键盘),主机显示Passkey,用户输入验证,提供MITM保护;
-
Numeric Comparison:适用于有输入/显示能力的设备(如带屏遥控器),双方显示相同Passkey,用户确认,提供MITM保护。
键盘类HID设备的安全要求:
-
默认支持Just Works关联模型,确保配对便捷性;
-
提供强制启用MITM保护的机制(如长按特定按键+连接键);
-
IO能力设置为KeyboardOnly或DisplayYesNo;
-
支持安全模式4,确保数据传输加密;
-
提供明确的配对状态指示(如LED灯),避免MITM攻击;
-
兼容传统配对,支持默认PIN码"0000";
-
连接存续期间,至少每23.3小时更新一次加密密钥。
在实际开发或使用中,建议结合具体HID设备的场景(如是否电池供电、是否传输敏感信息、是否需要多主机连接),灵活配置GAP相关参数------比如可发现模式的选择、重连机制的设计、配对模型的适配等。只有这样,才能在保证规范合规的同时,提供最优的用户体验。如果你有任何疑问或想要深入了解的内容,欢迎在评论区留言讨论!