# Universal Plug and Play

Universal Plug and Play (UPnP) es un conjunto de protocolos de comunicación que permite a periféricos en red, como computadoras personales, impresoras, pasarelas de Internet, puntos de acceso Wi-Fi y dispositivos móviles, descubrir de manera transparente la presencia de otros dispositivos en la red y establecer servicios de red de comunicación, compartir datos y entretenimiento. UPnP está diseñado principalmente para redes de hogar sin dispositivos del ámbito empresarial.
El Foro UPnP es el encargado de promocionar el uso de la tecnología UPnP. Es una iniciativa de la industria informática para permitir una conectividad simple y robusta entre los dispositivos autónomos y computadoras personales de diferentes fabricantes. El Foro UPnP está compuesto por más de ochocientos fabricantes de diferentes ámbitos que van desde la Electrónica de consumo hasta las redes de computadoras.
El concepto de UPnP es una extensión de Plug and play, una tecnología para conectar dispositivos de manera directa y sin necesidad de configuración a una computadora, aunque UPnP no está relacionada directamente con la tecnología plug-and-play. Los dispositivos UPnP son "plug-and-play" en el sentido de que una vez conectados a una red son capaces de establecer de manera automática comunicaciones con otros dispositivos.

## Visión general

La arquitectura UPnP permite la interconexión entre dispositivos como computadoras personales, electrodomésticos, dispositivos de electrónica de consumo y dispositivos inalámbricos. Es un protocolo con una arquitectura abierta y distribuida que se basa en estándares reconocidos como la Familia de protocolos de Internet (TCP/IP), HTTP, XML, y SOAP. Los puntos de control UPnP son dispositivos que utilizan UPnP para controlar dispositivos UPnP.
La arquitectura UPnP soporta Zero Configuration Networking. Un dispositivo compatible con UPnP de cualquier fabricante es capaz de conectarse de manera dinámica a una red, obtener una dirección IP, anunciar sus servicios, comunicar sus funciones bajo demanda y descubrir la presencia y capacidades de los demás dispositivos existentes. Los servidores Dynamic Host Configuration Protocol (DHCP) y Domain Name System (DNS) son opcionales y sólo se utilizarán en caso de que estén presentes en la red. Los dispositivos se pueden desconectar de la red de manera automática sin dejar información de estado.
UPnP se publicó en diciembre de 2008 como un estándar internacional compuesto por 73 partes.
UPnP incluye otras características destacadas como:

### Independencia de formato y dispositivo

    la tecnología UPnP puede ejecutarse en muchos medios que soportan IP incluyendo Ethernet, FireWire, IR (IrDA) y RF (Bluetooth, Wi-Fi). No son necesarios controladores especiales, en su lugar se utilizan protocolos de red comunes.

### Control mediante Interfaz de usuario (IU)

    la arquitectura UPnP permite que los dispositivos presenten una interfaz de usuario mediante un navegador web (ver Presentación más abajo).

### Independencia de Sistema operativo y lenguaje de programación

    se puede utilizar cualquier sistema operativo y cualquier lenguaje de programación para desarrollar productos UPnP. UPnP no especifica o restringe el diseño de un API de las aplicaciones que se ejecutan en los puntos de control; los desarrolladores de sistemas operativos pueden crear APIs que se ajusten a las necesidades de sus usuarios.

### Extensibilidad

    Los productos UPnP pueden tener servicios específicos para dicho dispositivo en capas superiores a la arquitectura básica UPnP. Además de combinar servicios definidos por el Foro UPnP de múltiples formas, los fabricantes pueden definir tipos de servicios y dispositivos propios, y pueden extender dispositivos y servicios ya definidos en el estándar para soportar acciones, variables de estado, elementos de estructuras de datos y variables definidas por ellos mismos.

## Protocolo

UPnP utiliza el puerto UDP 1900 y el puerto TCP 2869.

### Direccionamiento

La base de UPnP es el direccionamiento IP: cada dispositivo debe implementar un cliente DHCP y buscará un servidor DHCP en cuanto se conecte por primera vez a la red. Si no hay ningún servidor DHCP disponible, el dispositivo debe asignarse a sí mismo una dirección. El proceso por el cual un dispositivo UPnP se auto-asigna una dirección se denomina AutoIP. En la versión 1.0 de la especificación de la arquitectura UPnP, se incluye textualmente la propia especificación de AutoIP; en versión 1.1, la especificación de AutoIP referencia el RFC 3927 de IETF RFC 3927. Si durante la transacción DHCP, el dispositivo obtiene un nombre de dominio, por ejemplo, mediante un servidor DNS o mediante DNS forwarding, el dispositivo deberá emplear dicho nombre en las operaciones de red posteriores; en otro caso, el dispositivo deberá utilizar su propia dirección IP.

