【蓝牙专题】SDP协议解析

今天分析SDP协议,SDP看完后,会去解析部分代码;

一、概念

1、定义:

        SDP(service discovery profile)服务搜索协议;由于蓝牙服务在不断增加,一个设备不可能也没有必要支持所有服务,所以需要在建立链接时获知哪些services可以提供,无法提供或未知服务如何处理,这就需要SDP来实现;SDP是一个user-initiated application,应用层通过SDP获知是否有必要打开通信服务,如RFCOMM,是否有特殊使用场景,如传输文件;SDP用于定位哪些服务可用,但是选择、接入、使用服务并不是SDP的范畴,需要参照具体的服务协议;

SDP的主要作用就是search:

a、搜索服务类;

b、搜索服务属性;

c、服务浏览;

2、通信架构

如下图所示,SDP中分为client和server;server保存服务列表,client通过request向server获取;

SDP提供查询服务和属性的机制,但并不提供使用这些服务的机制;

如果多个应用在一个设备上提供服务,那么需要多个client使用SDP来查询servers,SDP client会根据servers距离client的RF proximity动态改变访问的server;

3、service record

一个服务记录可以包含多个属性,一个服务记录有唯一的标识,32bit,需要注意的是,这个唯一标识是在每个server中唯一的,两个同样值得标识在不同服务器代表的意义并不相同;

service recode handle在server的services移除或改变前都是有效的,但SDP并没有提供server服务发生变化的通知机制,所以当client使用了server已经移除的service,server需要给出错误应答;

4、service attribute

每一个属性都描述了一个服务的一个特点,部分属性如下图所示:

上图显示了属性格式,其中attribute ID是16-bit,每一种服务都有自己的属性ID列表;Attribute Value是可变长度的;

5、service class

每个服务类都有一个类ID属性,the ServiceClassIDList attribute,每个子类也有UUID,子服务类必须包含其上级服务类的所有属性;

UUID为128-bit,但为了更加方便的使用,我们一般简化为16-bit或32-bit,这里要说明的是Bluetooth Base UUID,他们的值包括00000000-0000-1000-8000-00805F9B34FB,换算公式如下:

6、BROWSINGFOR SERVICES

二、数据

1、属性中value定义:

数据元素分为头和数据部分,其中头又分为type段和size段,如下图所示,各部分说明也见下面几个图:

2、PDU格式

不多说,上图,看图很明白;

3、实例

看下图SDP_ServiceSearchAttributeRequest PDU包,可根据spec解析;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值