해당 글은 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
- BOOTID.UPNP.ORG
- CONFIGID.UPNP.ORG
- NEXTBOOTID.UPNP.ORG
- SEARCHPORT.UPNP.ORG
- myheader.lge.com:"some value"
- myheader.sony.com:"some value"
- UUID = 4*<hexOctet> "-" 2*<hexOctet> "-" 2*<hexOctet> "-" 2*<hexOctet> "-" 6*<hexOctet> "-"
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 주소보다는 도메인 이름을 이용해서 찾는다.
'Software > Network' 카테고리의 다른 글
UWB(Ultra Wide Band) (2) | 2022.09.01 |
---|---|
Device Discovery Protocol - mDNS(Multicast DNS) (0) | 2016.06.08 |
ZeroConf(Zero Configuration Networking) (2) | 2016.06.01 |
DHCP 프로토콜 기본 원리(Understanding the Basic Operations of DHCP) (1) | 2016.06.01 |
유니캐스트(UniCast), 브로드캐스트(BroadCast), 멀티캐스트(MultiCast) (0) | 2016.05.20 |