• Bluetooth SDP介绍


    1. 概念

    SDP, Service Discovery Protocol,服务发现协议
    SDP提供了一种用于发现服务及这些可用服务属性的方法,但它不提供利用这些服务的机制

    其架构是Client-Server模式,如下图所示

    image

    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组成,如下图所示

    image

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

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

    3. 服务属性

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

    image

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

    image

    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的类型描述符用来表示,它包含在首部字段第一个字节的高五位
    下面是已经定义的类型

    image

    7.2 大小描述符

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

    image

    7.3 数据单元实例

    image

    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

     image

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

    image

    8.2 Partial Responses And Continuation State

    image

    8.3 错误处理

    当一个Server认为Client的Request格式不正确或其他原因导致没有合适的Response时
    应该回应一个SDP_ErrorResponse PDU(PDU ID=0x01)

    同时,其Parameters为ErrorCode,ErrorCode详细信息如下

     image

    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整个过程>

  • 相关阅读:
    SpringMVC防止重复提交
    Apache Lucene初探
    ORACLE触发器详解
    ORA-02287: sequence number not allowed here问题的解决
    数据库索引
    字符串 栈
    字符串 逆序
    汽水瓶
    查找 排序----有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
    usb串口的作用以及JLINK
  • 原文地址:https://www.cnblogs.com/hzl6255/p/3826558.html
Copyright © 2020-2023  润新知