Bluetooth SDP介绍
目录
SDP, Service Discovery Protocol,服务发现协议
1. 概念
SDP提供了一种用于发现服务及这些可用服务属性的方法,但它不提供利用这些服务的机制。
其架构是Client-Server模式,如下图所示

SDP Server维护了一个服务记录(Service Record)列表,每个条目包含了该服务的信息。
SDP Client通过SDP request来向SDP Server获取服务记录信息
Client可以通过打开一条单独的连接来使用Server提供的某种服务
当Server的服务改变时,Client必须通过其他方式来了解这一信息,以便能够通过SDP来查询
同时,当Server由于某种原因不可用时,Client可以使用SDP轮询Server
当Server不再相应请求时,Client可以推断该Server不可用。
2. 服务记录(Service Record)
每一个Service用Service Record来表示
每一个Service Record由若干Service Attribute组成,如下图所示

在SDP Server中,用Service Record Handle来唯一标识一个Service Record
而Service Record Handle则使用32-bit数字表示
ServiceRecordState and ServiceDatabaseState attributes
在Service Record List中,Server使用0x00000000来表示SDP本身
3. 服务属性(Service Attribute)
每个服务属性描述了一个服务的单个特征,实例如下

一个服务属性包含了两个部分: 属性ID和属性值

属性ID是16-bit无符号整型,用以区分Server中不同属性,属性ID还确定了相关的属性值的语义
属性值字段长度是可变的,由关联属性ID和服务记录类别决定
4. 服务类(Service Class)
每个服务是一个服务类的实例
服务类定义了包含在该类服务记录的所有属性
每个属性定义了指定的属性ID,及使用的属性值和属性值得格式
服务记录包含了特定服务类及通用服务类的属性
每个服务类被分配了唯一的标识符
这个服务类标识符包含了ServiceClassIDList属性的属性值,被称为UUID
5. 服务查找
服务查找允许Client基于包含服务记录的属性值,来获取特定服务记录的服务记录句柄(Service Record Handle)
当一个SDP Client有某个服务记录句柄时,它可以请求特定的属性值
SDP不提供基于任意属性值的服务记录查找,只提供基于UUID的查找
可用于搜索服务的重要属性被表示为的UUID
5.1 UUID
UUID是一个128位的值,蓝牙Base UUID值为0x00000000-0000-1000-8000-00805F9B34FB
其他已定义的UUID可参考<UUID>
为了简化实用,我们实用16-bit和32bit UUID来代表真实的UUID,
5.2 服务搜索模式(Service Search Patterns)
服务搜索模式使用UUID列表来定位匹配的服务记录
6. 服务浏览
SDP提供了基于服务类共享属性机制来浏览服务,这个属性被称为BrowseGroupList
Client通过创建一个包含代表根浏览组的UUID的服务搜索模式来浏览Server的服务
7. 数据表示
SDP的使用数据单元(Data Element)来表示数据(属性ID,属性ID范围,属性值)
数据单元是一种类型化的数据表示,它由两个字段组成:首部字段(Header Field)和数据字段(Data Field)
首部字段包含两个部分: 类型描述符(Type Descriptor)和大小描述符(Size Descriptor)
数据字段是一个字节序列,其长度由大小描述符指定,其含义则由类型描述符指定
7.1 类型描述符
数据单元的类型使用5-bit的类型描述符用来表示,它包含在首部字段第一个字节的高五位。
下面是已经定义的类型

7.2 大小描述符
数据单元的大小描述符包含在首部字段第一个字节的低三位
它表示为的大小指数,其后为0/8/16/32bits
大小指数的编码如下

7.3 数据单元实例

8. 协议说明
SDP使用Request/Response模型
其中每个事务(Transaction)包含一个请求协议数据单元(PDU)和一个响应PDU
SDP使用L2CAP作为传输协议,在建立连接并发出SDP Request后
在给定的时间内,只有收到该Request的Response后,才能发出其他的Request
传输采用Big-Endian,高位先低位后的方式
8.1 PDU格式
SDP PDU包含一个Header和Parameters
Header包含三个字段: PDU ID, Transaction ID, ParameterLength

其中,Header三个字段的含义分别如下

8.2 Partial Responses And Continuation State

8.3 错误处理
当一个Server认为Client的Request格式不正确或其他原因导致没有合适的Response时
应该回应一个SDP_ErrorResponse PDU(PDU ID=0x01)
同时,其Parameters为ErrorCode,ErrorCode详细信息如下