### Descubrimiento

Una vez que un dispositivo ha establecido una dirección IP, el siguiente paso en UPnP es el descubrimiento. El protocolo de descubrimiento de UPnP se denomina Simple Service Discovery Protocol (SSDP). SSDP permite a los dispositivos que acaban de añadirse a una red anunciar sus servicios a los puntos de control presentes en la red. Asimismo, cuando se añade un punto de control a la red, SSDP le permite buscar los dispositivos que le interese controlar. El intercambio fundamental en ambos casos es un mensaje de descubrimiento que contiene datos básicos del dispositivo o uno de sus servicios, por ejemplo, su tipo, identificador y un enlace una URL en la que obtener información más detallada.

### Descripción

Después de que un punto de control haya descubierto un dispositivo, todavía dispone de muy poca información acerca de él. El punto de control debe obtener la descripción del dispositivo desde la URL proporcionada por el dispositivo en el mensaje de descubrimiento para conocer mejor sus capacidades y poder interactuar con él. La descripción de un dispositivo se codifica en XML e incluye información específica del fabricante como nombre de modelo y número, número de serie, nombre de fabricante, URLs a sitios web específicos de fabricante, etc. La descripción también incluye una lista de dispositivos o servicios embebidos, así como URLs de control, manejo de eventos y presentación. Para cada servicio, la descripción incluye una lista de los comandos, o acciones, a las que responderá el servicio, y parámetros, o argumentos, de cada acción; la descripción de un servicio también incluye una lista de variables; estas variables modelan el estado del servicio en tiempo de ejecución, y se describen en términos de su tipo de datos, rango y las características de sus eventos.

### Control

Al obtener la descripción del dispositivo, el punto de control puede enviar acciones a los servicios de un dispositivo. Para ello, el punto de control envía un mensaje de control apropiado a la URL de control del servicio (proporcionada en la descripción del dispositivo). Los mensajes de control también se codifican en XML mediante Simple Object Access Protocol (SOAP). El servicio responderá con un mensaje de control con los resultados de la acción de forma similar a una llamada a una función. Los efectos de la acción, en caso de existir, se modelarán mediante cambios en las variables que describen el estado del servicio.

### Notificación de eventos

Una capacidad adicional de UPnP es la notificación de eventos o eventing. El protocolo de notificación de eventos definido en la arquitectura UPnP se conoce como General Event Notification Architecture (GENA). La descripción UPnP de un servicio incluye una lista de las acciones a las que el servicio responde y otra con las variables que modelan el estado del servicio en tiempo de ejecución. El servicio enviará actualizaciones cuando cambien dichas variables a cualquier punto de control que se haya suscrito para recibir dicha información. El servicio publica actualizaciones enviando mensajes codificados en XML de evento que contiene los nombre de una o más variables de estado y el valor actual de dichas variables. Cuando un punto de control se suscribe por primera vez se le envía un mensaje especial de eventos; que contiene el nombre y los valores de todas las variables que generan eventos y permite al suscriptor conocer el estado actual del servicio. La notificación de eventos UPnP se ha diseñado para mantener a todos los puntos de control informados por igual sobre los efectos de cualquier acción, de este modo se permite soportar escenarios con múltiples puntos de control. Por tanto, los mensajes de eventos se envían a todos los suscriptores, los suscriptores reciben mensajes para todas las variables que han cambiado a las que se han suscrito y los mensajes se envían sin importar el motivo que modificó la variable de estado (tanto en respuesta a una petición, como por el cambio del estado interno del servicio).

### Presentación

El último paso en UPnP es la presentación. Si un dispositivo tiene una URL de presentación, entonces el punto de control podrá obtener una página desde dicha URL, mostrarla en un navegador y, dependiendo de las características de la página, permitirá al usuario controlar el dispositivo y/o consultar su estado. El grado de control que se puede obtener depende en gran medida del dispositivo y de la interactividad presente en la interfaz de presentación.

## Estándares UPnP AV

UPnP AV es una extensión de audio y vídeo para UPnP. El Foro UPnP publicó la versión 2 de la especificación el 12 de julio de 2006, con una versión 2.0 de las clases MediaServer y MediaRenderer. La mejora consistió en añadir funciones a los dispositivos de clase MediaServer y MediaRenderer que permitían un mayor grado de interoperabilidad entre MediaServers y MediaRenderers de diferentes fabricantes.
Los estándares UPnP AV sirven como base de especificaciones publicadas por otras organizaciones como las Networked Device Interoperability Guidelines de Digital Living Network Alliance, IEC 62481-1 de International Electrotechnical Commission, y el protocolo OpenCable de CableLabs.

## Componentes UPnP AV
### Servidor multimedia

