Bluetooth SDP介绍
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介绍相关推荐
- Bluetooth Baseband介绍
Bluetooth Baseband介绍 阅读目录 1. 介绍 2. 概述 3. 物理信道 4. 物理链路 5. 逻辑传输层 6. 逻辑链路 7. 数据包 8. 链路控制 回到顶部 1. 介绍 蓝牙的 ...
- 蓝牙Bluetooth模块介绍
1,蓝牙模块--基础知识介绍 https://blog.csdn.net/wwt18811707971/article/details/77833602 2,常见蓝牙模块介绍和AT指令 https:/ ...
- Android4.3 Bluetooth基本介绍
蓝牙定义 蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术.能在包括移动电话.PDA.无线耳机.笔记本电脑.相关外设等众多设备之间进行无线信息交换.利用"蓝牙"技术,能够 ...
- 蓝牙协议栈 电话免提协议HFP(Hands-Free)SDP介绍
零. 概述 主要介绍下蓝牙协议栈(bluetooth stack) 电话免提协议HFP(Hands-Free) SDP的介绍,包括HF/AG角色的SDP. 一. 声明 本专栏文章我们会以连载的方式持续 ...
- Bluetooth 蓝牙介绍(一) :基础知识
蓝牙背景 从1994年由电信商爱立信提出"希望创建一个RS-232数据线的无线通信替代版本,它能够链接多个设备,克服同步的问题"以来,蓝牙经过了20余个岁月的发展,蓝牙技术也经历了 ...
- Bluetooth GAP介绍
阅读目录 1. 介绍 2. 角色 3. 配置 4. 模式 5. 安全 6. 空闲模式 7. 建立连接 8. 操作模式和过程 回到顶部 1. 介绍 GAP,Generic Access Profile, ...
- Bluetooth ATT介绍
阅读目录 1 介绍 2 详细内容 3 Attribute PDU 4 Attribute Protocol PDU 回到顶部 1 介绍 ATT,Attribute Protocol,用于发现.读.写对 ...
- Bluetooth 蓝牙介绍(四):低功耗蓝牙BLE Mesh网络 Ⅰ—— 基础概念
文章目录 背景 术语 Managed Flooding Models Scenes 架构 Node Features 中继节点 代理节点 友元节点和低功耗节点 示例 BLE Mesh Networki ...
- Bluetooth 蓝牙介绍(二):低功耗蓝牙BLE协议栈
文章目录 Physical LAYER Link LAYER 角色 地址 物理信道 Air Interface Packet PDU Advertising physical channel PDU ...
最新文章
- Netty 之 Zero-copy 的实现(下)
- Android混淆模板与使用
- js 返回上一页面_构建大型 Vue.js 项目的10条建议
- 技术干货 | Native 页面下如何实现导航栏的定制化开发?
- .NET Core 取消令牌:CancellationToken
- 转 Android的Activity屏幕切换动画(一)-左右滑动切换
- LeetCode简单题(一)
- 十六进制转换html,如何使用JavaScript将十进制转换为十六进制?
- StringBuilder类的作用,以及与String类的相互转换
- java微信web支付开发_java实现微信H5支付方法详解
- 【IoT】 产品设计与工艺:塑料表面处理工艺
- Dell R740服务器新版Raid设置图文教程
- 洛谷P3369 【模板】普通平衡树 红黑树实现
- 图片实现裁剪功能vue-img-cutter
- c# winform 支付宝付款
- Linux网络入侵检测软件
- 隐私保护深度学习技术综述
- 哪些语言适用于人工智能 选哪个开发语言更好
- TexStudio论文写作小白入门
- 微信小程序计算两个日期之间相差几天
热门文章
- ShellExecuteEx提升子进程权限
- Verilog-实现时钟分频(1KHZ、奇、偶分频,占空比为50%)
- 特立独行的幸福 测试点 4
- HDU6252 Subway Chasing 2017 CCPC Final
- 配置 Gitlab 公钥
- mysql批量插入性能优化:executeBatch如何通过rewriteBatchedStatements参数逆袭
- 机器人智能聊天插件更新
- ppt转换器免费下载使用教程
- 嵌入式处理器DCD和SPACE区别,全局变量,局部变量,程序的栈,堆,程序编译结果的占用空间意思
- ubuntu20.04 服务器深度学习环境docker搭建