ssdp协议 upnp_SSDP 简单服务发现协议
SSDP 簡單服務發現協議,是應用層協議,是構成UPnP(通用即插即用)技術的核心協議之一。它為網絡客戶端(network client)提供了一種發現網絡服務(network services)的機制,采用基于通知和發現路由的多播方式實現。
SSDP多播地址:239.255.255.250:1900(IPv4),FF0x::C(IPv6)
兩種類型的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發現請求】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:
各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:
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协议 upnp_SSDP 简单服务发现协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python发邮件11002_【pyth
- 下一篇: java 图片导出_java导出含图片的