Un Servidor Multimedia UPnP AV es el servidor UPnP (un dispositivo 'maestro') que proporciona información sobre su biblioteca de medios y transmite información multimedia (como audio/vídeos/imágenes/ficheros) a los clientes UPnP de la red. En otras palabras, es un dispositivo o una aplicación que almacena contenido multimedia, como fotografías, películas o música y lo comparte en red.
Los servidores multimedia UPnP AV proporcionan un servicio a los clientes UPnP AV, denominados puntos de control, que les permite consultar los contenidos multimedia del servidor y solicitar el envío de un fichero para su reproducción.
Los servidores multimedia UPnP están disponibles para casi todos los sistemas operativos y muchas plataformas hardware. Se pueden catalogar tanto como software o hardware; los servidores multimedia software se pueden ejecutar en una PC y los servidores multimedia hardware sólo servirán para el dispositivo para el que se desarrollaron como un NAS o un Grabador de vídeo digital específico.
En la siguiente tabla se compara la compatibilidad con distintos sistemas operativos así como las funciones básicas de varios Servidores multimedia UPnP AV.
| Nombre | Licencia | Precio | Mac OS X | Linux, Unix | MS Windows | Audio | Imágenes | Vídeo | Transcodificar A/V al vuelo | Interfaz Web | Compatibilidad DLNA | Implementación |
| 360 Media Server | GPL | $00.00 Gratis | No | Sí | Sí | Sí | No | No | Sí | Sí | ? | Java |
| aVia Media Player Archivado el 31 de mayo de 2012 en Wayback Machine. | Prop. | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | Sí | ? |
| BRisa | MIT | $00.00 Gratis | Sí | Sí | No | Sí | Sí | Sí | Sí | Sí | ? | Python |
| Coherence | MIT | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Python |
| Elgato Eyeconnect | Prop. | $49.95 € | Sí | No | No | Sí | Sí | Sí | No | No | ? | ? |
| Foobar2000 | Prop. | $00.00 Gratis | No | No | Sí | Sí | No | No | Sí | No | ? | C++ |
| FUPPES | GPL | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Parcial | C++ |
| GeeXboX uShare | GPL | $00.00 Gratis | No | Sí | No | Sí | Sí | Sí | No | Sí | Sí | C |
| Gmediaserver | GPL | $00.00 Gratis | No | Sí | No | Sí | No | Sí | No | No | ? | C |
| iSedora DLNA Media Server | Prop. | $23.40 € | Sí | No | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Java |
| LXiMedia | GPL | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | Sí | C++ |
| Majestic Media Server | Prop. | $05.99 $ | Sí | No | No | Sí | Sí | Sí | Sí | No | ? | ? |
| MediaTomb | GPL | $00.00 Gratis | Sí | Sí | No | Sí | Sí | Sí | Sí | Sí | Sí | C++ |
| MiniDLNA | GPL/BSD | $00.00 Gratis | Parcial | Sí | Sí | Sí | Sí | Sí | Parcial | Parcial | Sí | C |
| Mezzmo | Prop. | $29.95 $ | No | No | Sí | Sí | Sí | Sí | Sí | No | Sí | ? |
| myiHome | Prop. | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | No | No | ? | Java |
| MythTV with uPnP | GPL | $00.00 Gratis | Sí | Sí | No | Sí | Sí | Sí | Sí | Sí | ? | C++ |
| Nullriver Medialink | Prop. | $20.00 $ | Sí | No | No | Sí | Sí | Sí | Sí | No | ? | ? |
| Plex | GPL | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Python |
| PS3 Media Server | GPL | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Java |
| PyMedS | MIT | $00.00 Gratis | Sí | Sí | No | ? | ? | ? | Sí | No | ? | Python |
| Rygel | LGPLv2 | $00.00 Gratis | No | Sí | No | Sí | Sí | Sí | Sí | No | Sí | Vala |
| Rivet | Prop. | $00.00 Gratis | Sí | No | No | Sí | Sí | Sí | No | No | ? | ? |
| Serviio | Prop. | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Java |
| Skifta | Prop. | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | Sí | Java |
| TVersity | Prop. | $19.99 € | No | No | Sí | Sí | Sí | Sí | Sí | Sí | Sí | ? |
| TVMOBiLi | Prop. | $26 € | Sí | Sí | Sí | Sí | Sí | Sí | No | Sí | Sí | C++ |
| TVShare | Prop. | $14.95 $ | No | No | Sí | Sí | Sí | Sí | Sí | No | ? | Java |
| TwonkyServer | Prop. | $14.95 € | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | ? |
| Windows Media Connect | Prop. | $00.00 Gratis | No | No | Sí | Sí | Sí | Sí | Sí | No | ? | ? |
| Wild Media Server | Prop. | $15 $ | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Delphi |
| PlayOn | Prop. | $89.99 $ | No | No | Sí | ? | ? | Sí | ? | ? | ? | C# |
| Kodi | GPL | $00.00 Gratis | Sí | Sí | Sí | Sí | Sí | Sí | No | Sí | Sí | C++ |
| xupnpd | GPLv2 | $00.00 Gratis | No | Sí | No | Sí | ? | Sí | No | Sí | Sí | C++ |
| Yazsoft Playback | Prop. | $15.34 € | Sí | No | No | Sí | Sí | Sí | No | No | ? | ? |
| Nombre | Licencia | Precio | Mac OS X | Linux, Unix | MS Windows | Audio | Imágenes | Vídeo | Transcodificar A/V al vuelo | Interfaz Web | Compatibilidad DLNA | Implementación |

