Extensible Messaging and Presence Protocol
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 również w innych systemach natychmiastowej wymiany informacji.
IETF opublikowało RFC[2] dotyczące XMPP.
Spis treści |
[edytuj] Zastosowania
Głównym jego zastosowaniem jest wymiana wiadomości w komunikatorach internetowych. Serwery XMPP umożliwiają 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 jedynie do komunikacji między użytkownikami, przykładem czego jest system blogowania przez XMPP – Jogger.
[edytuj] Cechy XMPP
XMPP posiada kilka cech wyróżniających go spośród konkurencyjnych sieci.
- otwartość
- Protokół XMPP jest publicznie dostępny i podlega swobodnej modyfikacji. Klienty, serwery oraz biblioteki są często udostępniane jako Wolne i Otwarte Oprogramowanie.
- decentralizacja
- Dostępnych jest wiele serwerów XMPP. Dodatkowo można uruchomić serwer na własny użytek. Wszystkie dostępne serwery tworzą jedną wspólną sieć.
- bezpieczeństwo
- Każdy serwer XMPP może być oddzielony od głównej publicznej sieci. Wiele serwerów używa SSL do komunikacji z użytkownikami. Część klientów obsługuje PGP lub GPG do szyfrowania transmisji oraz zabezpieczenia oparte na SASL.
- transporty
- Serwery mogą 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 można z nich korzystać za pomocą dowolnego klienta.
[edytuj] XMPP a Jabber
Jabber został 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 został nigdy w pełni opisany, a jego dokumentacja jest opisem stanu istniejącego i nie może być brana pod uwagę jako standard, który powinien zostać zaimplementowany.
XMPP (o dawnej nazwie Jabber) został ustandaryzowany przez IETF. Pomimo jego wstecznej kompatybilności, bardzo stare serwery nie są w pełni zgodne z XMPP.
Implementacje XMPP można 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 określa sposób podłączenia się klienta do serwera, połączenia serwerów między sobą, raportowania błędów, wymiany podstawowych informacji między serwerami i klientami oraz sposób zarządzania listą kontaktów i regułami prywatności. Pozostała funkcjonalność, opisana XEP-ami, nie jest już częścią XMPP – XMPP nie określa i 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.
[edytuj] Ewolucja
- Do uwierzytelnienia użytkowników XMPP wykorzystuje protokół SASL. Również uwierzytelnienie między serwerami może być 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 lub podjąć automatycznie działanie, które obsłuży dany wyjątek.
- Wbudowano rozszerzenie StartTLS, które pozwala na szyfrowanie połączenia na standardowym porcie.
[edytuj] 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'
[edytuj] Przykładowa sesja Jabber
Klient (kuusipuu) łączy się z serwerem Jabberowym (amessage.de port tcp numer 5222), wysyła wiadomość (temat: "test 1449" i treść: "test 1449") do innego klienta (tero) i wylogowuje się.
kuusipuu (otwarcie połączenia):
<?xml version="1.0"?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client" to="amessage.de">
amessage.de:
<stream:stream xmlns='jabber:client'
xmlns:stream='http://etherx.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 i 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>