一、SSDP協議簡介
SSDP(簡單服務發現協議)是應用層協議,是構成UPnP(通用即插即用)技術的核心協議之一。它為網絡客戶端(network client)提供了一種發現網絡服務(network services)的機制,采用基於通知和發現路由的多播方式實現。
二、SSDP實現
簡單服務發現協議是在HTTPU和HTTPMU的基礎上實現的協議。
按照協議的規定,當一個控制點(客戶端)接入網絡的時候,它可以向一個特定的多播地址的SSDP端口使用M-SEARCH方法發送“ssdp:discover”消息。當設備監聽到這個保留的多播地址上由控制點發送的消息的時候,設備會分析控制點請求的服務,如果自身提供了控制點請求的服務,設備將通過單播的方式直接響應控制點的請求。
類似的,當一個設備接入網絡的時候,它應當向一個特定的多播地址的SSDP端口使用NOTIFY方法發送“ssdp:alive”消息。控制點根據自己的策略,處理監聽到的消息。考慮到設備可能在沒有通知的情況下停止服務或者從網絡上卸載,“ssdp:alive”消息必須在HTTP協議頭CACHE-CONTROL里面指定超時值,設備必須在約定的超時值到達以前重發“ssdp:alive”消息。如果控制點在指定的超時值內沒有再次收到設備發送的“ssdp:alive”消息,控制點將認為設備已經失效。
當一個設備計划從網絡上卸載的時候,它也應當向一個特定的多播地址的SSDP端口使用NOTIFY方法發送“ssdp:byebye”消息。但是,即使沒有發送“ssdp:byebye”消息,控制點也會根據“ssdp:alive”消息指定的超時值,將超時並且沒有再次收到的“ssdp:alive”消息對應的設備認為是失效的設備。
在IPv4環境,當需要使用多播方式傳送相關消息的時候,SSDP一般使用多播地址239.255.255.250和UDP端口號1900。
根據互聯網地址指派機構的指派,SSDP在IPv6環境下使用多播地址FF0X::C,這里的X根據scope的不同可以有不同的取值。
三、SSDP請求類型
兩種類型的SSDP請求消息會通過SSDP多播地址發送:
1. 發現請求(Discovery request 或查詢請求)。SSDP客戶端向此地址發送HTTP UDP 發現請求,查詢某種類型的服務。SSDP服務在此地址上監聽服務發現請求。當服務監聽到的HTTP UDP 發現請求和它自己提供的服務匹配時,它以單播方式發送HTTP UDP 響應。
2. 存在通知(notification)。SSDP服務向此多播地址發送HTTP UDP 通知消息來宣布自己的存在。
發現結果(discovery results)和存在通知消息(presence announcements)提供的信息包括:
服務的類型URI
服務名稱USN:唯一標識一種服務實例。
位置信息:發現結果和存在通知可包含一個或多個位置URI,客戶端利用位置信息可以找到它需要的服務。
期限信息:客戶端在自己的cache中保存此服務多長時間。如果期限過了,關於此服務的信息會被從cache中拿掉。當客戶端接收到的發現結果或存在通知包含的USN和cache中的某條匹配,則更新。
四、SSDP協議消息
1、設備查詢消息
當一個控制點加入到網絡中時,設備發現過程允許控制點尋找網絡上感興趣的設備。發現消息包括設備的一些特定信息或者某項服務的信息,例如它的類型、標識符、和指向XML設備描述文檔的指針。從設備獲得響應從本質上說,內容與多址傳送的設備廣播相同,只是采用單址傳送方式。設備查詢通過HTTP協議擴展M-SEARCH方法實現的。典型的設備查詢請求消息格式:
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協議頭的含義簡介:
CACHE-CONTROL |
max-age指定通知消息存活時間,如果超過此時間間隔,控制點可以認為設備不存在 |
DATE |
指定響應生成的時間 |
EXT |
向控制點確認MAN頭域已經被設備理解 |
LOCATION |
包含根設備描述得URL地址 |
SERVER |
飽含操作系統名,版本,產品名和產品版本信息 |
ST |
內容和意義與查詢請求的相應字段相同 |
USN |
表示不同服務的統一服務名,它提供了一種標識出相同類型服務的能力。 |
2、設備通知消息
在設備加入網絡,UPnP發現協議允許設備向控制點廣告它的服務。它使用向一個標准地址和端口多址傳送發現消息來實現。控制點在此端口上偵聽是否有新服務加入系統。為了通知所有設備,一個設備為每個其上的嵌入設備和服務發送一系列相應的發現消息。每個消息也包含它表征設備或服務的特定信息。
2.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方法發送的請求沒有回應消息,典型的設備通知消息格式如下:
各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。
2.2、ssdp:byebye消息
在設備和它的服務將要從網絡中卸載時,設備應該對於每個未超期的ssdp:alive消息多播方式傳送ssdp:byebye消息。但如果設備突然從網絡卸載,它可能來不及發出這個通知消息。因此,發現消息必須在CACHE-CONTROL包含超時值,如果不重新發出廣告消息,發現消息最后超時並從控制點的緩存中除去。典型的設備卸載消息格式如下:
專有設備或服務可以不遵循標准的UPNP模版。但如果設備或服務提供UPNP發現、描述、控制和事件過程的所有對象,它的行為就像一個標准的UPNP設備或服務。為了避免命名沖突,使用專有設備命名時除了UPNP域之外必須包含一個前綴"urn:schemas-upnp-org"。在與標准模版相同時,應該使用整數版本號。但如果與標准模版不同,不可以使用設備復用和徽標。
簡單設備發現協議不提供高級的查詢功能,也就是說,不能完成某個具有某種服務的設備這樣的復合查詢。在完成設備或者服務發現之后,控制點可以通過設備或服務描述的URL地址完成更為精確的信息查詢。