XMPP
XMPP ist eine von der IETF standardisierte Sammlung diverser XML-basierender Netzwerkprotokolle, die ein erweiterbares Messaging- und Anwesenheitsprotokoll darstellen.
Anders als die meisten anderen Messaging-Dienste ist XMPP dezentral aufgebaut. Die nötige Serversoftware sowie das Protokoll um einen XMPP-Server zu betreiben sind ebenfalls frei verfügbar. So steht jedem Anwender die Möglichkeit offen, selbst einen XMPP-Server aufzusetzen.
XMPP eignet sich daher nicht nur um großen, öffentlichen Nutzergruppen eine Möglichkeit der Kommunikation zu bieten, sondern auch, um im kleinen Rahmen schnell und einfach, und ohne große Hürden (XMPP-Clients sind für alle gängigen Architekturen und Systeme verfügbar) eine Kommunikationsmöglichkeit bereitzustellen.
Nutzwert
Der Nutzwert von XMPP ist objektiv betrachtet recht hoch. Nachfolgende Gegenüberstellung soll dies etwas verdeutlichen.
Vorteile
Aufgrund der freien Verfügbarkeit sämtlicher beteiligten Protokolle und Dienste ist die Implementierung in beliebige Anwendungen rechtlich sowie technisch ohne große Probleme möglich. Für alle verbreiteten Programmier- und Skriptsprachen gibt es Klassen oder Funktionen, mittels derer mit XMPP-Servern interagiert werden kann.
XMPP eignet sich nicht nur als Instant-Messaging-Protokoll, sondern auch, aufgrund der XMPP Basis als Status- und Informationsprotokoll. Durch Erweiterungen des Protokolls kann die XMPP-Funktionalität um ein Vielfaches vergrößert werden, so dass nahezu alle vorstellbaren Funktionen verfügbar gemacht werden können.
Da durch die dezentrale Netzwerkarchitektur XMPPs problemlos XMPP-Server aufgesetzt werden können, ist das Netz sehr ausfallsicher und flexibel. Sollte ein Serverbetreiber seinen XMPP-Dienst einstellen, kann man sich entweder woanders einen Account registrieren, oder selbst einen Server aufsetzen.
XMPP ist vollkommen transparent in Bezug auf Server-Technik und Verschlüsselung. Während man bei den meisten anderen Instant-Messaging-Diensten vollkommen auf den jeweiligen Anbieter angewiesen ist, und diesem vertrauen muss, so kann man, wenn man XMPP verwendet, sicher sein, wie und ob verschlüsselt wird, und kann – im Client – selbst bestimmen, ob man verschlüsselte Kommunikation verwenden möchte.
Nachteile
Da XMPP eine Sammlung von Protokollen ist, ist es zwar weitestgehend kompatibel, aber der Funktionsumfang nicht komplett standardisiert. Zudem wird XMPP stetig weiterentwickelt und um Funktionen ergänzt, wodurch XMPP immer komplexer wird, was zu einer „Überfrachtung“ führen kann.
Die Transports verursachen auf dem Server eine sehr hohe Last, und sind zudem teilweise etwas instabil. Zudem funktionieren sie nicht mehr, wenn der Anbieter, für den man den Transport benötigt, sein Protokoll ändert. Transports können daher nur als Notlösung betrachtet werden, und sollten aufgrund der Nachteile nicht dauerhaft verwendet werden.
Man sollte stattdessen besser einen Multimessenger wie Pidgin verwenden, anstatt eines reinen XMPP-Clients wie Gajim oder Psi. Allerdings haben viele Multimessenger den Nachteil, dass sie nur die zum Chatten nötigen XMPP-Grundfunktionen unterstützen.
Durch die dezentrale Strukur XMPPs ergibt sich zwar dass man einen beliebigen XMPP-Server verwenden kann, jedoch gibt es keine zentrale Kontaktliste. Das heißt, wenn man auf „server1“ einen XMPP-Account „ich“ einrichtet, dann hat „ich@server1“ dort eine Kontaktliste. Wenn der Server nun nicht mehr verfügbar ist, und man stattdessen „ich“ auf „zweiterserver“ registriert, dann hat „ich@zweiterserver“ eine andere Kontaktliste.
Es gibt also keine einheitliche Kontakt-Information, wie bei zentralisierten Instant-Messaging-Protokollen.
Der am schwersten wiegende Nachteil ist jedoch die nur zögerliche Verbreitung von XMPP. Zwar ist der Zugang zu XMPP sehr einfach, allerdings wird jemand, der bisher z.B. nur ICQ nutzte, und nur ICQ-Kontakte hat, zwar auf XMPP umsteigen können, müsste dann aber allen Kontakten mitteilen, auch XMPP zu verwenden. Die Kontakte wiederum werden vermutlich auch nur ICQ-Kontakte haben, und diese ebenfalls zu XMPP bewegen müssen, und so weiter.
Identifikation
User, die auf einem Server vorhanden sind, erhalten von diesem einen Jabber Identifier, kurz JID. Wenn ein Client die JID kennt, kann er mit diesem User-Account interagieren, und dem Nutzer, der hinter dem Account steht, zum Beispiel eine Nachricht zukommen lassen.
JIDs bestehen immer aus User- und Servernamen. Der User „client1“, der auf dem Server „xmpp.example.org“ angelegt wurde, hat demnach die JID „client1@xmpp.example.org“.
Zusätzlich zur JID kann auch noch eine Ressource verwendet werden. Diese Ressource wird dazu benutzt, um den selben User mehrfach am Server anmelden zu können. Der Wert dieser Angabe ist frei wählbar, muss aber den Adressierungsregeln des Internet entsprechen.
Der Anwender hinter dem Usernamen „client1“ könnte sich also zum Beispiel ein mal mit der Ressource „Home“ von zu Hause aus anmelden, und ein mal mit der Ressource „Work“ von der Arbeit aus.
Die Ressource wird der JID durch einen Slash getrennt angehängt.
client1@xmpp.example.org/Home client1@xmpp.example.org/Work
Ressourcen können priorisiert werden. Je höher die Zahl ist, desto wichtiger wird die Ressource vom XMPP-Server angesehen. Wenn an „client1@xmpp.example.org“ eine Nachricht geschickt wird, und dieser User mit zwei verschiedenen Ressourcen angemeldet ist, dann wird die Nachricht an den Client gesendet, dessen Priorität eine höhere Zahl hat.
Wenn zum Beispiel die Ressource „Home“ die Priorität „3“ hat, und die Ressource „Work“ die Priorität „5“ hat, dann wird die Nachricht an den Client mit der Ressource „Work“ weitergeleitet, sofern der Sender der Nachricht nicht explizit angegeben hat, an welche Ressource die Nachricht gesendet werden soll.
Kommunikation
XMPP beherrscht drei Grundlegende Kommunikationswege, zum einen Instant-Messaging, die „klassische“ Variante des 1:1-Chats, des Weiteren Mehrbenutzer-Chats, wie man es aus dem IRC kennt, und zusätlich indirekt auch Voice-over-IP. Sämtliche Interaktion läuft an der Basis über einen dieser drei Kommunikationswege.
Instant-Messaging
Wenn – basierend auf der obigen schematischen Darstellung – „client1@xmpp.example.org“ an „clientb@xmppserver.invalid“ eine Nachricht schickt, sendet dieser die Nachricht zunächst an „xmpp.example.org“, dieser Server kontaktiert dann „xmppserver.invalid“, und übermittelt diesem die Nachricht.
„xmppserver.invalid“ sendet nun eine Information über eine neue Nachricht an „clientb@xmppserver.invalid“. Das XMPP-Programm auf diesem Client empfängt die Meldung, holt die Nachricht vom Server, und zeigt diese an. Wenn „clientb@xmppserver.invalid“ nun auf diese Nachricht antwortet, wird der Vorgang wiederholt, diesmal allerdings in anderer Richtung.
MUC (Multi-User-Chat)
XMPP unterstützt Chats mit mehreren Benutzern gleichzeitig. Dazu wird auf dem Server entweder permanent oder temporär ein Chatraum erstellt, den die Nutzer betreten können. Die Nachricht werden dann nicht einzeln als Nachrichten an die Clients verteilt, sondern erscheinen untereinander im Chatfenster.
Diese Chats unterstützten verschiedene Rollen. So kann in einem Chatraum ein Benutzer „Administrator“ sein, also Regeln für den Raum konfigurieren, User aus dem Raum entfernen, Zugriffskontrollen einstellen oder auch andere User „stummschalten“.
Voice-over-IP
Mit der „Jingle“-Erweiterung besteht zudem die Möglichkeit, VoIP-Telefonate zu führen. Hierfür wird eine Peer-to-Peer-Verbindung aufgebaut. Auch Videotelefonie ist damit möglich. Derzeit befindet sich die Jingle-Funktionalität der meisten Clients im Alpha- oder Beta-Stadium.
Implementiert wird Jingle meist durch die von Google als OpenSource veröffentlichte libjingle. Jedoch wird derzeit üblicher Weise nur Voice- und nicht Video-over-IP ermöglicht. Zudem sind die Daten bisher nur bei einem Client ( Jitsi) verschlüsselt.
Transports
Transports sind Zusatzprogramme, mittels derer ein XMPP-Server fähig ist, auch als Server für andere Messaging-Dienste benutzt werden zu können. So kann zum Beispiel ein ICQ-Transport benutzt werden, um über einen XMPP-Server Nachrichten an User im ICQ-Netzwerk zu übermitteln.
Transports sind Server-Abhängig, nicht alle Server bieten automatisch auch Transports für alle Dienste an. Neben Messenger-Diensten können zum Beispiel auch SMS-, e-Mail- oder RSS-Dienste durch Transports angeboten werden.
Um einen Transport zu nutzen, meldet man sich mit seinem XMPP-Account am XMPP-Server an, und wählt über den XMPP-Client aus, welchen Transport man verwenden will. Im Falle des ICQ-Transports meldet man sich nun mit seinen ICQ-Daten am Transport an, und kann von diesem Zeitpunkt an, über den vom XMPP-Server bereitgestellten ICQ-Transport am ICQ-Netz teilnehmen.
Zugang
Wie bereits angesprochen funktioniert XMPP dezentral. Das heißt, dass es nicht wichtig ist, auf welchem Server man sich einen XMPP-Account erstellt. Es gibt im Internet viele Listen (siehe exemplarisch verlinkte Liste in den Weblinks), auf denen XMPP-Server verzeichnet sind. Diese Listen umfassen meist auch Informationen darüber, welche Dienste und Transports der Jeweilige XMPP-Server anbietet.
Zudem besteht die Möglichkeit, auch selbst einen XMPP-Server, wie ejabberd, aufzusetzen, und von diesem aus XMPP zu nutzen. Für die Kommunikation untereinander ist nicht entscheidend, auf welchem Server die Kommunikationspartner sich jeweils befinden.
Wer über einen GMX- oder Web.de-Email-Account verfügt, verfügt bereits auch über einen XMPP-Account, da dies zu den Funktionen eines Email-Accounts der genannten Anbieter gehört. Auch wer einen Google-Account besitzt, verfügt bereits über einen XMPP-Account. Facebook-Nutzer können ebenfalls XMPP verwenden, um den Facebook-Chat zu nutzen (siehe Weblinks).
Verschlüsselung
XMPP bietet unterschiedlich sichere Möglichkeiten der Verschlüsselung. Folgende Verschlüsselungsmethoden werden unterstützt.
- Server-To-Server (SSL)
- Client-To-Server (SSL)
- Client-To-Server und Server-To-Server kombiniert
- End-To-End (GnuPG oder OTR)
Komplett unverschlüsselter Austausch von Nachrichten ist unüblich. Das rechtsseitig dargestellte Diagramm zeigt die Verschlüsselungsmethoden nochmal grafisch auf.
Einen Überblick über die verschiedenen Verschlüsselungstechniken bietet der Wiki-Artikel Grundlagen der Verschlüsselung.
Verwendete Ports
XMPP verwendet folgende Ports:
- c2s: 5222
- s2s: 5269
- SSL: 5223
- TLS: 5224
Alternativ können auch die Ports 443 und 80 verwendet werden. Üblicherweise wird nur Port 5222 verwendet, und an diesem mittels STARTTLS die Authentifizierung vorgenommen.
Siehe auch
- Liste von XMPP-Software
- XMPP-Kategorie
- ejabberd (eigener XMPP-Server)
- Prosody (alternativer eigener XMPP-Server)