XMPP
El protocolo extensible de mensajería y presencia o XMPP (Extensible Messaging and Presence Protocol), originalmente llamado Jabber es un protocolo de comunicación abierto diseñado para mensajería instantánea (IM), información de presencia y mantenimiento de listas de contactos. Basado en XML (Lenguaje de marcado extensible), permite el intercambio casi en tiempo real de datos estructurados entre dos o más entidades de red. Diseñado para ser extensible, el protocolo ofrece una multitud de aplicaciones más allá de la mensajería instantánea tradicional en el ámbito más amplio del middleware orientado a mensajes, incluida la señalización para VoIP, video, transferencia de archivos, juegos y otros usos.
A diferencia de la mayoría de los protocolos comerciales de mensajería instantánea, XMPP se define en un estándar abierto en la capa de aplicación. La arquitectura de la red XMPP es similar al correo electrónico; cualquiera puede ejecutar su propio servidor XMPP y no hay un servidor maestro central. Este enfoque de sistema abierto federado permite a los usuarios interoperar con otros en cualquier servidor usando una cuenta de usuario 'JID', similar a una dirección de correo electrónico. Las implementaciones de XMPP se pueden desarrollar utilizando cualquier licencia de software y muchas implementaciones de servidor, cliente y biblioteca se distribuyen como software gratuito y de código abierto. También existen numerosas implementaciones de software gratuito y comercial.
Originalmente desarrollado por la comunidad de código abierto, los protocolos se formalizaron como un estándar de mensajería instantánea aprobado en 2004 y se han desarrollado continuamente con nuevas extensiones y funciones. Varios software de cliente XMPP están disponibles en dispositivos y plataformas móviles y de escritorio; en 2003, más de diez millones de personas en todo el mundo usaban el protocolo en la red, según la Fundación de Estándares XMPP.
Características del protocolo
Descentralización
La arquitectura de red XMPP recuerda al Protocolo simple de transferencia de correo (SMTP), un modelo cliente-servidor; los clientes no se comunican directamente entre sí, ya que está descentralizado: cualquiera puede ejecutar un servidor. Por diseño, no hay un servidor autorizado central como lo hay con los servicios de mensajería como AIM, WLM, WhatsApp o Telegram. A menudo surge cierta confusión en este punto, ya que hay un servidor XMPP público que se ejecuta en jabber.org
, al que se suscriben muchos usuarios. Sin embargo, cualquiera puede ejecutar su propio servidor XMPP en su propio dominio.
Direccionamiento
Cada usuario en la red tiene una dirección XMPP única, llamada JID (por razones históricas, las direcciones XMPP a menudo se llaman ID de Jabber). El JID está estructurado como una dirección de correo electrónico con un nombre de usuario y un nombre de dominio (o dirección IP) para el servidor donde reside ese usuario, separados por un signo de arroba (@
), por ejemplo, " alice@example.com
": aquí alice
está el nombre de usuario y example.com
el servidor con que el usuario está registrado.
Dado que un usuario puede desear iniciar sesión desde varias ubicaciones, puede especificar un recurso. Un recurso identifica un cliente particular que pertenece al usuario (por ejemplo, hogar, trabajo o móvil). Esto se puede incluir en el JID agregando una barra inclinada seguida del nombre del recurso. Por ejemplo, el JID completo de la cuenta móvil de un usuario podría ser username@example.com/mobile
.
Cada recurso puede tener especificado un valor numérico llamado prioridad. Los mensajes enviados simplemente a username@example.com
irán al cliente con la prioridad más alta, pero los enviados a username@example.com/mobile
irán solo al cliente móvil. La prioridad más alta es la que tiene mayor valor numérico.
Los JID sin una parte de nombre de usuario también son válidos y se pueden usar para mensajes del sistema y control de funciones especiales en el servidor. Un recurso sigue siendo opcional para estos JID también.
Los medios para enrutar mensajes basados en un identificador de punto final lógico: el JID, en lugar de una dirección IP explícita, presentan oportunidades para usar XMPP como una implementación de red superpuesta sobre diferentes redes subyacentes.
XMPP a través de HTTP
El protocolo de transporte original y "nativo" para XMPP es el Protocolo de control de transmisión (TCP), que utiliza secuencias XML abiertas sobre conexiones TCP de larga duración. Como alternativa al transporte TCP, la comunidad XMPP también ha desarrollado un transporte HTTP para clientes web y usuarios detrás de cortafuegos restringidos. En la especificación original, XMPP podía usar HTTP de dos maneras: sondeo y vinculación. El método de sondeo, ahora en desuso, esencialmente implica que los mensajes almacenados en una base de datos del lado del servidor son obtenidos (y publicados) regularmente por un cliente XMPP a través de solicitudes HTTP 'GET' y 'POST'. El método de vinculación, implementado mediante flujos bidireccionales sobre HTTP síncrono (BOSH),permite a los servidores enviar mensajes a los clientes tan pronto como se envían. Este modelo de notificación push es más eficiente que el sondeo, donde muchos de los sondeos no devuelven datos nuevos.
Debido a que el cliente usa HTTP, la mayoría de los firewalls permiten que los clientes obtengan y publiquen mensajes sin obstáculos. Por lo tanto, en escenarios donde el puerto TCP utilizado por XMPP está bloqueado, un servidor puede escuchar en el puerto HTTP normal y el tráfico debería pasar sin problemas. Varios sitios web permiten que las personas inicien sesión en XMPP a través de un navegador. Además, hay servidores públicos abiertos que escuchan en los puertos estándar http (puerto 80) y https (puerto 443) y, por lo tanto, permiten conexiones detrás de la mayoría de los firewalls. Sin embargo, el puerto registrado por IANA para BOSH es en realidad 5280, no 80.
Extensibilidad
La XMPP Standards Foundation o XSF (anteriormente Jabber Software Foundation) participa activamente en el desarrollo de extensiones XMPP abiertas, denominadas XEP. Sin embargo, las extensiones también pueden ser definidas por cualquier individuo, proyecto de software u organización. Para mantener la interoperabilidad, las extensiones comunes son administradas por XSF. Las aplicaciones XMPP más allá de la mensajería instantánea incluyen: salas de chat, administración de redes, distribución de contenido, herramientas de colaboración, uso compartido de archivos, juegos, control y monitoreo de sistemas remotos, geolocalización, middleware y computación en la nube, VoIP y servicios de identidad.
Sobre la base de su capacidad para admitir el descubrimiento en los dominios de la red local, XMPP es ideal para la computación en la nube donde las máquinas virtuales, las redes y los firewalls presentarían obstáculos para el descubrimiento de servicios alternativos y las soluciones basadas en la presencia. Los sistemas de computación y almacenamiento en la nube se basan en varias formas de comunicación en múltiples niveles, incluidos no solo la mensajería entre sistemas para transmitir el estado, sino también la migración o distribución de objetos más grandes, como el almacenamiento o las máquinas virtuales. Junto con la autenticación y la protección de datos en tránsito, XMPP se puede aplicar en una variedad de niveles y puede resultar ideal como protocolo de middleware extensible o de middleware orientado a mensajes (MOM).
Limitaciones actuales
Por el momento, XMPP no admite calidad de servicio (QoS); la entrega asegurada de mensajes debe construirse sobre la capa XMPP. Hay dos XEP propuestos para abordar este problema, XEP-0184 Recibos de entrega de mensajes, que actualmente es un estándar preliminar, y XEP-0333 Marcadores de chat, que se considera experimental.
Dado que XML se basa en texto, XMPP normal tiene una sobrecarga de red más alta en comparación con las soluciones puramente binarias. Este problema estaba siendo abordado por el formato experimental XEP-0322: Efficient XML Interchange (EXI), donde XML se serializa de una manera binaria muy eficiente, especialmente en modo basado en esquema. Este XEP está actualmente aplazado.
La transferencia de datos binarios en banda es limitada. Los datos binarios deben codificarse primero en base64 antes de que puedan transmitirse en banda. Por lo tanto, cualquier cantidad significativa de datos binarios (por ejemplo, transferencias de archivos) se transmite mejor fuera de banda, usando mensajes dentro de banda para coordinar. El mejor ejemplo de esto es el protocolo de extensión Jingle XMPP, XEP-0166.
Características
Sesiones entre pares
Usando la extensión llamada Jingle, XMPP puede proporcionar un medio abierto para admitir comunicaciones de máquina a máquina o de igual a igual a través de un conjunto diverso de redes. Esta función se utiliza principalmente para telefonía IP (VoIP).
Chat multiusuario
XMPP admite conferencias con múltiples usuarios, utilizando la especificación Multi-User Chat (MUC) (XEP-0045). Desde el punto de vista de un usuario normal, es comparable a Internet Relay Chat (IRC).
Seguridad y cifrado
Los servidores XMPP se pueden aislar (p. ej., en la intranet de una empresa) y la autenticación segura (SASL) y el cifrado punto a punto (TLS) se han integrado en las especificaciones principales de XMPP, así como
Off-the-Record Messaging (OTR) es una extensión de XMPP que permite el cifrado de mensajes y datos. Desde entonces, ha sido reemplazado por una mejor extensión, el cifrado de extremo a extremo de extremo a extremo múltiple (OMEMO, XEP-0384) entre usuarios. Esto brinda un mayor nivel de seguridad, al cifrar todos los datos del cliente de origen y descifrarlos nuevamente en el cliente de destino; el operador del servidor no puede descifrar los datos que están reenviando.
Los mensajes también se pueden cifrar con OpenPGP, por ejemplo con el software Gajim.
Descubrimiento de servicios
Si bien en la actualidad existen varios protocolos de descubrimiento de servicios (como zeroconf o el Protocolo de ubicación de servicios), XMPP proporciona una base sólida para el descubrimiento de servicios que residen localmente o a través de una red, y la disponibilidad de estos servicios (a través de información de presencia), según lo especificado por XEP-0030 DISCO.
Conexión a otros protocolos
Uno de los objetivos de diseño originales de la primera comunidad de código abierto de Jabber era permitir a los usuarios conectarse a múltiples sistemas de mensajería instantánea (especialmente sistemas que no son XMPP) a través de una sola aplicación de cliente. Esto se hizo a través de entidades llamadas transportes o pasarelas.a otros protocolos de mensajería instantánea como ICQ, AIM o Yahoo Messenger, pero también a protocolos como SMS, IRC o email. A diferencia de los clientes multiprotocolo, XMPP proporciona este acceso a nivel de servidor mediante la comunicación a través de servicios de puerta de enlace especiales que se ejecutan junto con un servidor XMPP. Cualquier usuario puede "registrarse" en una de estas puertas de enlace proporcionando la información necesaria para iniciar sesión en esa red y luego puede comunicarse con los usuarios de esa red como si fueran usuarios de XMPP. Por lo tanto, dichas puertas de enlace funcionan como servidores proxy de clientes (la puerta de enlace se autentica en nombre del usuario en el servicio que no es XMPP). Como resultado, cualquier cliente que sea totalmente compatible con XMPP puede acceder a cualquier red con una puerta de enlace sin código adicional en el cliente y sin la necesidad de que el cliente tenga acceso directo a Internet. Sin embargo,
Otro tipo de puerta de enlace es una puerta de enlace de servidor a servidor, que permite que una implementación de servidor que no sea XMPP se conecte a servidores XMPP nativos utilizando las funciones integradas de federación entre dominios de XMPP. Dichos gateways de servidor a servidor son ofrecidos por varios productos de software de mensajería instantánea empresarial, que incluyen:
- IBM Lotus Sametime
- Skype for Business Server (anteriormente llamado Microsoft Lync Server y Microsoft Office Communications Server – OCS)
Software
Muchos clientes, servidores y bibliotecas de códigos implementan XMPP. Estas implementaciones se proporcionan bajo una variedad de licencias de software.
Servidores
Existen numerosos software de servidor XMPP, algunos de los más conocidos incluyen ejabberd y Prosody.
Clientela
Existe una gran cantidad de software de cliente XMPP en varias plataformas modernas y heredadas, incluidos clientes gráficos y basados en línea de comandos. Según el sitio web de XMPP, algunos de los programas más populares incluyen Conversations (Android), Converse.js (navegador web, Linux, Windows, macOS), Gajim (Windows, Linux), Monal (macOS, iOS) y Swift.IM (mac OS, Windows, Linux).
Otros clientes incluyen: Bombus, ChatSecure, Coccinella, JWChat.org, MCabber, Miranda, Pidgin, Psi, Tkabber, Trillian y Xabber.
Despliegue y distribución
Hay miles de servidores XMPP en todo el mundo, tanto públicos como particulares u organizaciones que ejecutan sus propios servidores sin fines comerciales. Numerosos sitios web muestran una lista de servidores XMPP públicos donde los usuarios pueden registrarse (por ejemplo, en el sitio web XMPP.net).
Varios grandes servicios públicos de mensajería instantánea usan XMPP de forma nativa, incluidos "LJ Talk", Nimbuzz y HipChat de LiveJournal. Varios servicios de hospedaje, como DreamHost, permiten a los clientes de hospedaje elegir servicios XMPP junto con servicios web y de correo electrónico más tradicionales. Los servicios de alojamiento XMPP especializados también existen en forma de nube para que los propietarios de dominios no necesiten ejecutar directamente sus propios servidores XMPP, incluidos Cisco Webex Connect, Chrome.pl, Flosoft.biz, i-pobox.net yhosted.im.
XMPP también se usa en implementaciones de servicios que no son de mensajería instantánea, incluidos los sistemas de redes inteligentes, como aplicaciones de respuesta a la demanda, middleware orientado a mensajes y como reemplazo de SMS para proporcionar mensajes de texto en muchos clientes de teléfonos inteligentes.
Implementaciones no nativas
Algunos de los proveedores de mensajería más grandes usan, o han estado usando, varias formas de protocolos basados en XMPP en sus sistemas backend sin exponer necesariamente este hecho a sus usuarios finales. Un ejemplo es Google, que en agosto de 2005 presentó Google Talk, una combinación de VoIP y un sistema de mensajería instantánea que usa XMPP para mensajería instantánea y como base para un protocolo de señalización de transferencia de archivos y voz llamado Jingle. El lanzamiento inicial no incluía comunicaciones de servidor a servidor; Google habilitó esa característica el 17 de enero de 2006. Desde entonces, Google ha agregado la funcionalidad de video a Google Talk, y también utiliza el protocolo Jingle para la señalización. En mayo de 2013, Google anunció que la compatibilidad con XMPP se eliminaría de Google Talk para la federación de servidor a servidor, aunque mantendría la compatibilidad de cliente a servidor.En enero de 2008, AOL introdujo soporte XMPP experimental para su servicio AOL Instant Messenger (AIM), lo que permite a los usuarios de AIM comunicarse mediante XMPP. Sin embargo, en marzo de 2008, este servicio se suspendió. A partir de mayo de 2011, AOL ofrece compatibilidad limitada con XMPP. En febrero de 2010, el sitio de redes sociales Facebook abrió su función de chat a aplicaciones de terceros a través de XMPP. Algunas funciones no estaban disponibles a través de XMPP y el soporte se eliminó en abril de 2014. De manera similar, en diciembre de 2011, Microsoft lanzó una interfaz XMPP para su servicio Microsoft Messenger. Skype, su sucesor de facto, también proporcionó soporte XMPP limitado. Apache Wave es otro ejemplo.
XMPP es el estándar de facto para el chat privado en plataformas relacionadas con juegos como Origin y PlayStation, así como Xfire y Raptr, ahora descontinuados. Dos excepciones notables son Steam y Xbox LIVE; ambos utilizan sus propios protocolos de mensajería patentados.
Historia y desarrollo
Jeremie Miller comenzó a trabajar en la tecnología Jabber en 1998 y lanzó la primera versión del jabberd
servidor el 4 de enero de 1999. La primera comunidad de Jabber se centró en el software de código abierto, principalmente el servidor jabberd, pero su principal resultado resultó ser el desarrollo de el protocolo XMPP.
El Grupo de trabajo de ingeniería de Internet (IETF) formó un grupo de trabajo XMPP en 2002 para formalizar los protocolos centrales como una tecnología de presencia y mensajería instantánea de IETF. El primer protocolo Jabber, desarrollado en 1999 y 2000, formó la base para XMPP, tal como se publicó en RFC 3920 y RFC 3921 en octubre de 2004 (los principales cambios durante la formalización por parte del Grupo de trabajo XMPP de IETF fueron la adición de TLS para el cifrado de canales y SASL para la autenticación). El grupo de trabajo de XMPP también produjo las especificaciones RFC 3922 y RFC 3923. En 2011, RFC 3920 y RFC 3921 fueron reemplazadas por RFC 6120 y RFC 6121 respectivamente, con RFC 6122 especificando el formato de dirección XMPP. En 2015, el RFC 6122 fue reemplazado por el RFC 7622. Además de estos protocolos centrales estandarizados en el IETF,
El primer servicio de mensajería instantánea basado en XMPP fue Jabber.org, que ha operado continuamente y ha ofrecido cuentas gratuitas desde 1999. Desde 1999 hasta febrero de 2006, el servicio usó jabberd como su software de servidor, momento en el cual migró a ejabberd (ambos son servidores de aplicaciones de software libre). En enero de 2010, el servicio migró al software de servidor patentado M-Link producido por Isode Ltd.
En septiembre de 2008, Cisco Systems adquirió Jabber, Inc., los creadores del producto comercial Jabber XCP.
La XMPP Standards Foundation (XSF) desarrolla y publica extensiones para XMPP a través de un proceso de estándares centrado en XMPP Extension Protocols (XEP, anteriormente conocido como Jabber Enhancement Proposals - JEP). Las siguientes extensiones tienen un uso especialmente amplio:
- Formularios de datos
- Descubrimiento de servicios
- Chat multiusuario
- Protocolo de publicación-suscripción y eventos personales
- XHTML-MI
- Transferencia de archivos
- Capacidades de la entidad
- Enlace HTTP
- Jingle para voz y video
Internet de las Cosas
Las características de XMPP, como la federación entre dominios, la publicación/suscripción, la autenticación y su seguridad, incluso para terminales móviles, se utilizan para implementar el Internet de las cosas. Varias extensiones XMPP son parte de la implementación experimental: formato de intercambio XML eficiente (EXI); Datos del sensor; Aprovisionamiento; Control; concentradores; Descubrimiento.
Estos esfuerzos están documentados en una página en la wiki de XMPP dedicada a Internet de las cosas y la lista de correo de XMPP IoT.
Especificaciones y normas
El grupo de trabajo IETF XMPP ha producido una serie de documentos de solicitud de comentarios (RFC):
- RFC 3920 (reemplazado por RFC 6120)
- RFC 3921 (reemplazado por RFC 6121)
- RFC 3922
- RFC 3923
- RFC 4622 (reemplazado por RFC 5122)
- RFC 4854
- RFC 4979
- RFC 6122 (reemplazado por RFC 7622)
Las más importantes y más ampliamente implementadas de estas especificaciones son:
- RFC 6120, Extensible Messaging and Presence Protocol (XMPP): Core, que describe la mensajería cliente-servidor mediante dos flujos XML abiertos. Los flujos XML constan de <presencia/>, <mensaje/> y <iq/> (info/consulta). Una conexión se autentica con Simple Authentication and Security Layer (SASL) y se cifra con Transport Layer Security (TLS).
- RFC 6121, Protocolo de presencia y mensajería extensible (XMPP): Mensajería instantánea y presencia describe la mensajería instantánea (IM), la aplicación más común de XMPP.
- RFC 7622, Protocolo extensible de mensajería y presencia (XMPP): el formato de dirección describe las reglas para las direcciones XMPP, también denominadas JabberID o JID. Actualmente, los JID usan PRECIS (como se define en RFC 7564) para manejar caracteres Unicode fuera del rango ASCII.
Estándares en competencia
XMPP a menudo se ha considerado como un competidor de SIMPLE, basado en el Protocolo de inicio de sesión (SIP), como el protocolo estándar para mensajería instantánea y notificación de presencia.
La extensión XMPP para chat multiusuario puede verse como un competidor de Internet Relay Chat (IRC), aunque IRC es mucho más simple, tiene muchas menos funciones y se usa mucho más.
Las extensiones XMPP para publicación-suscripción proporcionan muchas de las mismas funciones que el Protocolo avanzado de cola de mensajes (AMQP).
Contenido relacionado
IPsec
ONC-RPC
Enrutamiento