蓝牙GAP、SDP、ATT、GATT的历史背景与设计哲学是什么?

摘要:liwen01 2026.01.01 前言 我们现在使用的蓝牙,它不是一蹴而就的,它经历了从电缆替代者(经典蓝牙)到 万物互联基石(低功耗蓝牙)的演变。 要理解 SDP、GAP、ATT、G
liwen01 2026.01.01 前言 我们现在使用的蓝牙,它不是一蹴而就的,它经历了从电缆替代者(经典蓝牙)到万物互联基石(低功耗蓝牙)的演变。 要理解SDP、GAP、ATT、GATT这些类似重叠的协议,需要回到蓝牙技术发展的历史背景和设计哲学。 (一)历史背景 (1)早期无线通信的春秋战国 在蓝牙标准诞生之初,不同厂家对如何发现对方、如何加密、如何连接有不同的理解。如果没有一个统一的框架,A 厂家的手机可能根本搜不到 B 厂家的耳机。 GAP(Generic Access Profile) 的存在是为了定义通用的行为准则,设计目的有两个: (A)标准化流程:它规定了所有蓝牙设备必须如何打招呼(广播)、如何交换名片(发现)以及如何建立外交关系(连接)。 (B)解耦:它让上层应用不需要关心底层的物理跳频或链路层状态转换,只需知道自己是中心设备(Central)还是外围设备(Peripheral)。 (2)解决经典蓝牙业务繁杂问题 经典蓝牙(BR/EDR)的设计初衷是取代各种电缆(串口线、打印线、耳机线)。 因此,它承载了非常多的特定协议(Profiles),如 HFP(通话)、A2DP(音乐)、SPP(串口)。 SDP(Service Discovery Protocol) 就是蓝牙世界里的黄页服务,设计目的也有两个: (A)动态查询:经典蓝牙设备通常功能复杂,当手机连接音箱时,它不知道这个音箱是否带麦克风(HFP),也不知其音质等级(A2DP)。 (B)按需建立:通过 SDP,设备可以先查询对方支持哪些服务,获取连接这些服务所需的端口号(如 RFCOMM 通道),然后再建立真正的业务连接,节省了系统资源。 (3)解决BLE极致功耗问题 2010年左右,蓝牙 4.0 (BLE) 问世。此时的设计目标变了:不再是传输高带宽的音频,而是传输极小的数据(如温度、心率),且要求一颗纽扣电池能用一年。 经典蓝牙的协议栈(包括 SDP)对于这些小传感器来说太重、太费电了。 为了极致省电,蓝牙设计者提出了 ATT 和 GATT 的组合: 传感器数据通常非常简单(就是一个数值),比如温度湿度传感器。 (A)ATT (Attribute Protocol):极简的搬运工 ATT弃了复杂的握手,将所有数据简化为属性(Attribute)。它只负责最简单的操作:读、写、通知。它像是一个高效的仓库搬运工,只认货架号(Handle),不问数据背后的逻辑。 但是ATT的属性(Attribute)太底层了,一堆 handle 很难管理,所以就有了GATT 。 (B)GATT (Generic Attribute Profile):逻辑的架构师 GATT的目的是在 ATT 之上建立了一套层级结构(Service > Characteristic),把 ATT 相关的属性打包。 GATT 是声明式的,它不需要像 SDP 那样进行复杂的动态交互,而是通过简单的属性列表直接告诉对方:我的 0x0012 货架放的是心率数据 (二)GAP(Generic Access Profile) GAP(Generic Access Profile,通用访问配置文件)是蓝牙协议栈中最基础、最重要的配置文件之一。 可以把它看做是蓝牙设备的身份证和外交官。它定义了设备如何互相发现、建立连接以及确保基本的互操作性。 (1)GAP 的核心作用 为确保不同厂商的设备能够互相发现并建立连接,GAP 的核心作用有4个: (A)模式与过程 (Modes and Procedures):设备如何被发现(广播)以及如何发现别人(扫描)。 (B)角色 (Roles):定义设备在蓝牙网络中的身份(如手机是 Central,手环是 Peripheral)。 (C)安全 (Security):定义安全级别和配对模式的基础。 (D)数据格式 (Data Formats):定义广播数据和扫描响应数据的通用格式。 (2)GAP 四大核心角色(Roles) 在连接建立之前,GAP 首先定义了设备在链路层表现出的身份。这决定了谁负责发信号,谁负责找信号。 在低功耗蓝牙 (BLE) 中,GAP 定义了四种特定的角色。这些角色决定了链路层 (Link Layer) 的状态。 (A)Broadcaster(广播者):仅发送广播数据,不支持建立连接,比如:温度传感器、Beacon。此时链路层处于 Advertising State 状态。 (B)Observer(观察者):仅扫描广播数据,不支持发起连接,比如:仅用于数据采集的网关,此时链路层处于 Scanning State 状态。 (C)Peripheral(外设):发送广播,支持被连接。
阅读全文