본문 바로가기

Software/Network

Device Discovery Protocol - SSDP(Simple Service Discovery Protocol)

해당 글은 http://www.joinc.co.kr/w/Site/IOT/Discovery 에서 정리 되었습니다.



1. 소개


근거리 네트워크에서 기기를 찾기 위한 방법을 알아보자.


기기를 근거리에서 연결하던, 인터넷에 연결하는 방법을 사용하던 일단 Discovery(발견 : 탐색)을 해야 한다. 기기를 Discover 하지 않더라도 유저가 직접 기기 앞에서 - NFC, Bluetooth 혹은 기기를 wifi-AP로 설정하여 등록하는 방법이 있겠으나, 사용성을 높이기 위해서는 알아서 주변의 기기를  찾아주는것이 좋다. 이런 일을 위한 Discovery 프로토콜이 몇 개 있는데 이들 프로토콜을 살펴보고, 이들 프로토콜을 이용하여 어떻게 기기를 자동으로 찾아서 등록할 수 있을지에 대하여 고민해 보려고 한다.



2. SSDP(Simple Service Discovery Protocol)


SSDP(Simple Service Discovery Protocol)은 네트워크 서비스나 정보를 찾기 위해 사용하는 네트워크 프로토콜이다. SSDP를 이용하면, DHCP 나 DNS와 같은 네트워크 서버 혹은 정적인 호스트 설정 없이 이런 일들을 수행할 수 있다.


SSDP는 일반 거주지와 소규모 사무 환경에서 UPnP(Universal Plug and Play)를 위한 기본적인 프로토콜로 이미 널리 사용되고 있다. 1999년 MS와 HP가 IETF에 드래프트 했다. IETF제안이 만료된 이후 SSDP는 UPnP 표준에 포함됐다.



2.1 주요 용어들


ARP

 Address Resolution Protocol

CP

 Control Point 

DCP 

 Device Control Protocol 

 DDD

 Device Description Document

DHCP 

 Dynamic Host Configuration Protocol 

DNS 

 Domain Name System 

GENA 

 General Event Notification Architecture 

HTML 

 Hypertext Markup Language 

HTTP 

 Hypertext Transfer Protocol 

SCPD 

 Service Control Protocol Description 

SOAP 

 Simple Object Access Protocol 

SSDP 

 Simle Service Discovery Protocol 

UUID 

 Universally Unique Identifier 

XML 

 Extensible Markup Language 



2.2 개요


SSDP는 HTTPU(UDP 기반의 HTTP)를 이용한다. HTTP Protocol을 사용함으로 모든 데이터는 TEXT기반으로 통신한다. 사용하는 포트는 UDP 1900이며, IP Multicast 주소를 이용한다. IPv4에서 멀티캐스트 주소는 239.255.255.250, IPv6에서는 ff0x::c이다.


다음은 SSDP에서 사용하는 멀티캐스트 주소이다.


 IPv4

 239.255.255.250

 site-local 주소

 IPv6

 FF02::C

 link-local

 IPv6

 FF05::C

 site-local

 IPv6

 FF08::C

 organization-local

 IPv6

 FF0E::C

 IPv6 global


SSDP는 NOTIFY HTTP 메소드를 어나운스하는 것으로 멀티캐스트 그룹 멤버에게 자신이 join 했음을 알려줄 수 있다.



2.3 자동 네트워크 설정


Discovery는 같은 네트워크에 있는 기기를 찾는게 목적이다. 우선은 네트워크에 연결되어야 한다. 이런 기기들은 입/출력 장치가 없을 수 있으므로, 자동으로 네트워크를 설정할 수 있어야 한다. 자동 네트워크를 설정하기 위해서는 DHCP를 사용하면 된다. 네트워크에서 DHCP 서버가 없는 경우는 염두에 두지 않는다. IoT에서 네트워크 자동 설정을 위한 DHCP는 옵션이 아니고 필수다. DHCP에 대한 자세한 내용은 DHCP를 참고하자.



2.4 Discovery 방법


SSDP를 이용하여 기기를 검색하는 방법은 두 가지 방식이 있다. 


첫 번째는 기기가 자신의 정보를 멀티캐스트 채널을 통해 알리는 방법이다. Control point(App:기기를 제어하는 application)가 멀티캐스트 채널에 붙어 있다면, 연결할 수 있는 기기가 검색 됐음을 알려줄 것이다.


두 번째는 Control point(App:기기를 제어하는 application)에서 멀티캐스트 채널로 Search 요청을 보내는 방법이다. 멀티캐스트 채널에 붙어 있는 기기가 있다면, search 요청에 응답할 것이다. 기기를 찾은 후에는 MAC IP를 이용하여 유니캐스트 통신을 한다.



