SSDP,簡單服務發現技術

SSDP,簡單服務發現技術


SSDP:Simple Sever Discovery Protocol,簡單服務發現協議,此協議爲網絡客戶提供一種無需任何配置、管理和維護網絡設備服務的機制。此協議採用基於通知和發現路由的多播發現方式實現。協議客戶端在保留的多播地址:239.255.255.250:1900(IPV4)發現服務,(IPv6 是:FF0x::C)同時每個設備服務也在此地址上上監聽服務發現請求。如果服務監聽到的發現請求與此服務相匹配,此服務會使用單播方式響應。

常見的協議請求消息有兩種類型,第一種是服務通知,設備和服務使用此類通知消息聲明自己存在;第二種是查詢請求,協議客戶端用此請求查詢某種類型的設備和服務。請求消息中包含設備的特定信息或者某項服務的信息,例如設備類型、標識符和指向設備描述文檔的URL地址。下圖顯示這兩類通知消息和HTTP協議的關係

 

 

(順便對比一下)傳統HTTP報文是基於TCP的

設備發現過程允許控制點使用一個設備類型或標識,或者是服務類型進行查詢。這要求標準設備或服務類型,或者設備特定實例的發現和廣告消息基於一個獨一無二的標識,UPnP設備和服務類型的定義是UPnP論壇工作委員會的責任。從設備獲得響應的內容基本上與多址傳送的設備廣播相同,只是採用單址傳送方式。

SSDP 協議消息

1、設備查詢消息

  當一個控制點加入到網絡中時,設備發現過程允許控制點尋找網絡上感興趣的設備。發現消息包括設備的一些特定信息或者某項服務的信息,例如它的類型、標識符、和指向XML設備描述文檔的指針。從設備獲得響應從本質上說,內容與多址傳送的設備廣播相同,只是採用單址傳送方式。設備查詢通過HTTP協議擴展M-SEARCH方法實現的。典型的設備查詢請求消息格式:

 

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: seconds to delay response
ST: search target

 

各HTTP協議頭的含義簡介:

HOST:設置爲協議保留多播地址和端口,必須是:239.255.255.250:1900(IPv4)或FF0x::C(IPv6)

MAN:設置協議查詢的類型,必須是:ssdp:discover

MX:設置設備響應最長等待時間,設備響應在0和這個值之間隨機選擇響應延遲的值。這樣可以爲控制點響應平衡網絡負載。

ST:設置服務查詢的目標,它必須是下面的類型:

  ssdp:all 搜索所有設備和服務 
upnp:rootdevice 僅搜索網絡中的根設備 
uuid:device-UUID 查詢UUID標識的設備 
urn:schemas-upnp-org:device:device-Type:version 查詢device-Type字段指定的設備類型,設備類型和版本由UPNP組織定義。 
urn:schemas-upnp-org:service:service-Type:version 查詢service-Type字段指定的服務類型,服務類型和版本由UPNP組織定義。

 

 

在設備接收到查詢請求並且查詢類型(ST字段值)與此設備匹配時,設備必須向多播地址239.255.255.250:1900迴應響應消息。典型:

 

HTTP/1.1 200 OK
CACHE-CONTROL: max-age = seconds until advertisement expires
DATE: when reponse was generated
EXT:
LOCATION: URL for UPnP description for root device
SERVER: OS/Version UPNP/1.0 product/version
ST: search target
USN: advertisement UUID

 

 

各HTTP協議頭的含義簡介:

 

CACHE-CONTROL max-age指定通知消息存活時間,如果超過此時間間隔,控制點可以認爲設備不存在
DATE 指定響應生成的時間
EXT 向控制點確認MAN頭域已經被設備理解
LOCATION 包含根設備描述得URL地址
SERVER 飽含操作系統名,版本,產品名和產品版本信息
ST 內容和意義與查詢請求的相應字段相同
USN 表示不同服務的統一服務名,它提供了一種標識出相同類型服務的能力。

 

 

2、設備通知消息

 

在設備加入網絡,UPnP發現協議允許設備向控制點廣告它的服務。它使用向一個標準地址和端口多址傳送發現消息來實現。控制點在此端口上偵聽是否有新服務加入系統。爲了通知所有設備,一個設備爲每個其上的嵌入設備和服務發送一系列相應的發現消息。每個消息也包含它表徵設備或服務的特定信息。

3.1.1 ssdp:alive消息

在設備加入系統時,它採用多播傳送方式發送發現消息,包括告知設備包含的根設備信息,所有嵌入設備以及它包含的服務。每個發現消息包含四個主要對象:

  1. 在NT頭中包含的潛在搜索目標。
  2. 在USN頭中包含的複合發現標識
  3. 在LOCATION頭中關於設備信息的URL地址
  4. 在CACHE-CONTROL頭中表示的廣告消息的合法存在時間。

對於根設備,存在三種發現消息:

 

