服务发现(Service Discovery)就是对网络中的设备和服务定位,收集这些设备和服务的信息。
SIG组织规定SDP必须具备的功能有:
服务器提供服务记录列表,它描述了服务器提供的全部服务。其中的每条服务记录包含此项服务的全部信息。客户通过发送 SDP请求获取服务记录。SDP 提供了发现服务及其属性(包括相关服务接入协议)的机制,但不提供使用这些服务的机制。
每一个服务的属性描述了服务的一个特征,一个服务属性由两部分组成:属性标识符(Attribute ID)和属性值(Attribute Value)。
属性标识符是在服务记录中用于区分不同属性的16bitS无符号整数。所有属于同一服务类的服务的属性标识符具有同样的意义。SDP中通常用数据元(DE)来表示属性标识符,DE由头字段和数据字段组成,头字段指明了数据的类型和长度。属性值是不定长的数据,其意义由其相应的属性标识符决定。属性值在SDP中也用数据元来表示。
SDP定义了一些通用的属性,其中有两个属性是所有服务记录必须包括的。这两个属性是:一是服务记录句柄属性,其I D为Ox0000,属性值的类型为32bitS无符号整数,服务记录句柄在一个SDP服务器内唯一的标识每一个服务记录;二是服务类标识符列表属性,其 ID 为Ox0001,属性值的类型为数据元序列(DES),每一个数据元是一个代表服务所属的类的通用唯一标识符
(UUID)。其它诸如服务标识符等属性为可选的。
每一个PDU由PDu头和PDU特定的参数组成。
PDU 头部包括三个域:PDU标识符(PDU ID)、事务标识符(Transaction ID)和参数长度。
协议中定义了三种事务,分别是:服务搜索事务, 服务属性事务, 服务搜索及属性事务。
服务搜索事务(Service search Transaction):这种事务用来搜索服务,由服务搜索请求PDU和服务搜索响应PDU完成。在请求PDU中包含了数据元序列表示的搜索模式,其数据元为UUID;响应PDU包含了一组服务记录句柄。
服务属性事务(Service Attribute Transaction):在客户拥有服务记录句柄的前提下查询与服务有关的信息,由服务属性请求PDU和服务属性响应PDU完成。在请求PDU中包含了服务记录旬柄以及要查询的属性标识符;响应PDU包含了服务属性除了上面涉及的六种PDU外,协议中还定义了出错响应PDU(SDP ErrorResponSe PDU),SDP服务器在收到不正确的请求PDU或由于某种原因无法正确响应请求PDU时,向客户发送出错响应PDU,在PDU的参数中指明出错的原因。正是通过以上这些PDU,客户可以根据服务的类搜索服务并查询服务的属性,客户也可以在事先不知道任何情况的前提下进行服务的浏览。
服务搜索及属性事务(Serrice Search Attribute Transaction):这种事务将前两种事务在一次事务中完成,由服务搜索及属性请求PDU和服务搜索及属性响应PDU完成。
除了上面涉及的六种PDU外,协议中还定义了出错响应PDU(SDP ErrorResponSe PDU),SDP服务器在收到不正确的请求PDU或由于某种原因无法正确响应请求PDU时,向客户发送出错响应PDU,在PDU的参数中指明出错的原因。
正是通过以上这些PDU,客户可以根据服务的类搜索服务并查询服务的属性,客户也可以在事先不知道任何情况的前提下进行服务的浏览。
客户和服务器之间交换SDP_PDU 是一种简单的处理事务,典型SDP 处理包括含入下步骤:
(1)客户发送一个请求以寻求其感兴趣的服务,服务器用一个符合客户请求的服务的句柄作为响应。
(2)客户使用在第一步获得的服务句柄构造一个新的请求,以获得其感兴趣的服务的额外的服务属性。
SDP_PDU 通用格式: