Bluetooth SDP介绍

阅读目录

  • 1. 概念
  • 2. 服务记录
  • 3. 服务属性
  • 4. 服务类
  • 5. 服务查找
  • 6. 服务浏览
  • 7. 数据表示
  • 8. 协议说明

回到顶部

1. 概念

SDP, Service Discovery Protocol,服务发现协议
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用Service Record来表示;每一个Service Record由若干Service Attribute组成,如下图所示

在SDP Server中,用Service Record Handle来唯一标识一个Service Record 
而Service Record Handle则使用32-bit数字表示

在Service Record List中,Server使用0x00000000来表示SDP本身

回到顶部

3. 服务属性

每个服务属性(Service Attribute)描述了一个服务的单个特征,实例如下

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

Attribute ID是16-bit无符号整型,用以区分Server中不同属性,属性ID还确定了相关的属性值的语义

Attribute Value字段长度是可变的,由关联属性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(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(PDU ID=0x03)的Parameters包括 
TotalServiceRecordCount, CurrentServiceRecordCount, ServiceRecordHandleList, ContinuationState

8.5 服务属性事务

ServiceAttribute Transaction

8.6 服务属性查找事务

ServiceSearchAttribute Transaction

TIP: 8.4.2, 8.5及8.6均为详细定义,此处不累述,详情见规范

参考: 
<蓝牙的SDP协议总结> 
<SDP协议译稿(Part 1)> 
<FTS抓包看蓝牙的SDP整个过程>

Bluetooth SDP介绍相关推荐

  1. Bluetooth Baseband介绍

    Bluetooth Baseband介绍 阅读目录 1. 介绍 2. 概述 3. 物理信道 4. 物理链路 5. 逻辑传输层 6. 逻辑链路 7. 数据包 8. 链路控制 回到顶部 1. 介绍 蓝牙的 ...

  2. 蓝牙Bluetooth模块介绍

    1,蓝牙模块--基础知识介绍 https://blog.csdn.net/wwt18811707971/article/details/77833602 2,常见蓝牙模块介绍和AT指令 https:/ ...

  3. Android4.3 Bluetooth基本介绍

    蓝牙定义 蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术.能在包括移动电话.PDA.无线耳机.笔记本电脑.相关外设等众多设备之间进行无线信息交换.利用"蓝牙"技术,能够 ...

  4. 蓝牙协议栈 电话免提协议HFP(Hands-Free)SDP介绍

    零. 概述 主要介绍下蓝牙协议栈(bluetooth stack) 电话免提协议HFP(Hands-Free) SDP的介绍,包括HF/AG角色的SDP. 一. 声明 本专栏文章我们会以连载的方式持续 ...

  5. Bluetooth 蓝牙介绍(一) :基础知识

    蓝牙背景 从1994年由电信商爱立信提出"希望创建一个RS-232数据线的无线通信替代版本,它能够链接多个设备,克服同步的问题"以来,蓝牙经过了20余个岁月的发展,蓝牙技术也经历了 ...

  6. Bluetooth GAP介绍

    阅读目录 1. 介绍 2. 角色 3. 配置 4. 模式 5. 安全 6. 空闲模式 7. 建立连接 8. 操作模式和过程 回到顶部 1. 介绍 GAP,Generic Access Profile, ...

  7. Bluetooth ATT介绍

    阅读目录 1 介绍 2 详细内容 3 Attribute PDU 4 Attribute Protocol PDU 回到顶部 1 介绍 ATT,Attribute Protocol,用于发现.读.写对 ...

  8. Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络 Ⅰ—— 基础概念

    文章目录 背景 术语 Managed Flooding Models Scenes 架构 Node Features 中继节点 代理节点 友元节点和低功耗节点 示例 BLE Mesh Networki ...

  9. Bluetooth 蓝牙介绍(二):低功耗蓝牙BLE协议栈

    文章目录 Physical LAYER Link LAYER 角色 地址 物理信道 Air Interface Packet PDU Advertising physical channel PDU ...

最新文章

  1. Netty 之 Zero-copy 的实现(下)
  2. Android混淆模板与使用
  3. js 返回上一页面_构建大型 Vue.js 项目的10条建议
  4. 技术干货 | Native 页面下如何实现导航栏的定制化开发?
  5. .NET Core 取消令牌:CancellationToken
  6. 转 Android的Activity屏幕切换动画(一)-左右滑动切换
  7. LeetCode简单题(一)
  8. 十六进制转换html,如何使用JavaScript将十进制转换为十六进制?
  9. StringBuilder类的作用,以及与String类的相互转换
  10. java微信web支付开发_java实现微信H5支付方法详解
  11. 【IoT】 产品设计与工艺:塑料表面处理工艺
  12. Dell R740服务器新版Raid设置图文教程
  13. 洛谷P3369 【模板】普通平衡树 红黑树实现
  14. 图片实现裁剪功能vue-img-cutter
  15. c# winform 支付宝付款
  16. Linux网络入侵检测软件
  17. 隐私保护深度学习技术综述
  18. 哪些语言适用于人工智能 选哪个开发语言更好
  19. TexStudio论文写作小白入门
  20. 微信小程序计算两个日期之间相差几天

热门文章

  1. ShellExecuteEx提升子进程权限
  2. Verilog-实现时钟分频(1KHZ、奇、偶分频,占空比为50%)
  3. 特立独行的幸福 测试点 4
  4. HDU6252 Subway Chasing 2017 CCPC Final
  5. 配置 Gitlab 公钥
  6. mysql批量插入性能优化:executeBatch如何通过rewriteBatchedStatements参数逆袭
  7. 机器人智能聊天插件更新
  8. ppt转换器免费下载使用教程
  9. 嵌入式处理器DCD和SPACE区别,全局变量,局部变量,程序的栈,堆,程序编译结果的占用空间意思
  10. ubuntu20.04 服务器深度学习环境docker搭建