2.5 SSDP 형식


- 2.5.1 SSDP 시작 줄


HTTP를 사용하지만 HTTP와는 약간 다르다. SSDP는 Advertisement, Search 두 개의 타입이 있는데, 어느 타입의 메시지인지를 첫 줄에 명시해야 한다. 메시지 명시는 다음과 같다.


  • NOTIFY * HTTP/1.1\r\n
  • M-SEARCH * HTTP/1.1\r\n
  • HTTP/1.1 200 OK\r\n
NOTIFY는 Advertisement를 위해서, M-SEARCH는 기기를 찾기 위해서 사용한다. 응답을 일반 HTTP의 응답 형식과 같다.



- 2.5.2 헤더 필드

헤더 필드는 RFC2616에 정의한 그대로 사용해야 한다. 일반 HTTP 헤더 형식 그대로 사용한다. 헤더의 각 필드는 이름(field-name)과 값(value)으로 구성된다. 필드와 값은 ":"로 구분한다.

ex) HOST:239.255.255.250:1900


- 2.5.3 SSDP 확장 필드 

SSDP는 UPnP에서 지정한 표준 확장 필드가 있다. 또한 벤더들이 자신들의 필드를 추가하는 걸 허용한다. 이들 확장 필드의 이름은 반드시 "."을 포함한 도메인 형식이어야 한다. 이 규칙은 표준 확장 필드에도 그대로 적용이 된다. 아래는 UPnP에서 지정한 확장 필드들이다.

  • BOOTID.UPNP.ORG
  • CONFIGID.UPNP.ORG
  • NEXTBOOTID.UPNP.ORG
  • SEARCHPORT.UPNP.ORG

각 벤더들은 아래와 같이 사용할 수 있을것이다.
  • myheader.lge.com:"some value"
  • myheader.sony.com:"some value"


- 2.5.4 UUID 포멧

SSDP는 기기에 대한 정보를 찾기 위해서 사용하는 프로토콜이다. 기기를 식별하기 위해서는 식별가능한 유일한 값이 필요하다. 이 값이 UUID(Universally Unique Identifier)이다.

UPnP는 UUID에 대한 형식을 정하고 있다. UUID는 128 비트크기를 가지며, 반드시 아래의 형식을 따라야 한다.
  • UUID = 4*<hexOctet> "-" 2*<hexOctet> "-" 2*<hexOctet> "-" 2*<hexOctet> "-" 6*<hexOctet> "-"
대략 "2fac1234-31f8-11b4-a222-08002b34c003"과 같은 형식이 된다. UUID는 아래의 조건을 만족해야 한다.

1. 중복되면 안된다.
2. 128비트 크기를 지켜야 한다.
3. UUID는 변경할 수 없는 고정 값이다.


3. SSDP 사용 예

디바이스가 네트워크에 추가되면, NOTIFY 메소드를 통해 멀티캐스트에 join 했음을 알려야 한다. 이 때의 SSDP 내용은 다음과 같다.

NOTIFY * HTTP/1.1

HOST: 239.255.255.250:1900

CACHE-CONTROL: max-age = seconds until advertisement expires

LOCATION: URL for UPnP description for root device

NT: notification type

NTS: ssdp:alive

SERVER: OS/version UPnP/1.1 product/version

USN: composite identifier for the advertisement

BOOTID.UPNP.ORG: number increased each time device sends an initial announce or an update

message

CONFIGID.UPNP.ORG: number used for caching description information

SEARCHPORT.UPNP.ORG: number identifies port on which device responds to unicast M-SEARCH


  • NOTIFY *HTTP/1.1(MUST) : 네트워크에 참여했음을 알리기 위해서 사용한다. 
  • HOST(REQUIRED) : 멀티캐스트 주소와 포트를 설정한다. SSDP는 반드시 239.255.255.250:1900을 사용해야 한다. 포트를 생략하면 1900으로 가정한다.
  • CACHE-CONTROL(REQUIRED) : max-age 필드로 설정한다. max-age에 지정한 시간을 초과하면, control points는 기기가 네트워크에 붙어있지 않다고 가정한다. 따라서 기기는 max-age 시간이내에 주기적으로 NOTIFY 메시지를 전송해야 한다. 이 값은 1800(30분) 이상으로 설정할 것을 권장한다.
  • LOCATION(REQUIRED) : 기기를 찾을 수 있는 URL 값을 설정한다. 일반적으로 호스트의 위치는 IP 주소보다는 도메인 이름을 이용해서 찾는다.


반응형