8.4 服务查找事务
ServiceSearch Transaction
8.4.1 SDP_ServiceSearchRequest PDU
SDP_ServiceSearchRequest PDU(PDU ID=0x02)的Parameters包括
ServiceSearchPattern, MaximumServiceRecordCount, ContinuationState
ServiceSearchPattern(Size: Varies):
| Value | Parametr Description |
| Data Element Sequence | ServiceSearchPattern是一个数据单元序列,每个单元是一个UUID,单元数为1~12 |
MaximumServiceRecordCount(Size: 2 Bytes):
| Value | Parametr Description |
| N | MaximumServiceRecordCount是一个16-bit数,指定可返回的了最大的服务记录句柄,取值范围: 0x0001~0xFFFF |
ContinuationState(Size: 1~17 Bytes):
| Value | Parametr Description |
| Continuation State | ContinuationState是一个8-bit数N,随后的N Bytes是Continuation State信息,N的范围为0~16,0表示没有Continuation State |
8.4.2 SDP_ServiceSearchResponse PDU
SDP_ServiceSearchResponse PDU(PDU ID=0x03)的Parameters包括
TotalServiceRecordCount, CurrentServiceRecordCount, ServiceRecordHandleList, ContinuationState
8.5 服务属性事务
ServiceAttribute Transaction
8.6 服务属性查找事务
ServiceSearchAttribute Transaction
TIP: 8.4.2, 8.5及8.6均为详细定义,此处不累述,详情见规范
9. 服务属性定义
9.1 Universal Attribute Definition
9.2 ServiceDiscoveryServer Service Class Attribute Definitions
9.3 BrowseGroupDescriptor Service Class Attribute Definitions
TIP: 9主要描述了属性ID,属性值类型及属性相关说明,详情见规范
关于SDP,更多内容,可参考如下文章
<蓝牙的SDP协议总结>
<SDP协议译稿(Part 1)>
<FTS抓包看蓝牙的SDP整个过程>
Bluetooth SDP介绍的更多相关文章
- Bluetooth GATT介绍
目录 1. 介绍 2 内容 2.1 Configured Broadcast 2.2 GATT Profile Hierarchy 3 Service Interoperability Require ...
- Bluetooth ATT介绍
目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...
- Bluetooth GAP介绍
目录 1 GAP协议栈 2 Profile Role 3 用户接口 4 模式 5 安全 5.1 认证(Authentication) 5.2 安全模式 6 Idle Mode Procedures 7 ...
- Bluetooth LMP介绍
目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...
- Bluetooth Baseband介绍
目录 1. 概述 1.1 Clock(时钟) 1.2 寻址方式 2. 物理信道(Physical Channels) 3. 物理链路(Physical Links) 4. 逻辑传输层(Logical ...
- Bluetooth HFP介绍
目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...
- Bluetooth RFCOMM介绍
目录 1. 介绍 2. 服务概述 2.1 RS-232控制信号 2.2 Null Modem Emulation 2.3 多串口仿真 3. 服务接口描述 4. RFCOMM帧类型 5. RFCOMM帧 ...
- Bluetooth HCI介绍
目录 1. HCI功能 2. HCI Packet 1. HCI Command 2. HCI Event 3. HCI Data 3. HCI传输层 HCI, 主机控制接口(Host Control ...
- Bluetooth L2CAP介绍
目录 1. 通用操作 1. L2CAP Channel 2. 设备间操作 3. 层间操作 4. 操作模式 2. 数据包格式(Data Packet Format) 1. B-Frame 2. G-Fr ...
随机推荐
- 微信SDK开发学习
public class MainActivity extends Activity { // 应用程序的id,就是在网上开发平台创建应用的appid public static final Stri ...
- OUYA设备的购买和安装
OUYA设备的购买和安装 在为OUYA这款游戏终端做具体的开发之前,建议读者先上手感受一下这款设备的游戏体验.本节所涉及的内容包括,OUYA设备的购买.安装.设置,以及最终上手开始游戏这一系列的过程本 ...
- ural 1289. One Way Ticket
1289. One Way Ticket Time limit: 1.0 secondMemory limit: 64 MB A crowed of volunteers dressed in the ...
- 超级楼梯[HDU2041]
超级楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- unity 播放过场动画
public var url="file:///c:/sample.ogg"; //文件路径 function Start () { //拼凑一个url url="fil ...
- BZOJ1107 : [POI2007]驾驶考试egz
i可以作为起点说明把边反向后可以从1和n到达i. 设fl[i]表示从1到达i至少需要加几条边,fr[i]表示从n到达i至少需要加几条边. 把图上下翻转后,从左往右依次计算fl[i],有fl[i]=i- ...
- Session赋值(备注)
Session赋值也是在后台赋,不是在前台赋 追问 不好意思 那还真能在AJAX中赋值 我已经解决了 加一个接口IRequiresSessionState 就OK 提问者评价 太感谢了,真心有用
- TYVJ P1047 乘积最大 Label:dp
背景 NOIP 2000 普及组 第三道 描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力 ...
- Android使用AsyncTask实现可以断点续传的DownloadManager功能
http://www.it165.net/pro/html/201211/4210.html 最近做项目卡壳了,要做个Android的应用市场,其他方面都还好说,唯独这个下载管理算是给我难住了,究其原 ...
- lightning mdb 源代码分析系列(3)
本系列前两章已经描述了系统架构以及系统构建的基础内存映射,本章将详细描述lmdb的核心,外存B+Tree的操作.本文将从基本原理.内存操作方式.外存操作方式以及LMDB中的相关函数等几方面描述LMDB ...