WS-Discovery(Web Services Discovery)是一種網路協定,主要目的是讓裝置或服務能在本機網路上自動被發現,而不需要使用者手動輸入IP位址或其他設定資訊。
你可以把它想像成一個「尋找服務的廣播系統」。當一個新裝置(例如IP攝影機、印表機或智慧型家電)連上網路後,它會自動發送廣播訊息,宣告自己的存在;而其他裝置(例如NVR主機或電腦)則會監聽這些廣播,或主動發出「尋找」的廣播,來發現這些新裝置。
WS-Discovery 的運作原理
WS-Discovery 的運作基於 多點傳播(Multicast) 技術,這是一種一對多的通訊方式。它的核心流程如下:
探測(Probe): 尋找服務的客戶端(如您的NVR主機)會透過多點傳播位址,發送一個探測訊息(Probe Message),廣播給同一個區域網路上的所有裝置。這個探測訊息通常會包含它想要尋找的服務類型。
回應(ProbeMatch): 區域網路上的所有裝置收到這個探測訊息後,如果發現自己提供了客戶端正在尋找的服務,就會直接向該客戶端單獨發送一個回應訊息(ProbeMatch Message),告知自己的服務資訊,例如IP位址、服務名稱等。
上線(Hello)與離線(Bye): 此外,裝置在首次上線時,也會主動發送一個「Hello」訊息,宣告自己的存在;當裝置正常關機或離線時,則會發送「Bye」訊息,告知其他裝置自己即將離線。
透過這種廣播和回應的機制,裝置之間可以動態地互相發現,不需要依賴一個中央伺服器來管理所有裝置的清單。
在監控領域的應用
WS-Discovery 在監控領域中扮演著非常關鍵的角色,特別是在 ONVIF(開放網路視訊介面論壇) 協定中。
當您將一台支援 ONVIF 的IP攝影機接入網路後,它會自動發送 WS-Discovery 廣播。接著,您的NVR主機(如果它也支援 ONVIF)會自動探測到這台攝影機,並將其顯示在裝置清單中,讓您可以一鍵加入,省去了手動輸入攝影機IP位址的繁瑣步驟。
簡單來說,WS-Discovery 讓「隨插即用」(Plug and Play)在網路監控攝影機上得以實現,大幅簡化了安裝和設定的過程。
WS-Discovery 概要
-
定義:基於 SOAP over UDP 的裝置自動發現協定。用於同網段的零設定探索。
-
傳輸:UDP/3702,多播至 239.255.255.250:3702(IPv4)。回覆通常為單播。
-
物件:以 SOAP 訊息封裝 XML。核心元素為
Types
、Scopes
、XAddrs
。-
Types
:服務類型,例如 ONVIF 常用dn:NetworkVideoTransmitter
。 -
Scopes
:字串標籤,如onvif://www.onvif.org/name/StoreCam1
、.../location/Lobby
。 -
XAddrs
:可連線服務的 URL(如http://IP:80/onvif/device_service
)。
-
訊息種類
-
Hello:裝置上線廣播。
-
Bye:裝置下線廣播。
-
Probe:用戶端發出「誰符合某 Types/Scopes?」的查詢(多播)。
-
ProbeMatches:裝置回覆,提供
XAddrs
。 -
Resolve / ResolveMatches:已知 EPR 位址時解析詳細資訊(較少用)。
ONVIF 中的流程
-
Client 多播 Probe(Types=
dn:NetworkVideoTransmitter
)。 -
IPCam 單播 ProbeMatches,內含
XAddrs
。 -
Client 對
XAddrs
(通常http://IP:80/onvif/device_service
)建立 SOAP 連線。 -
呼叫
GetCapabilities
→Media.GetProfiles
→GetStreamUri
取得 RTSP。
網路與相容性重點
-
只保證同 L2 網段可用。跨 VLAN/子網需多播路由或代理。
-
交換器啟用 IGMP Snooping 時,需正確的 IGMP Querier 才不會丟多播。
-
防火牆需放行 UDP/3702 多播與單播回覆。
-
預設 TTL=1。若有跨子網需求,提升 TTL 並配置路由端支援多播。
-
無加密與驗證。只用於發現,不用於敏感控制。
除錯與測試
-
Wireshark 篩選:
udp.port == 3702
。 -
常見失敗原因:
-
不同網段或 Wi-Fi AP 隔離多播 → 看不到回覆。
-
Windows/Linux 防火牆擋 UDP/3702。
-
裝置未啟用 ONVIF 或關閉 WS-Discovery。
-
實作提示(Python)
-
發送多播:設
IP_MULTICAST_TTL
、IP_MULTICAST_IF
,送出 Probe。 -
接收回覆:用
recvfrom
收單播,解析 XML 找XAddrs
抽 IP。 -
取得串流:對
XAddrs
走 ONVIF Media 服務拿 RTSP,再交給 ffplay/OpenCV。
適用場景
-
初次佈署 IPCam/NVR 時的自動掃描。
-
動態環境上線/下線通知(靠 Hello/Bye)做即時資源表更新。
沒有留言:
張貼留言