XMPP

Aus wiki.archlinux.de
Schematische Darstellung eines Jabber-Netzwerkes

Jabber ist eine Sammlung diverser XML-basierender Netzwerkprotokolle. XMPP, der Kern dieser Protokollsammlung, ist ein von der IETF standardisiertes, auf XML basierendes Messaging- und Anwesenheitsprotokoll.

Anders als die meisten anderen Messaging-Dienste ist Jabber dezentral aufgebaut. Die nötige Serversoftware sowie das Protokoll um einen Jabber-Server zu betreiben sind ebenfalls frei verfügbar. So steht jedem Anwender die Möglichkeit offen, selbst einen Jabber-Server aufzusetzen.

Jabber 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 (Jabber-Clients sind für alle gängigen Architekturen und Systeme verfügbar) eine Kommunikationsmöglichkeit bereitzustellen.

Nutzwert

Der Nutzwert von Jabber 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 Scriptsprachen gibt es Klassen oder Funktionen, mittels derer mit Jabber-Servern interagiert werden kann.

Jabber eignet sich nicht nur als Instant-Messaging-Protokoll, sondern auch, aufgrund der XMPP Basis als Status- und Informationsprotokoll. Durch Erweiterungen des Protokolls kann die Jabber/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 Jabbers problemlos Jabber-Server aufgesetzt werden können, ist das Netz sehr ausfallsicher und flexibel. Sollte ein Serverbetreiber seinen Jabber-Dienst einstellen, kann man sich entweder woanders einen Account registrieren, oder selbst einen Server aufsetzen.

Jabber/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 Jabber 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 Jabber im Kern zwar XMPP benutzt, aber ansonsten eine Sammlung von Protokollen ist, ist es zwar weitestgehend kompatibel, aber der FUnktionsumfang nicht komplett standardisiert. Zudem wird Jabber stetig weiterentwickelt und um Funktionen ergänzt, wodurch Jabber 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 Jabber-Clients wie Gajim oder Psi. Allerdings haben viele Multimessenger den Nachteil, dass sie nur die zum chatten nötigen Jabber-Grundfunktionen unterstützen.

Durch die dezentrale Strukur Jabbers ergibt sich zwar dass man einen beliebigen Jabber-Server verwenden kann, jedoch gibt es keine zentrale Kontaktliste. Das heißt, wenn man auf „server1“ einen Jabber-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 Jabber. Zwar ist der Zugang zu Jabber sehr einfach, allerdings wird jemand, der bisher z.B. nur ICQ nutzte, und nur ICQ-Kontakte hat, zwar auf Jabber umsteigen können, müsste dann aber allen Kontakten mitteilen, auch Jabber zu verwenden. Die Kontakte wiederum werden vermutlich auch nur ICQ-Kontakte haben, und diese ebenfalls zu Jabber bewegen müssen, und so weiter.

Identifikation

User, die auf einem Server vorhanden sind, erhalten von diesem eine Jabber-ID, 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 „jabber.example.org“ angelegt wurde, hat demnach die JID „client1@jabber.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@jabber.example.org/Home
client1@jabber.example.org/Work

Ressourcen können priorisiert werden. Je höher die Zahl ist, desto wichtiger wird die Ressource vom Jabber-Server angesehen. Wenn an „client1@jabber.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.

Nachrichten

Wenn – basierend auf der obigen schematischen Darstellung – „client1@jabber.example.org“ an „clientb@jabberserver.invalid“ eine Nachricht schickt, sendet dieser die Nachricht zunächst an „jabber.example.org“, dieser Server kontaktiert dann „jabberserver.invalid“, und übermittelt diesem die Nachricht.

„jabberserver.invalid“ sendet nun eine Information über eine neue Nachricht an „clientb@jabberserver.invalid“. Das Jabber-Programm auf diesem Client empfängt die Meldung, holt die Nachricht vom Server, und zeigt diese an.

Wenn „clientb@jabberserver.invalid“ nun auf diese Nachricht antwortet, wird der Vorgang wiederholt, diesmal allerdings in anderer Richtung.

Chat

Jabber 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.

Transports

Transports sind Zusatzprogramme, mittels derer ein Jabber-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 Jabber-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 Jabber-Account am Jabber-Server an, und wählt über den Jabber-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 Jabber-Server bereitgestellten ICQ-Transport am ICQ-Netz teilnehmen.

Zugang

Wie bereits angesprochen funktioniert Jabber dezentral. Das heißt, dass es nicht wichtig ist, auf welchem Server man sich einen Jabber-Account erstellt. Es gibt im Internet viele Listen (siehe exemplarisch verlinkte Liste in den Weblinks), auf denen Jabber-Server verzeichnet sind. Diese Listen umfassen meist auch Informationen darüber, welche Dienste und Transports der Jeweilige Jabber-Server anbietet.

Zudem besteht die Möglichkeit, auch selbst einen Jabber-Server, zum Beispiel ejabberd, aufzusetzen, und von diesem aus Jabber 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 Jabber-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 Jabber-Account.

Verschlüsselung

Verschiedene Verschlüsselungsmethoden im Vergleich

Jabber 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

Jabber verwendet folgende Ports:

  • Daten: 5222
  • 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

Weblinks