Service Discovery Protocol(SDP)提供一種能力,讓應用程序有方法發現哪一種服務可用以及這種服務的特性。 服務器
服務發現協議(SDP或Bluetooth SDP)在藍牙協議棧中對藍牙環境中的應用程序有特殊的含意,發現哪一個服務是可用的和肯定這些可用服務的特徵。SDP定義了bluetooth client發現可用bluetooth server服務和它們的特徵的方法。這個協議定義了客戶如何可以尋找基於特定屬性的服務而不讓客戶知道可用服務的任何知識。SDP提供發現新服務的方法,在當客戶登陸到正在操做的藍牙服務器的一個區域時是可用的時。 ide
Service discovery機制提供client應用程序偵測server應用程序提供的服務的能力,而且可以獲得服務的特性。服務的品質包含服務type或服務class. spa
SDP也提供SDP server與SDP client之間的通信。SDP server維護着一個服務條目(service record)列表.每一個服務條目描述一個單獨的服務屬性。 SDP client能夠經過發送SDP request來獲得服務條目。 server
若是一個client或者依附於client之上的應用程序決定使用某個service. 它建立一個單獨的鏈接到service提供者。 SDP 只提供偵測Service的機制,但不提供如何利用這些Service的機制。Sam以爲,這裏實際上是說:SDP只提供偵測Service的辦法,但如何用,SDP無論。 事務
每一個Bluetooth Device最多隻能擁有一個SDP Server。若是一個Bluetooth Device只擔任Client,那它不須要SDP Server。但一個Bluetooth Device能夠同時擔當SDP Server和SDP client. ci
Service Record(Service 條目): 資源
一個service是一個實體爲另外一個實體提供信息,執行動做或控制資源。一個service能夠由軟件,硬件或軟硬件結合提供。 it
全部的Service信息都包含於一個Service Record內。一個Service Record 包含一個Service attribute(Service屬性) list. io
在一個SDP Server內,每一個Service Record擁有一個32-bit的惟一性數據。一般,這個惟一性只是在每一個SDP Server內部。 若是SDP Server S1 和SDP Server S2擁有一樣的一個Service Record。那他們在不一樣SDP Sever內的獨特數值並不必定相同。 class
SDP在SDP Server增長或減小Service Record時,並不會通知SDP client.
Service Attribute(Service 屬性):
每一個Service屬性描述servcie的特性.一個Service Attribute由2部分:
Attribute ID + Attribute Value。
Attribute ID:16-bit無符號整數,用於區別一個Service Record內的其它屬性。
Attribute Value:Attribute值。
Service Class:
每一個Service 都是某個Service Class的實例. Service Class定義了Service Record中包含的Service 屬性。屬性ID,屬性值都被定義好了。
每一個Service Class也有一個獨特ID。這個Service Class標識符包含在屬性值ServiceClassIDList屬性中。並描繪爲UUID。自從Service Record中的屬性格式以及含義依賴於Service Class後,ServiceClassIDList屬性變得很是重要。
Searching For Service:
Service Search transaction(事務?)容許client獲得Service Record Handle。一旦SDP Client獲得Service Record Handle,它就能夠請求這個Record內具體屬性的值。
若是某個屬性值UUID,則能夠經過查找UUID查到這個屬性。
UUID: universally unique identifier.(惟一性標識符)
SDP協議棧使用request/response模式工做,每一個傳輸過程包括一個request protocol data unit(PDU)和一個response PDU. SDP使用L2CAP鏈接傳輸數據。在發送Request PDU但未收到Response PDU以前,不能向同一個server再發送Request PDU。
PDU:protocol Data unit
PDU ID:用來識別PDU。
TransactionID:
用來識別Request PUD以及Response PUD。並用來對比某個Response PUD是否對應着Request PUD。