# Extensible Messaging and Presence Protocol

Extensible Messaging and Presence Protocol (XMPP), voorheen Jabber geheten, is een open en op XML gebaseerd netwerkprotocol voor instant messaging en presence notification. Het wordt op dit moment gebruikt op duizenden XMPP-servers op het internet en door miljoenen mensen wereldwijd. Het protocol wordt ook gebruikt door Google Talk en Google Wave.
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).

## Hoe werkt het

Veronderstel dat juliet@capulet.com wil chatten met romeo@montague.net. Juliet en Romeo hebben respectievelijk een account op de servers capulet.com en montague.net. Als Juliet een bericht wil verzenden naar Romeo gebeurt het volgende:
* Juliets XMPP-client zendt het bericht naar de XMPP-server capulet.com.
** Als montague.net geblokkeerd wordt op capulet.com, dan wordt het bericht verwijderd.
* De XMPP-server capulet.com opent een verbinding met de XMPP-server montague.net.
* De server montague.net verzendt het bericht naar Romeo's XMPP-client.
** Als capulet.com geblokkeerd wordt op montague.net, dan wordt het bericht verwijderd
** Als Romeo niet verbonden is, dan wordt het bericht opgeslagen tot wanneer Romeo terug online komt. (In de veronderstelling dat de server offline berichten toestaat.)
* Romeo ontvangt het bericht.
| Juliet | ↔ | capulet.com | → | montague.net | ↔ | Romeo |

## Eigenschappen
### Gestandaardiseerd

    De specificaties van XMPP zijn publiek beschikbaar. Het IETF heeft ook formeel de basisprotocollen goedgekeurd als 'instant messaging en instant presence technologie' en gepubliceerd als RFC 3920 en RFC 3921.

### Bewezen

    De specificaties van XMPP zijn sinds 1998 meer en meer gestabiliseerd. Honderden ontwikkelaars werken intussen met XMPP en tienduizenden servers met miljoenen gebruikers gebruiken het.

### Uitbreidbaar

    Het protocol gebruikt XML-namespaces. Op deze manier kan iedereen het protocol uitbreiden zonder bestaande toepassingen te storen. Om te voorkomen dat meerdere uitbreidingen ontstaan die dezelfde functionaliteit toevoegen.

### Gedecentraliseerd

    Een groot aantal servers wordt samengeweven tot 1 groot netwerk. Hierdoor is er geen centraal zwak punt in het netwerk en is er dus een grote stabiliteit. Iedereen is vrij om al dan niet zijn eigen server op te starten en daarmee deel uit te maken van het globale netwerk.

### Veilig

    Robuuste beveiliging met SASL en TLS worden ondersteund.

### Toegang tot andere protocollen

    Een transport of gateway zorgt ervoor dat gebruikers van XMPP toegang krijgen tot netwerken die een ander protocol spreken, zoals ICQ en MSN Messenger maar ook sms of E-mail of andere. In tegenstelling tot multi-protocol clients biedt XMPP toegang tot deze andere protocollen op serverniveau in plaats van op clientniveau. Hierdoor kan elke client die de basisspecificaties volledig ondersteunt via transporten verbinden met andere netwerken.

## Specificaties

De XMPP-werkgroep van het IETF heeft een reeks Request for Comments (RFCs) gecreëerd die op 4 oktober 2004 zijn uitgebracht:
* RFC 3920, "Extensible Messaging and Presence Protocol (XMPP): Core" definieert het versturen van berichten tussen client en server door gebruik te maken van twee XML-streams. Die streams bestaan uit de tags <presence/>, <message/> en <iq/> (info/query). Een verbinding wordt geverifieerd met Simple Authentication and Security Layer (SASL) en versleuteld met Transport Layer Security (TLS).
* RFC 3921, "Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence" definieert instant messaging (IM), de bekendste toepassing van XMPP.
* RFC 3922, "Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging (CPIM)" bevat een vergelijking van XMPP en de Common Presence and Instant Messaging (CPIM) specificaties.
* RFC 3923, "End-to-End Signing and Object Encryption for the Extensible Messaging and Presence Protocol (XMPP)" definieert volledige versleuteling van XMPP-berichten en maakt daarvoor gebruik van S/MIME. Hiermee strijdig gebruiken vele clients momenteel GPG voor het versleutelen van berichten.

## Ontstaan

Een beknopt overzicht van de belangrijkste gebeurtenissen:
* 1998: Jeremie Miller onthulde het bestaan van Jabber aan het grote publiek.
* 2000: In mei werd de eerste versie van de serversoftware vrijgegeven: jabberd 1.0.
* 2001: In augustus zag de Jabber Software Foundation (JSF) het levenslicht. Haar taak was het groeiende aantal gebruikers van Jabber beter te kunnen coördineren. De voornaamste taak van de JSF is het beheren van het protocol. Derden kunnen Jabber Enhancement Proposals (JEPs) indienen die na overleg al dan niet worden goedgekeurd.
* 2002-2004: De JSF ijverde bij het IETF voor de opname van het protocol (dat de naam XMPP krijgt) als standaard.
* 2004: Na 3 jaar werk werden de 4 belangrijkste specificaties goedgekeurd door het IETF wat XMPP brede erkenning oplevert.
* 2005: Google Talk werd gelanceerd en is gebaseerd op XMPP.
* 2006: De JEPs veranderden van naam en heten sindsdien XMPP Extension Protocols (XEPs). Ze kregen ook een afzonderlijke website.
* 2007: De JSF veranderde haar naam in XMPP Standards Foundation (XSF) en legde zo nog meer de nadruk op het ontwikkelen van nieuwe protocoluitbreidingen en niet op het ontwikkelen van software.
* 2014: Een 70-tal diensten en programma's stappen over op beveiligde TLS-verbindingen.

## Concurrerende technologieën

* SIMPLE