SSDP協議

SSDP,Simple Service Discovery Protocol (簡單服務發現協議)。

這是用來實現無配置,自發現局域網內部服務的協議。

由IPv4下有固定的239.255.255.250:1900這一固定的地址來負責多播數據。

不過,從我的學習經歷來說,要啃這種東西,最好的方法還是用例子搞懂名詞,並實踐一次。其實SSDP協議的請求就三種: byebye, alive, discovery

byebye請求

NOTIFY * HTTP/1.1
Host: 239.255.255.250:1900
NT: someunique:idscheme3
NTS: ssdp:byebye
USN: someunique:idscheme3
  • NOTIFY 通知所有廣播域的機器
  • HOST 值是固定的(IPv4),算是協議的一部分
  • NT (Notification Type)這個是GENA的定義,即通知類型,值一般是當前設備的類型
  • NTS (Notification Sub-Type)通知子類型,如果要遵守SSDP,這個值就代表了請求的類型,但是爲什麼NTS和NT搞混了呢……協議中寫得非常明白 

    5.3.5. Shouldn’t the NT and NTS values be switched?

    Yes, they should. Commands such as ssdp:alive and ssdp:byebye should

    be NT values and the service type, where necessary, should be the

    NTS. The current mix-up is a consequence of a previous design where

    the NT header was used in a manner much like we use the USN today.

    This really needs to change.

  • USN 這個設備的UUID,防止設備的IP或者網絡環境改變後,連接至錯誤的設備。

alive(服務上線/廣播存活/心跳包)

NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
CACHE-CONTROL: max-age=100
LOCATION: http://10.5.4.81:49155/TxMediaRenderer_desc.xml
NT: upnp:rootdevice
NTS: ssdp:alive
USN: uuid:001e4fd3fa0e0000_MR::upnp:rootdevice
  • CACHE-CONTROL說明這個設備狀態至少在100秒內不會過期,過期時,所有設備就必須要刷新這信息,如果得不到新的數據,則認爲此設備不可用。如果不提供CACHE-CONTROL或者EXPIRES,此設備的信息將不允許緩存,超時機制由接受端決定
  • LOCATION此設備的控制點或描述文件所在地

discovery請求

M-SEARCH * HTTP/1.1
Host:239.255.255.250:1900
ST:urn:schemas-upnp-org:device:InternetGatewayDevice:1
Man:"ssdp:discover"
MX:3
  • M-SEARCH 說明這是強制的搜索方法(由Mandatory Extensions in 
    HTTP中的Mandatory HTTP Requests確定)
  • ST (search term)搜索條件,指明需要搜索的設備,可以是類型,服務,甚至是UUID,至於怎麼迴應嘛……那是服務端的事了
  • Man M-SEARCH請求必須帶的數據項,值必須爲“ssdp:discover”
  • MX 優先級,數字越高,優先級越低

服務發現的現實流程

+---------+ +---------+               +-----------+
            | Client  | | Server  |               | Multicast |
            +---------+ +---------+               +-----------+
---------------\ |           |	         |
| Initialized  |-|           |	         |
---------------- |           |	         |
  |           |	         |
  | discovery |	         |
  |------------------------------------->|
  |           |	         |
  |           |          Client wants ST |
  |           |< ------------------------|
  |           | -------------------\     |
  |           |-| In discovery ST? |     |
  |           | --------------------     |
  |           |	         |
  |           | (In ST) alive            |
  |           |------------------------->|
  |           |	         |
  |           |           Here is Server |
  |< ------------------------------------|
  |           |	         |


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