El Protocolo Extensible de Mensajería y Presencia ( abreviatura XMPP , originalmente llamado Jabber [1] ) es un protocolo de comunicación abierto diseñado para mensajería instantánea (MI), información de presencia y mantenimiento de listas de contactos . [2] 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. [3] 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 de mensajería instantánea comerciales, XMPP se define en un estándar abierto en la capa de aplicación . La arquitectura de la red XMPP es similar a la del 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 utilizando 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 libre y de código abierto . También existen numerosas implementaciones de software comercial y gratuito .
Originalmente desarrollados 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 características. Varios programas cliente XMPP están disponibles tanto en plataformas y dispositivos móviles como de escritorio; en 2003, el protocolo lo usaban más de diez millones de personas en todo el mundo en la red, según la XMPP Standards Foundation . [4] [ necesita actualizació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 central autorizado como ocurre con los servicios de mensajería como AIM , WLM , WhatsApp o Telegram . A menudo surge cierta confusión sobre este punto, ya que hay un servidor XMPP público que se ejecuta en jabber.org
, al que muchos usuarios se suscriben. Sin embargo, cualquiera puede ejecutar su propio servidor XMPP en su propio dominio.
Cada usuario de la red tiene una dirección XMPP única, llamada JID [5] (por razones históricas, las direcciones XMPP a menudo se denominan Jabber ID ). 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 [6] ) para el servidor donde reside ese usuario, separados por un signo arroba ( @
) - por ejemplo, “ [email protected]
“: aquí alice
está el nombre de usuario y example.com
el servidor en el que está registrado el usuario.
Dado que un usuario puede querer iniciar sesión desde varias ubicaciones, puede especificar un recurso . Un recurso identifica un cliente particular que pertenece al usuario (por ejemplo, casa, trabajo o móvil). Esto se puede incluir en el JID añadiendo una barra seguida del nombre del recurso. Por ejemplo, el JID completo de la cuenta móvil de un usuario podría ser [email protected]/mobile
.
Cada recurso puede tener especificado un valor numérico llamado prioridad . Los mensajes enviados simplemente a [email protected]
irán al cliente con la prioridad más alta, pero los enviados a [email protected]/mobile
irán solo al cliente móvil. La prioridad más alta es la que tiene el valor numérico más alto.
Los JID sin nombre de usuario también son válidos y pueden utilizarse para mensajes del sistema y para controlar funciones especiales del servidor. El recurso también es opcional para estos JID.
Los medios para enrutar mensajes basados en un identificador de punto final lógico (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. [7]
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, así como para usuarios detrás de cortafuegos restringidos . En la especificación original, XMPP podía utilizar HTTP de dos formas: sondeo [8] y enlace . El método de sondeo, ahora obsoleto, implica esencialmente que los mensajes almacenados en una base de datos del lado del servidor se obtienen (y publican) regularmente por un cliente XMPP mediante solicitudes HTTP 'GET' y 'POST'. El método de enlace, implementado utilizando flujos bidireccionales sobre HTTP síncrono ( BOSH ), [9] permite a los servidores enviar mensajes a los clientes tan pronto como se envían. Este modelo de envío de notificaciones es más eficiente que el sondeo, donde muchos de los sondeos no devuelven datos nuevos.
Como el cliente utiliza HTTP, la mayoría de los cortafuegos permiten a los clientes obtener y enviar mensajes sin ningún obstáculo. Por lo tanto, en situaciones en las que 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 a las personas iniciar 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 desde detrás de la mayoría de los cortafuegos. Sin embargo, el puerto registrado por la IANA para BOSH es en realidad 5280, no 80.
La XMPP Standards Foundation o XSF (anteriormente Jabber Software Foundation) está activa en el desarrollo de extensiones XMPP abiertas, llamadas XEP . [10] 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 la XSF. Las aplicaciones XMPP más allá de la mensajería instantánea incluyen: salas de chat , administración de red , sindicación de contenido , herramientas de colaboración, intercambio de archivos , juegos, control y monitoreo de sistemas remotos, geolocalización , middleware y computación en la nube , VoIP y servicios de identidad.
Basándose en su capacidad para admitir el descubrimiento en dominios de redes locales , XMPP es ideal para la computación en la nube , donde las máquinas virtuales, las redes y los cortafuegos presentarían obstáculos para el descubrimiento de servicios alternativos y las soluciones basadas en presencia. Los sistemas de computación en la nube y de almacenamiento dependen de varias formas de comunicación en múltiples niveles, que incluyen 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 middleware extensible o protocolo de middleware orientado a mensajes (MOM).
En este momento, XMPP no admite la calidad de servicio (QoS); la entrega segura 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 borrador de estándar, y XEP-0333 Marcadores de chat, que se considera experimental.
Dado que XML se basa en texto, el XMPP normal tiene una mayor sobrecarga de red en comparación con las soluciones puramente binarias. Este problema se estaba solucionando con el formato experimental XEP-0322: Efficient XML Interchange (EXI), en el que XML se serializa de una manera binaria eficiente, especialmente en el modo basado en esquemas. Este XEP está actualmente aplazado.
La transferencia de datos binarios en banda es limitada. Los datos binarios deben codificarse primero en base64 antes de poder transmitirse en banda. Por lo tanto, cualquier cantidad significativa de datos binarios (por ejemplo, transferencias de archivos ) se transmite mejor fuera de banda , utilizando mensajes en banda para coordinar. El mejor ejemplo de esto es el Protocolo de extensión XMPP de Jingle , XEP-0166.
Con la extensión llamada Jingle , XMPP puede proporcionar un medio abierto para admitir comunicaciones de máquina a máquina o de punto a punto en un conjunto diverso de redes. Esta función se utiliza principalmente para telefonía IP (VoIP).
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).
Los servidores XMPP se pueden aislar (por ejemplo, en la intranet de una empresa ), y la autenticación segura ( SASL ) y el cifrado punto a punto ( TLS ) se han incorporado a las especificaciones centrales de XMPP.
Off-the-Record Messaging (OTR) es una extensión de XMPP que permite el cifrado de mensajes y datos. Desde entonces, ha sido reemplazada por una extensión mejor, el cifrado de extremo a extremo entre usuarios ( OMEMO , XEP-0384). Esto proporciona un mayor nivel de seguridad, ya que cifra todos los datos del cliente de origen y los descifra nuevamente en el cliente de destino; el operador del servidor no puede descifrar los datos que está reenviando.
Los mensajes también se pueden cifrar con OpenPGP , por ejemplo con el software Gajim .
Si bien hoy en día 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 en una red, y la disponibilidad de estos servicios (a través de información de presencia), como se especifica en XEP-0030 DISCO. [11]
Uno de los objetivos originales de diseño de la comunidad de código abierto Jabber era permitir a los usuarios conectarse a múltiples sistemas de mensajería instantánea (especialmente sistemas que no fueran XMPP) a través de una única aplicación cliente. Esto se hacía 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 correo electrónico . A diferencia de los clientes multiprotocolo , XMPP proporciona este acceso a nivel de servidor comunicándose a través de servicios de pasarela especiales que se ejecutan junto con un servidor XMPP. Cualquier usuario puede "registrarse" en una de estas pasarelas 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 XMPP. Por lo tanto, dichas pasarelas funcionan como proxies de cliente (la pasarela se autentica en nombre del usuario en el servicio que no es XMPP). Como resultado, cualquier cliente que admita completamente XMPP puede acceder a cualquier red con una pasarela sin código adicional en el cliente y sin la necesidad de que el cliente tenga acceso directo a Internet. Sin embargo, el modelo de proxy del cliente puede violar los términos de servicio del protocolo utilizado (aunque dichos términos de servicio no son legalmente exigibles en varios países) y también requiere que el usuario envíe su nombre de usuario y contraseña de mensajería instantánea al sitio de terceros que opera el transporte (lo que puede generar problemas de privacidad y seguridad).
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 mediante las funciones de federación entre dominios integradas de XMPP. Estas puertas de enlace de servidor a servidor se ofrecen en varios productos de software de mensajería instantánea empresarial, entre los que se incluyen:
XMPP se implementa en muchos clientes, servidores y bibliotecas de código. [15] Estas implementaciones se proporcionan bajo una variedad de licencias de software.
Existen numerosos programas de servidor XMPP, algunos de los más conocidos incluyen ejabberd y Prosody .
Existe una gran cantidad de software cliente XMPP en varias plataformas modernas y tradicionales, incluidos clientes gráficos y basados en línea de comandos. Según el sitio web de XMPP, algunos de los software más populares incluyen Conversations (Android), Dino (BSD, Windows, Unix, Linux), Converse.js (navegador web, Linux, Windows, macOS), [16] Gajim (Windows, Linux), [16] Monal (macOS, iOS) y Swift.IM (macOS, Windows, Linux).
Otros clientes incluyen: Bombus, ChatSecure , Coccinella , Miranda NG , [16] Pidgin , Psi , [16] Tkabber , Trillian y Xabber .
Existen miles de servidores XMPP en todo el mundo, muchos de ellos públicos, así como también servidores privados de particulares u organizaciones sin fines comerciales. Numerosos sitios web muestran una lista de servidores XMPP públicos en los que los usuarios pueden registrarse (por ejemplo, en el sitio web XMPP.net).
Varios servicios de mensajería instantánea públicos de gran tamaño utilizan o han utilizado XMPP de forma nativa, como "LJ Talk" de LiveJournal , [17] Nimbuzz y HipChat . Varios servicios de alojamiento, como DreamHost , permiten a los clientes de alojamiento elegir servicios XMPP junto con servicios web y de correo electrónico más tradicionales. También existen servicios de alojamiento XMPP especializados en forma de nube , de modo que los propietarios de dominios no necesitan ejecutar directamente sus propios servidores XMPP, como Cisco Webex Connect, Chrome.pl, Flosoft.biz, i-pobox.net y hosting.im.
XMPP también se utiliza en implementaciones de servicios que no son de mensajería instantánea, incluidos sistemas de redes inteligentes como aplicaciones de respuesta a la demanda , middleware orientado a mensajes y como reemplazo de SMS para proporcionar mensajería de texto en muchos clientes de teléfonos inteligentes .
Algunos de los proveedores de mensajería más importantes utilizan, o han estado utilizando, varias formas de protocolos basados en XMPP en sus sistemas backend sin necesariamente exponer este hecho a sus usuarios finales. [18] [19] Un ejemplo es Google , que en agosto de 2005 presentó Google Talk , una combinación de VoIP y sistema de mensajería instantánea que utiliza 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. [20] Google luego agregó la funcionalidad de video a Google Talk, también utilizando el protocolo Jingle para 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 el soporte de cliente a servidor. [21] Google Talk ha sido eliminado desde entonces de la línea de productos de Google.
En enero de 2008, AOL introdujo soporte experimental para XMPP en su servicio AOL Instant Messenger (AIM), [22] lo que permitió a los usuarios de AIM comunicarse mediante XMPP. Sin embargo, en marzo de 2008, este servicio se suspendió. [ cita requerida ] A partir de mayo de 2011, AOL ofrece soporte limitado para XMPP. [23]
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. [24] Algunas funciones no estaban disponibles a través de XMPP y el soporte se abandonó en abril de 2014. [25] De manera similar, en diciembre de 2011, Microsoft lanzó una interfaz XMPP para su servicio Microsoft Messenger . [26] Skype , su sucesor de facto, también proporcionó soporte XMPP limitado. [27] Apache Wave es otro ejemplo. [28]
XMPP es el estándar de facto para el chat privado en plataformas relacionadas con juegos como Origin , [29] y PlayStation , así como las ahora discontinuadas Xfire y Raptr . [30] Dos excepciones notables son Steam [31] y Xbox LIVE ; ambas usan sus propios protocolos de mensajería propietarios .
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. [32] La primera comunidad Jabber se centró en el software de código abierto, principalmente el servidor Jabberd, pero su principal resultado resultó ser el desarrollo del protocolo XMPP.
En 2002, el Grupo de Trabajo de Ingeniería de Internet (IETF) formó un grupo de trabajo XMPP para formalizar los protocolos básicos como una tecnología de mensajería instantánea y presencia del IETF. El protocolo Jabber inicial , 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 del IETF fueron la adición de TLS para el cifrado de canal y SASL para la autenticación). El grupo de trabajo 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, y RFC 6122 especifica 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, la XMPP Standards Foundation (anteriormente Jabber Software Foundation) está activa en el desarrollo de extensiones XMPP abiertas.
El primer servicio de mensajería instantánea basado en XMPP fue Jabber.org [16] , que ha funcionado de forma continua y ha ofrecido cuentas gratuitas desde 1999 [33]. Desde 1999 hasta febrero de 2006, el servicio utilizó Jabberd como software de servidor, momento en el que migró a Ejabberd (ambos son servidores de aplicaciones de software libre ). En enero de 2010, el servicio migró al software de servidor propietario M-Link producido por Isode Ltd. [34]
En septiembre de 2008, Cisco Systems adquirió Jabber, Inc., los creadores del producto comercial Jabber XCP. [35]
La Fundación de Estándares XMPP (XSF) desarrolla y publica extensiones para XMPP a través de un proceso de estándares centrado en los Protocolos de Extensión XMPP (XEP, anteriormente conocidos como Propuestas de Mejora de Jabber - JEP). Las siguientes extensiones son especialmente utilizadas:
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 están utilizando para implementar la Internet de las cosas . Varias extensiones de XMPP son parte de la implementación experimental: Formato de intercambio XML eficiente (EXI); [44] Datos de sensores; [45] Aprovisionamiento; [46] Control; [47] Concentradores; [48] Descubrimiento. [49]
Estos esfuerzos están documentados en una página en la wiki de XMPP dedicada a Internet de las cosas [50] y en la lista de correo de IoT de XMPP. [51]
El grupo de trabajo XMPP del IETF ha elaborado una serie de documentos de solicitud de comentarios (RFC):
Las especificaciones más importantes y más ampliamente implementadas son:
XMPP se ha considerado a menudo 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. [52] [53]
La extensión XMPP para chat multiusuario [38] puede considerarse un competidor de IRC , aunque IRC es mucho más simple, tiene muchas menos funciones y se utiliza mucho más ampliamente. [ cita requerida ]
Las extensiones XMPP para publicación-suscripción [39] proporcionan muchas de las mismas características que el Protocolo avanzado de cola de mensajes (AMQP).