NT USN
根設備的UUID 根設備的UUID
設備類型:設備版本 根設備的UUID,設備類型:設備版本
upnp:rootdevice 根設備的UUID,設備類型和upnp:rootdevice

 

對於根設備,存在兩種發現消息:

 

NT USN
嵌入設備的UUID 嵌入設備的UUID
設備類型:設備版本 嵌入設備的UUID,設備類型和設備版本

 

對於每個服務:

 

NT USN
服務類型:服務版本 相關設備的UUID,服務類型和服務版本

 

如果一個根設備有n個嵌入設備,m個嵌入服務,而且包含k個不同的服務類型,這將會發出3 + 2n + k次請求。這些廣告消息像控制點描述了設備的所有信息。這些消息必須作爲一系列一起發出,發送的順序無關緊要,但是不能對單個消息進行刷新或取消的操作。選擇一個適當的持續期是在最小化網絡通訊和最大化設備狀態及時更新之間求得一個平衡,相對較短的持續時間可以保證控制點在犧牲網絡流量的前提下獲得設備的當前狀態;持續期越長可以大大減少設備刷新造成的網絡流量。一般而言,設備製造商應該選擇一個適當的持續時間值。

由於UDP協議是不可信的,設備應該發送多次設備發現消息。而且爲了降低控制點無法收到設備或服務廣告消息的可能性,設備應該定期發送它的廣告消息。在設備加入網絡時,它必須用NOTIFY方法發送一個多播傳送請求。NOTIFY方法發送的請求沒有迴應消息,典型的設備通知消息格式如下:

 

NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900CACHE-CONTROL: max-age = seconds until advertisement expires
LOCATION: URL for UPnP description for root device
NT: search target
NTS: ssdp:alive
USN: advertisement UUID

 

各HTTP協議頭的含義簡介:

 

HOST 設置爲協議保留多播地址和端口,必須是239.255.255.250:1900。
CACHE-CONTROL max-age指定通知消息存活時間,如果超過此時間間隔,控制點可以認爲設備不存在
LOCATION 包含根設備描述得URL地址
NT 在此消息中,NT頭必須爲服務的服務類型。
NTS 表示通知消息的子類型,必須爲ssdp:alive
USN 表示不同服務的統一服務名,它提供了一種標識出相同類型服務的能力。

 

一個發現響應可以包含0個、1個或者多個服務類型實例。爲了做出分辨,每個服務發現響應包括一個USN:根設備的標識。在同樣的設備裏,一個服務類型的多個實例必須用包含USN:ID的服務標識符標識出來。例如,一個燈和電源共用一個開關設備,對於開關服務的查詢可能無法分辨出這是用於燈的。UPNP論壇工作組通過定義適當的設備層次以及設備和服務的類型標識分辨出服務的應用程序場景。這麼做的缺點是需要依賴設備的描述URL。

3.1.2 ssdp:byebye消息

在設備和它的服務將要從網絡中卸載時,設備應該對於每個未超期的ssdp:alive消息多播方式傳送ssdp:byebye消息。但如果設備突然從網絡卸載,它可能來不及發出這個通知消息。因此,發現消息必須在CACHE-CONTROL包含超時值,如果不重新發出廣告消息,發現消息最後超時並從控制點的緩存中除去。典型的設備卸載消息格式如下:

 

NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900NT: search target
NTS: ssdp:byebye
USN: advertisement UUID各HTTP協議頭的含義簡介:
HOST	設置爲協議保留多播地址和端口,必須是239.255.255.250:1900
NT	在此消息中,NT頭必須爲服務的服務類型。
NTS	表示通知消息的子類型,必須爲ssdp:alive
USN	表示不同服務的統一服務名,它提供了一種標識出相同類型服務的能力

 

 

專有設備或服務可以不遵循標準的UPNP模版。但如果設備或服務提供UPNP發現、描述、控制和事件過程的所有對象,它的行爲就像一個標準的UPNP設備或服務。爲了避免命名衝突,使用專有設備命名時除了UPNP域之外必須包含一個前綴"urn:schemas-upnp-org"。在與標準模版相同時,應該使用整數版本號。但如果與標準模版不同,不可以使用設備複用和徽標。

簡單設備發現協議不提供高級的查詢功能,也就是說,不能完成某個具有某種服務的設備這樣的複合查詢。在完成設備或者服務發現之後,控制點可以通過設備或服務描述的URL地址完成更爲精確的信息查詢。

 

 

參考資料:

1、SSDP協議原文參考:http://tools.ietf.org/html/draft-cai-ssdp-v1-03

2、RFC 2616: 
關於超文本傳輸協議(HTTP 1.1)原文IETF的RFC文檔 http://www.ietf.org/rfc/rfc2616.txt?number=2616

3、UPnP協議框架:

http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.0.pdf

發佈了13 篇原創文章 · 獲贊 12 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章