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介绍的更多相关文章

  1. Bluetooth GATT介绍

    目录 1. 介绍 2 内容 2.1 Configured Broadcast 2.2 GATT Profile Hierarchy 3 Service Interoperability Require ...

  2. Bluetooth ATT介绍

    目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...

  3. Bluetooth GAP介绍

    目录 1 GAP协议栈 2 Profile Role 3 用户接口 4 模式 5 安全 5.1 认证(Authentication) 5.2 安全模式 6 Idle Mode Procedures 7 ...

  4. Bluetooth LMP介绍

    目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...

  5. Bluetooth Baseband介绍

    目录 1. 概述 1.1 Clock(时钟) 1.2 寻址方式 2. 物理信道(Physical Channels) 3. 物理链路(Physical Links) 4. 逻辑传输层(Logical ...

  6. Bluetooth HFP介绍

    目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...

  7. Bluetooth RFCOMM介绍

    目录 1. 介绍 2. 服务概述 2.1 RS-232控制信号 2.2 Null Modem Emulation 2.3 多串口仿真 3. 服务接口描述 4. RFCOMM帧类型 5. RFCOMM帧 ...

  8. Bluetooth HCI介绍

    目录 1. HCI功能 2. HCI Packet 1. HCI Command 2. HCI Event 3. HCI Data 3. HCI传输层 HCI, 主机控制接口(Host Control ...

  9. Bluetooth L2CAP介绍

    目录 1. 通用操作 1. L2CAP Channel 2. 设备间操作 3. 层间操作 4. 操作模式 2. 数据包格式(Data Packet Format) 1. B-Frame 2. G-Fr ...

随机推荐

  1. VS制作软件安装项目,版本控制和软件升级

    具体如何利用VS制作安装项目,请到我的CSDN地址下载超详细的文档(该文档来自网络) http://download.csdn.net/detail/u012373717/8723335 我要说的是版 ...

  2. Android 建立文件夹、生成文件并写入文本文件内容

    一.首先添加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">& ...

  3. finally 语句

    package unit5; public class FinallyDemo { int no1,no2; public FinallyDemo(String[] args) { try{ no1= ...

  4. Ajax 学习之创建XMLHttpRequest对象------Ajax的核心

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. HTML-Canvas03

    颜色合成 globalCompositeOperation 属性: //先绘制一个图形. ctx.fillStyle = "#00ff00"; ctx.fillRect(10,10 ...

  6. http://jingyan.baidu.com/article/d169e186aa8728436611d8f3.html

    http://jingyan.baidu.com/article/d169e186aa8728436611d8f3.html

  7. ural 1431. Diplomas

    1431. Diplomas Time limit: 1.0 secondMemory limit: 64 MB It might be interesting for you to learn th ...

  8. 胜利大逃亡[HDU1253]

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. 导出一个EXCEL,多个SHEET

    Infragistics.Excel. Workbook work = new Infragistics.Excel.Workbook();                         Infra ...

  10. 【BZOJ】1049: [HAOI2006]数字序列(lis+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1049 题意:给一个长度为n的整数序列.把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希 ...