Extensible Messaging and Presence Protocol (XMPP), voorheen Jabber geheten, is een Open standaard, een op XML gebaseerd netwerkprotocol voor instant messaging en presence notification.
De XML-streamingtechnologie zag in 1998 het levenslicht onder de naam Jabber. De specificaties zijn publiekelijk beschikbaar, waardoor vele implementaties open-source zijn. De basis van Jabber werd in 2004 door het Internet Engineering Task Force (IETF) goedgekeurd als Extensible Messaging and Presence Protocol (XMPP).
XMPP is ontworpen als een gedecentraliseerd communicatiesysteem, vergelijkbaar met e-mail. Dit betekent dat geen centrale server nodig is en dat verschillende servers met elkaar kunnen communiceren via federatie.
Een belangrijk uitgangspunt van het protocol is eenvoud van de kernspecificatie, gecombineerd met uitbreidbaarheid via gestandaardiseerde extensies. Hierdoor blijft de basis stabiel, terwijl nieuwe functies onafhankelijk kunnen worden ontwikkeld en geïmplementeerd.
Het protocol is gebaseerd op open standaarden en bevordert interoperabiliteit tussen verschillende implementaties.
In XMPP communiceren clients met een server via een permanente XML-stream. De server verzorgt authenticatie, routing van berichten en verbinding met andere servers.
Elke gebruiker heeft een unieke XMPP-adresvorm (een Jabber ID of JID), zoals: gebruiker@domein.tld.
Servers kunnen onderling verbinding maken om berichten uit te wisselen tussen gebruikers op verschillende domeinen. Dit federatieve model maakt communicatie mogelijk tussen onafhankelijke XMPP-domeinen.
Deze architectuur is vergelijkbaar met het e-mailprotocol SMTP.
XMPP is gebaseerd op het versturen van XML-streams tussen entiteiten. Binnen deze streams worden zogeheten stanzas gebruikt, die de basis vormen van communicatie:
<message/> voor berichten<presence/> voor statusinformatie<iq/> (info/query) voor gestructureerde verzoeken en antwoordenDe communicatie verloopt doorgaans via TCP, met optionele beveiliging via TLS. Authenticatie gebeurt via SASL-mechanismen.
XMPP is opgebouwd uit een relatief kleine kernspecificatie die door de Internet Engineering Task Force (IETF) is gestandaardiseerd, aangevuld met een groot ecosysteem van uitbreidingen.
De kernspecificaties definiëren de basis van het protocol, zoals het transport van XML-streams, adressering en basisberichtenuitwisseling. Deze zijn vastgelegd in RFC 6120 (Core), RFC 6121 (Instant Messaging and Presence) en gerelateerde specificaties.
Naast deze kernspecificaties worden extra functies toegevoegd via XMPP Extension Protocols (XEP's). XEP's zijn gestandaardiseerde uitbreidingsdocumenten die worden ontwikkeld en onderhouden door de XMPP Standards Foundation (XSF). Ze maken het mogelijk om nieuwe functionaliteit te introduceren zonder de kern van het protocol aan te passen.
De XEP-structuur omvat zowel informatieve als strikt gestandaardiseerde specificaties en bestrijkt een breed scala aan toepassingen. Enkele voorbeelden zijn groepscommunicatie via Multi-User Chat (XEP-0045), bestandsoverdracht via HTTP Upload (XEP-0363) en end-to-end encryptie via OMEMO (XEP-0384).
Door deze scheiding tussen stabiele kernspecificaties en uitbreidbare XEP's kan XMPP enerzijds interoperabiliteit en stabiliteit garanderen, terwijl anderzijds innovatie en toepassing in uiteenlopende domeinen mogelijk blijft.
XMPP ondersteunt het gebruik van TLS voor het beveiligen van zowel client-server- als server-serververbindingen.
Voor end-to-end-encryptie zijn aanvullende protocollen beschikbaar via XEP's. Veelgebruikte methoden zijn OMEMO, een end-to-end encryptieprotocol gebaseerd op het Signal protocol, en OpenPGP-gebaseerde encryptie.
De beschikbaarheid van beveiligingsfuncties is afhankelijk van de gebruikte client en serverimplementatie.
XMPP wordt gebruikt in verschillende domeinen, waaronder instant messaging, bedrijfscommunicatie en gedecentraliseerde communicatiesystemen. Door de uitbreidbaarheid van het protocol wordt het ook toegepast in IoT-omgevingen en realtime datacommunicatie.
Bekende open-source implementaties zijn onder andere ejabberd en Openfire als servers, en clients zoals Gajim en Conversations. Historisch werd XMPP gebruikt in Google Talk en in de federatieve architectuur van Google Wave.
Een beknopt overzicht van de belangrijkste gebeurtenissen: