SSDP 簡單服務發現協議

SSDP 簡單服務發現協議,是應用層協議,是構成UPnP(通用即插即用)技術的核心協議之一。它爲網絡客戶端(network client)提供了一種發現網絡服務(network services)的機制,採用基於通知和發現路由的多播方式實現。html

SSDP多播地址:239.255.255.250:1900(IPv4),FF0x::C(IPv6)緩存

兩種類型的SSDP請求消息會經過SSDP多播地址發送:網絡

1. 發現請求(Discovery request 或查詢請求)。SSDP客戶端向此地址發送HTTP UDP 發現請求,查詢某種類型的服務。SSDP服務在此地址上監聽服務發現請求。當服務監聽到的HTTP UDP 發現請求和它本身提供的服務匹配時,它以單播方式發送HTTP UDP 響應。ui

2. 存在通知(notification)。SSDP服務向此多播地址發送HTTP UDP 通知消息來宣佈本身的存在。操作系統

 

發現結果(discovery results)和存在通知消息(presence announcements)提供的信息包括:.net

服務的類型URIhtm

服務名稱USN:惟一標識一種服務實例。blog

位置信息:發現結果和存在通知可包含一個或多個位置URI,客戶端利用位置信息能夠找到它須要的服務。ci

期限信息:客戶端在本身的cache中保存此服務多長時間。若是期限過了,關於此服務的信息會被從cache中拿掉。當客戶端接收到的發現結果或存在通知包含的USN和cache中的某條匹配,則更新。路由

客戶端的服務緩存像下面這樣:

【SSDP發現請求】ssdp:discover

ssdp:discover 必須包含一個ST頭,客戶端使用ST頭來代表他們想發現的服務類型。ssdp:discover 必須包含一個帶 *  的請求URI。

M-SEARCH * HTTP/1.1

S: uuid:ijklmnop-7dec-11d0-a765-00a0c91e6bf6

Host: 239.255.255.250:1900

Man: "ssdp:discover"

ST: ge:fridge

MX: 3

各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組織定義。

 

SSDP服務發現本身的服務類型和ST中指明的服務類型匹配時,能夠向ssdp:discover來自的IP地址/端口響應。響應消息應該包含服務的位置信息(Location 或AL頭),ST和USN頭。響應消息應該包含cache控制信息(max-age 或者 Expires頭),若是二者都包含了,Expires 頭優先,若是二者都缺失,那麼這條服務消息不能被cache。

HTTP/1.1 200 OK

S: uuid:ijklmnop-7dec-11d0-a765-00a0c91e6bf6

Ext:

Cache-Control: no-cache="Ext", max-age = 5000

ST: ge:fridge

USN: uuid:abcdefgh-7dec-11d0-a765-00a0c91e6bf6

AL: <blender:ixl><http://foo/bar>

各HTTP協議頭的含義簡介:

CACHE-CONTROL:max-age指定通知消息存活時間,若是超過此時間間隔,控制點能夠認爲設備不存在

DATE:指定響應生成的時間

EXT:向控制點確認MAN頭域已經被設備理解

LOCATION:包含根設備描述得URL地址

SERVER:飽含操做系統名,版本,產品名和產品版本信息

ST:內容和意義與查詢請求的相應字段相同

USN:表示不一樣服務的統一服務名,它提供了一種標識出相同類型服務的能力。

 

【SSDP存在通知消息】

SSDP服務經過存在通知消息來向客戶端宣佈本身的存在,更新期限信息,更新位置信息。

ssdp:alive 消息必須將 NT 設置成本身的服務類型,USN頭設置成本身的USN。ssdp:alive 應該包括Location或者AL頭,若是沒有DNS支持的話,使用SSDP服務的IP地址來表明位置。ssdp:alive還應該包括cache控制信息,max-age或者Expires頭。

NOTIFY * HTTP/1.1

Host: 239.255.255.250:reservedSSDPport

NT: blenderassociation:blender

NTS: ssdp:alive

USN: someunique:idscheme3

AL: <blender:ixl><http://foo/bar>

Cache-Control: max-age = 7393

ssdp:alive 沒有響應消息。

 

SSDP服務能夠發送ssdp:byebye 來宣佈本身下線。ssdp:byebye 必須將NT設置成本身的服務類型,將USN頭設置成本身的USN。ssdp:byebye 也沒有響應消息。當客戶端接收到ssdp:byebye 消息,刪掉cache裏面的相關條目。

NOTIFY * HTTP/1.1

Host: 239.255.255.250:reservedSSDPport

NT: someunique:idscheme3

NTS: ssdp:byebye

USN: someunique:idscheme3

 

【SSDP Auto-Shut-Off Algorithm】

A mechanism is needed to ensure that SSDP does not cause such a high level of traffic that it overwhelms the network it is running on.

【ssdp:all】

A mechanism is needed to enable a client to enumerate all the services available on a particular SSDP multicast channel/port.

 

【參考】

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

http://www.cnblogs.com/debin/archive/2009/12/01/1614543.html

 

轉 : http://blog.csdn.net/lilypp/article/details/6631951

相關文章
相關標籤/搜索