UPnP에 대한 오해

UPnP(Universal Plug and Play)라는 홈네트워크 분야의 표준 네트워크 프로토콜이 있다.
우선, 흔한 오해 한가지. 과거 윈도우즈95 때 등장했던 Plug and Play 와 이름이 비슷한 탓으로 Plug and Play의 네트워크 버전으로 오해하기 쉽다. 장치를 네트워크 케이블에 연결하기만 하면 바로 인터넷을 사용할 수 있게 하는 기술 정도로 오해한다. (이건 DHCP 정도에 해당하겠지)

이런 오해를 돕는 또한가지 측면은 UPnP에 이와 비슷한 기능이 포함되어 있기도 하다는 것이다. 바로 NAT traversal 이란 기능으로,IGDP(Internet Gateway Device Protocol)를 이용해서 네트워크 장비와 라우터가 대화를 나눌 수 있다. 예를들어, NAT 라우터 밑에 있는 장치가 1234번 incoming port를 사용해야 한다면 기업에서는 라우터 관리자가 라우터에 port mapping을 해서 1234번 port로 들어오는 패킷을 해당 장치로 포워딩 시켜준다. 그런데 가정에서는 일반인이 라우터 port map을 변경할 능력도 권한도 없어서 문제가 된다. 이를 위해서 장치와 라우터가 직접 통신해서 지들끼리 알아서 port map을 변경하도록 한게 IGDP다. 보안 측면에서 위험한거 아니냐고 생각할 수도 있겠지만 잘 생각해보면 그렇지 않다. (각자 생각해 보기)
IGDP를 지원하는 라우터들은 꽤 많지만 이게 대세인지는 모르겠다. 보통 UPnP를 지원하는 라우터라고 표시되어 있다.

UPnP와 UPnP 서비스 시나리오

UPnP는 홈네트워크에 있는 네트워크 장치들이 서로 연동될 수 있도록 하는 범용 표준 프로토콜이다. 라우터도 네트워크 장치니까 라우터와도 연동을 하고, TV나 오디오, 디지털 액자나 전등과도 연동을 할 수 있을 것이다. 수많은 제조사들에서 만드는 각기 다른 제품들이 서로 연동될 수 있는걸까? 범용성이란 측면때문에 기능들은 당연히 제한될 수 밖에 없다. 전원을 끄고 켜거나 기기에 대한 정보를 주고 받거나 멀티미디어 데이타를 주고 받는 정도다.

UPnP는 UDP, HTTP, XML 정도의 기술을 조합해서 정의되어 있다. 장치들은 UDP broadcast를 통해서 자신을 알리고 주변의 다른 장치에 대한 정보를 등록한다. 사용자는 하나의 Display 장치를 통해 다른 장치들의 정보를 볼 수 있고, 그 장치들이 가지고 있는 컨텐츠 목록도 볼 수 있고, 그 컨텐츠가 영화 파일이라면 특정 장치로 그 파일을 재생시킬 수 있다. 특히 오디오와 비디오 장치를 위해서 UPnP AV 라는 규격을 정의하고 있고, 멀티미디어 파일을 공급하는 장치를 Media Server, 멀티미디어 파일을 재생하는 장치를 Media Renderer, 사용자가 목록을 골라서 Play/Pause/Stop 시킬 수 있도록 해주는 장치를 Media Controller라고 정의한다.

Media Controller라는 장치는 좀 애매한데 보통 TV를 예로 보면, TV는 영화를 Play하는 Renderer 역할을 하지만 Play 할 영화의 목록을 보여주고 Pause/Stop도 TV 리모콘을 통해 하게 되니까 Controller의 역할도 하게된다. 따라서 TV는 보통 Media Renderer + Media Controller가 된다. 하지만 분명 Renderer와 Controller를 분리시키면 다음과 같이 좀더 나이스한 시나리오가 가능해진다: UPnP를 지원하는 외장 하드에 영화파일이 10편쯤 들어있다. iPhone에서 이 영화들의 목록을 살펴보다가 하나를 선택한다. 그러면 TV가 켜지면서 이 영화가 재생된다.
국내에 출시되는 UPnP 지원 TV는 삼성 PAVV의 몇몇 기종이 유일한데, 이 TV들은 모두 Renderer+Controller 조합으로 구성되어 있고 Renderer만의 기능은 제공하지 않는다. 즉 다른 Controller로는 컨트롤을 할 수 없다는 얘기다.

UPnP 장치들

현재 UPnP를 지원하는 장치들은 그리 많지 않다. UPnP를 채택하고 있는 DLNA에는 거의 모든 가전사들이 참여하고 있지만 아직 네트워크 기능을 사용하는 가전제품 자체가 별로 없으니 이상한 일은 아니다.
TV 중엔 삼성의 PAVV 최신 기종들이 DLNA 인증을 받기 시작했다. LG는 국내에서 유일하게 UPnP 표준화에 직접 참여한 업체지만 XCanvas TV들은 네트워크 기능을 지원하지도 않고 당연히 UPnP 기능이 없다. LG가 IPTV 사업에 참여하고 있고 UPnP 기능이 여기에 약간 배치될 수도 있기 때문일까? 그보다는 단순히 비용대비 효과가 없다고 보기 때문일듯.
앞서 말했듯이 라우터들 중에는 UPnP 기능을 지원하는 라우터들이 꽤 나와있다.

게임기 중엔 PlayStation3가 유일하게 UPnP를 지원한다. PS3 뿐만 아니라 Sony의 모든 제품이 UPnP를 전략적으로 지원하고 있는듯 보인다. XBox 360은 MS답게 UPnP를 좀 변형해서 사용하고 있어서 XBox에 호환되도록 UPnP 프로토콜을 수정하는 것은 그리 어려운 일이 아니고, 상당수의 PC기반 Media Server 제품들이 XBox360을 지원하고 있다.

PC는? Windows나 Mac, Linux 같은 범용OS에서 UPnP는 어플리케이션 레벨의 기능이다. 웹서버나 FTP서버가 그렇듯이 UPnP 지원 서버를 실행하면 된다. PC기반의 Media Server 제품들에는 MS의 Media Player11, OrbTVersityFUPPES 등이 있다.
PC기반 Media Renderer는 이상할 정도로 찾아볼 수가 없는데, 내가 찾은 유일한 프로그램은 OSX 기반의 MediaCloud다.
iPhone은? iPhone기반의 Media Server로 Plug Player가 있다. (App Store에서 받을 수 있다)

오픈 소스

UPnP 기술은 인텔이 주도해서 만들어졌고, 인텔이 UPnP 확산을 위해 소스코드를 오픈한 이후 다수의 오픈소스 프로젝트가 만들어졌다. 다음은 오픈소스 기반의 UPnP 미디어서버 프로젝트들.


Coherence

  • python 기반의 opensource 미디어서버 framework
  • MIT license
  • 플러그인 형태로 backend 미디어서버를 추가할 수 있는 구조가 장점임

FUPPES

  • C++ 기반의 미디어서버임. win32/osx/unix 모두 지원.
  • ffmpeg와 lame을 이용한 transcoding을 지원함
  • GPL 라이센스임.

CyberMediaGate

  • java 기반의 미디어서버. 
  • free이고 code가 오픈되어 있으나 opensource license는 아님
  • java 버전 뿐만 아니라 C 버전도 있음.

Cidero

  • CyberMediaGate에 인터넷 라디오 스트리밍 기능을 추가한 미디어 서버
  • 미디어서버 뿐만 아니라 Controller도 구현되어 있음
  • 역시 open license는 아님