ONVIF 에서는 WS-Discovery (Web Services Dynamic Discovery) 표준을 기반으로 한 장치 검색 (Device Discovery) 웹 서비스를 사용합니다. WS-Discovery 표준의 특정 부분을 확장하거나 제약하여 사용하기 때문에 WS-Discovery 와 완벽하게 호환되지는 않습니다.
NVC 는 장치 검색을 통해 사용 가능한 NVT 를 검색합니다. NVT (Network Video Transmitter) 는 WS-Discovery 의 Target Service 역할에 해당하고, NVC (Network Video Client) 는 WS-Discovery 의 Client 역할에 해당합니다. 장치 검색에서는 Ws-Discovery 의 DP (Discover Proxy) 를 확장하여 보다 복합한 네트워크 상황도 처리할 수 있습니다. WS-Discovery 와는 달리 NVC/NVT 는 DP 역할은 하지 않습니다. endpoint reference 에 URN:UUID 를 사용합니다.
NVT 동작 모드
- Discoverable – 기본 모드로 일반적인 Target Service 처럼 동작합니다. 네트워크에 참여하거나 메타 데이터 변경 시 메시지를 보내며, Probe 와 Resolve 메시지를 Listen 하고, 그에 대한 응답을 보냅니다.
- Non-discoverable – 메시지를 Listen 하지 않습니다. (DOS 공격 대비)
메시지 교환
메시지 종류
- HELLO : 단방향 메시지로, Target Service 가 네트워크에 참여하거나 메타 데이터를 변경했을 경우에 보낸다.
- Bye : 단방향 메시지로 Target Service 가 해당 네트워크에서 떠날 때 보낸다.
- Probe : Client 가 Type 과 Scope 에 해당하는 Target Service 를 찾을 때 사용한다.
- Probe Match : Probe 메시지에 대한 Target Service 의 응답
- Resolve : Client 가 이름으로 Target Service 를 찾을 때 사용한다.
- Resolve Match : Resolve 메시지에 대한 Target Service 의 응답
장치 검색에서는 보두 복잡한 네트워크 환경에서도 동작할 수 있도록 하기 위해 WS-Discovery 의 Discovery Proxy(DP) 를 확장하여 사용합니다. WS-Discovery 에서 NVC 와 NVT 가 같은 네트워크 도메인에 존재하지 않으면, NVC가 멀티 캐스트 Probe 메시지를 통해 NVT 를 찾을 수 없습니다. 장치 검색의 DP 는 다음과 같은 네트워크 상황에서도 검색을 지원합니다.
- NVT 는 private 네트워크에 존재하고, NVC 는 public 네트워크에 존재하는 경우
- NVT 는 public 네트워크에 존재하고, NVC 는 private 네트워크에 존재하는 경우
- NVT 는 특정 private 네트워크에 존재하고, NVC 는 그와 다른 private 네트워크에 존재하는 경우
- NVT 와 NVC 둘다 public 네트워크에 존재하는 경우
Endpoint reference
[address] : URN:UUID 형식을 사용
[reference properties] : IPv4/v6 addresses
SOAP binding for endpoint references
[address] : SOAP 메시지의 [destination] header field
[reference property/parameter] : SOAP 메시지의 header block
Service addresses
HELLO 메시지 안의 <d:Xaddrs> 엘리먼트가 NVT 장치의 서비스 주소를 나타냄
NVT 는 80 번 포트 장치 서비스 엔트리를 제공해야 한다.
HELLO
Types
NVT는 <d:Types> 에 dn:NetworkVideoTransmitter 이 있어야 한다.
Scope
[scheme]://authority/<path>
ex) onvif://www.onvif.org/<path>
type/video_encoder
type/ptz
type/audio_encoder
type/video_analytics
location
hardware
name
Probe/Probe Match
NVT 는 Probe Match 메시지에 해당하는 장치 서비스에 대한 <d:Xaddrs> 엘리먼트를
포함하고 있어야 한다. 대체로 <d:Xaddrs> 엘리먼트는 해당 서비스에 대한 관리와
설정에 대한 하나의 주소만을 가지고 있다고 한다.
Resolve/Resolve Match
대부분 Resolve 와 Resolve Match 메시지 교환을 불필요하다고 한다. 하지만
[WS-Discovery] 와의 호환을 위해서는 resolve match response 를 구현해야
한다고 한다.
Bye
네트워크에서 나갈 때 보내는 단방향 메시지
SOAP Fault Messages
멀티 캐스트에 대해서는 무시한다.
유니 캐스트에 대해서는 에러 발생 시 SOAP Fault Message 를 보낸다.
멀티 캐스트 메시지
DISCOVERY_PORT : port 3702 [IANA]
IPv4 multicast address: 239.255.255.250
IPv6 multicast address: FF02::C (link-local scope)
메시지는 SOAP over UDP 를 사용하여 보낸다.
Discovery Proxy 가 없을 경우 메시지 교환 시나리오 (예상)
NVT
HELLO
src : UDP/[Local Port]
dst : Multicast UDP/3702
NVC
Probe
src : UDP/[Local Port]
dst : Multicast UDP/3702
NVT
Probe Match
src : UDP/3702
dst : Client UDP/[Client Port]
NVC
GetXXX
src : HTTP/[Local Port]
dst: HTTP/80
NVT
GetXXXResponse (metadata)
src : HTTP/80
dst: Client HTTP/[Client Port]
NVT
Bye
src : UDP/[Local Port]
dst : Multicast UDP/3702

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.0 Korea License.

좋은 정보 감사합니다.