### Otros componentes

* UPnP MediaServer ControlPoint - es el cliente UPnP (un dispositivo 'esclavo') que puede detectar de manera automática los servidores UPnP de una red, consultar su contenido y controlar la transferencia de la información multimedia.
* UPnP MediaRenderer DCP - es un dispositivo 'esclavo' que puede renderizar (reproducir) contenidos.
* UPnP RenderingControl DCP - controla los parámetros de un MediaRenderer, como volumen, brillo, nitidez y demás.
* Cliente/servidor Remote User Interface (RUI) UPnP - envía/recibe comandos de control entre los clientes y servidores UPnP de la red, (como grabar, programar, reproducir, parar, detener, etc.).
** Web4CE (CEA 2014) para Remote UI UPnP - estándar CEA-2014 diseñado por el Comité R7 Home Network de la Consumer Electronics Association. Protocolo y Framework basado en Web para Interfaz de Usuario Remota en redes UPnP e Internet (Web4CE). Este estándar permite a los dispositivos UPnP del hogar proporcionar su interfaz (visualización y opciones de control) como una página web que podrá ser mostrada en cualquier otro dispositivo conectado en dicha red.
* QoS (Calidad de Servicio) - es una funcionalidad de servicio importante (aunque no obligatorio) para usar con UPnP AV (Audio y Vídeo). QoS se refiere a los mecanismos de control que proporcionan diferentes prioridades a diferentes usuarios y flujos de datos, o garantizan cierto nivel de rendimiento a un flujo de datos de acuerdo con una solicitud previa. Como UPnP se utiliza principalmente para transmitir datos multimedia en tiempo real, es crítico asegurar la entrega dentro de un intervalo temporal o la transmisión se interrumpirá. Las garantías de QoS son especialmente importantes cuando la capacidad de la red es limitada, como por ejemplo en las redes públicas como Internet.
** QoS (Calidad de Servicio) para UPnP consta de funciones de servicio para Dispositivos Sumidero (cliente) y Dispositivos Fuente (servidor). Con clases como: Traffic Class que indica el tipo de tráfico contenido en el flujo (por ejemplo, audio o vídeo), Traffic Identifier (TID) que identifica los paquetes que pertenecen a un mismo flujo de datos, Traffic Specification (TSPEC) que contiene un conjunto de parámetros que definen las características del flujo (como requisitos de operación y planificación), Traffic Stream (TS) que es un flujo de datos unidireccional que se origina en un dispositivo fuente y termina en uno o más dispositivos sumidero.
* Acceso Remoto - define métodos para conectar grupos de dispositivos UPnP que no comparten el mismo dominio multicast.

## Atravesar NAT

UPnP implementa como solución para atravesar NAT, el denominado Internet Gateway Device Protocol (Protocolo IGD). Muchos routers y firewalls se exponen como Internet Gateway Devices (IGD), lo que permite a cualquier punto de control UPnP realizar varias acciones, como obtener la IP externa del dispositivo, enumerar los mapeos de puertos existentes y añadir/eliminar mapeos de puertos. Añadiendo un mapeo de puertos, cualquier punto de control UPnP detrás de un IGD puede permitir el acceso a los clientes internos de la red desde cualquier dirección externa.

## Problemas de UPnP
### Falta de autenticación

El protocolo UPnP, por defecto, no implementa ningún tipo de autenticación, por lo que cada dispositivo debe implementar sus propios mecanismos de autenticación o el Device Security Service. Por desgracia, muchas implementaciones de UPnP carecen de mecanismos de autenticación y por defecto asumen que los sistemas locales y sus usuarios son completamente de confianza. En particular, los routers y firewalls que emplean el protocolo UPnP IGD son vulnerables a ataques puesto que los creadores de IGD omitieron un método estandarizado de autenticación. Por ejemplo, los programas Adobe Flash son capaces de generar peticiones HTTP específicas que permitirían controlar el router a cualquier sitio web malicioso.