Extensible Messaging and Presence Protocol (XMPP, dawniej Jabber[1]) – protokół bazujący na języku XML umożliwiający przesyłanie w czasie rzeczywistym wiadomości oraz statusu. Protokół ma zastosowanie nie tylko w komunikatorach, ale także w innych systemach natychmiastowej wymiany informacji.
IETF opublikowało RFC[2] dotyczące XMPP.
Zastosowania
Podstawowym jego zastosowaniem jest wymiana wiadomości w komunikatorach internetowych. Serwery XMPP dopuszczają także za pomocą tzw. transportów komunikację z użytkownikami innych protokołów, jak Gadu-Gadu, Tlen.pl, ICQ czy MSN Messenger.
Protokół nie musi być wykorzystywany zaledwie do komunikacji pomiędzy użytkownikami, przykładem czego jest system blogowania przez XMPP – Jogger.
Cechy XMPP
Schemat działania sieci XMPP
XMPP ma parę cech wyróżniających go spośród konkurencyjnych sieci.
- otwartość
- Protokół XMPP jest publicznie dostępny oraz podlega swobodnej modyfikacji. Klienty, serwery oraz biblioteki są wielokrotnie udostępniane jako Wolne oraz Otwarte Oprogramowanie.
- decentralizacja
- Dostępnych jest wiele serwerów XMPP. Dodatkowo da się uruchomić serwer na własny użytek. Wszystkie dostępne serwery składają się na jedną wspólną sieć.
- bezpieczeństwo
- Każdy serwer XMPP bywa oddzielony od głównej publicznej sieci. Wiele serwerów używa SSL do komunikacji z użytkownikami. Część klientów obsługuje PGP albo GPG do szyfrowania transmisji oraz zabezpieczenia oparte na SASL.
- transporty
- Serwery potrafią udostępniać użytkownikom dodatkowe usługi, jak komunikacja z innymi protokołami oraz obsługa poczty elektronicznej. W przeciwieństwie do wtyczek do komunikatorów da się z nich korzystać za pomocą dowolnego klienta.
XMPP a Jabber
Jabber stał się zapoczątkowany w 1998 roku przez Jeremiego Millera. Od tamtego czasu powstało wiele serwerów oraz klientów XMPP, które korzystają z tego protokołu. Sam protokół z kolei nie stał się wcale w pełni opisany, a jego dokumentacja jest opisem stanu istniejącego oraz nie bywa brana pod uwagę jako standard, który powinien zostać zaimplementowany.
XMPP (o dawnej nazwie Jabber) stał się ustandaryzowany przez IETF. Pomimo jego wstecznej kompatybilności, bardzo stare serwery nie są w pełni zgodne z XMPP.
Implementacje XMPP da się zobaczyć w takich serwerach jak jabberd2 oraz klientach, jak np. Tkabber.
Protokół pochodny od XMPP był wykorzystywany w polskim komunikatorze Tlen.pl (teraz jednak dąży on do coraz większej kompatybilności z XMPP).
Trzeba też zaznaczyć, że XMPP wyznacza sposób podłączenia się klienta do serwera, połączenia serwerów pomiędzy sobą, raportowania błędów, wymiany podstawowych informacji pomiędzy serwerami oraz klientami oraz sposób zarządzania listą kontaktów oraz regułami prywatności. Pozostała funkcjonalność, opisana XEP-ami, nie jest już częścią XMPP – XMPP nie wyznacza oraz nie będzie określał sposobu przesyłu plików czy dostępu do listy transportów na serwerze. To wszystko to tylko rozszerzenia będące częścią Jabber, a nie XMPP.
Ewolucja
- Do uwierzytelnienia użytkowników XMPP wykorzystuje protokół SASL. Również uwierzytelnienie pomiędzy serwerami bywa realizowane przy pomocy tego protokołu.
- Dodano reguły prywatności. Pozwalają one określić użytkownikowi od kogo chce dostawać wiadomości, komu pokazywać swój status.
- XMPP zawiera dokładniejsze informacje o powstałych błędach, dzięki czemu klient użytkownika może wygenerować zrozumiały komunikat albo podjąć automatycznie działanie, które obsłuży dany wyjątek.
- Wbudowano rozszerzenie StartTLS, które dopuszcza na szyfrowanie połączenia na standardowym porcie.
Dokumenty RFC
- RFC 3920 Extensible Messaging and Presence Protocol (XMPP): Core
- RFC 3921 Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence
- RFC 3922 Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging (CPIM)
- RFC 3923 End-to-End Signing and Object Encryption for the Extensible Messaging and Presence Protocol (XMPP)
- RFC 4622 Internationalized Resource Identifiers (IRIs) and Uniform Resource Identifiers (URIs) for the Extensible Messaging and Presence Protocol (XMPP)
- RFC 4854 A Uniform Resource Name (URN) Namespace for Extensions to the Extensible Messaging and Presence Protocol (XMPP)
- RFC 4979 IANA Registration for Enumservice 'XMPP'
Przykładowa sesja Jabber
Klient (kuusipuu) łączy się z serwerem Jabberowym (amessage.de port tcp numer 5222), wysyła wiadomość (temat: "test 1449" oraz treść: "test 1449") do innego klienta (tero) oraz wylogowuje się.
kuusipuu (otwarcie połączenia):
<?xml version="1.0"?>
<stream:stream xmlns:stream="nulletherx.jabber.org/streams"
xmlns="jabber:client" to="amessage.de">
amessage.de:
<stream:stream xmlns='jabber:client'
xmlns:stream='nulletherx.jabber.org/streams' from='amessage.de'
id='1461777714'>
kuusipuu (autoryzacja użytkownika):
<iq type="set" id="auth_2" to="amessage.de" >
<query xmlns="jabber:iq:auth">
<username>kuusipuu</username>
<password>mypassword</password>
<resource>Work</resource>
</query>
</iq>
amessage.de:
<iq from="amessage.de" id='auth_2' type='result'/>
kuusipuu (wysyłanie wiadomości oraz zamknięcie połączenia):
<message to="tero@example.com" >
<subject>test 1449</subject>
<body>test 1449</body>
</message>
<presence type="unavailable" >
<status>Logged out</status>
</presence>
</stream:stream>
amessage.de:
</stream:stream>
Sprawdź też
Przypisy
Linki zewnętrzne