2. INDICE
• Introduzione
• Architettura generale e componenti fondamentali
• Schema di indirizzamento
• XML Stream
• XML Stanza
• Esempi
• Passi fondamentali di XMPP
• Negoziazione TLS/SASL
• Resource Binding
• Estensioni
3. INTRODUZIONE
XMPP (Extensible Messaging and Presence Protocol) è un protocollo aperto
basato su XML
• utilizzato da applicazioni di IM (Instant Messaging), di presenza, di
collaborazione, di whiteboarding ed in generale da servizi di tipo domanda e
risposta
• XMPP è estendibile (estensioni definite da Jabber Software Foundation)
Storia di XMPP:
• 1998: Jeremie Miller avvia il progetto Jabber
• 2001: nasce Jabber Software Foundation
• 2002: JSF sottopone il protocollo XMPP a IETF
• 2002: IETF forma il gruppo di lavoro XMPP
• 2004: IETF pubblica gli RFC di XMPP (3920-3923)
4. ARCHITETTURA E COMPONENTI
FONDAMENTALI
L’architettura XMPP è basata sul modello
Client-Server, ed è composta dai seguenti componenti:
•Server:
•Client:
•Gateway:
5. SCHEMA DI INDIRIZZAMENTO
In XMPP ogni entità in rete è indirizzabile in maniera univoca attraverso un indirizzo
chiamato JID.
Il JID può essere:
BARE: node@domain (identifica solamente il nodo)
FULL: node@domain/resource ( identifica un’ entità all’interno di un nodo)
6. XML STREAM
L’XML Stream è un contenitore per lo scambio di elementi XML tra due entità attraverso la
rete, identificato da un tag di apertura “<stream>” e uno di chiusura “</stream>”.
All’interno di esso è possibile trasmettere diversi elementi XML:
•XML Stanza
•Elementi di negoziazione TLS e/o SASL
7. XML STANZA
L’XML Stanza è un blocco di informazioni strutturate che viene spedite da un’entità
all’altra all’interno dell’XML Stream.
L’XML Stanza è identificata da un tag di apertura e di chiusura.
Ci sono diversi tipi di XML Stanza che si differenziano a seconda del messaggio che si
vuole inviare; di default il core XMPP prevede:
<message>: <presence>: <iq>:
<message <presence from='wall- <iq
to='eve@space.com' e@earth.net/city' from='eve@space.com/sp
to='eve@space.com'/> ace_station' type='get'
from='walle@earth.com/limewire12 id='roster_1'>
345' <query
type='chat' xmlns='jabber:iq:roster'/>
xml:lang='en'> </iq>
<body>Oh, Eve.</body>
</message>
8. Esempio di XML Stream e XML Stanza:
ESEMPI
C: <?xml version='1.0'?> ATTRIBUTI STREAM
<stream:stream
to='example.com' to: utilizzato per indicare l’entità
xmlns='jabber:client' ricevente;
xmlns:stream='http://etherx.jabber.org/streams' from: necessario per rispondere al
version='1.0'>
S: <?xml version='1.0'?>
mittente;
<stream:stream id: identificatore univoco creato dal
from='example.com' ricevente per tenere traccia della sessione;
id='someid' xml:lang: linguaggio di default usato
xmlns='jabber:client' nella comunicazione;
xmlns:stream='http://etherx.jabber.org/streams' version: versione XML utilizzata.
version='1.0'>
... criptazione, autenticazione, resource binding... ATTRIBUTI STANZA
C: <message from='juliet@example.com' to: JID del destinatario;
to='romeo@example.net'
xml:lang='en'>
from: JID del mittente;
C: <body>Art thou not Romeo, and a Montague?</body> id: (opzionale) e usato dall’entità mittente
C: </message> per monitorare le interazioni inerenti a IQ
S: <message from='romeo@example.net' Stanza;
to='juliet@example.com' type: scopo o contesto del messaggio,
xml:lang='en'> presenza o IQ Stanza. Il valore
S: <body>Neither, fair saint, if either thee dislike.</body>
S: </message>
ammissibile dipende dal tipo di XML
C: </stream:stream> Stanza;
S: </stream:stream> Xml:lang: linguaggio di default usato
nella comunicazione.
9. PASSI FONDAMENTALI DI XMPP
I passi fondamentali per stabilire una comunicazione con XMPP sono:
1. Determine the hostname and port at which to connect
2. Open a TCP connection
3. Open an XML stream
4. Complete TLS negotiation for channel encryption (recommended)
5. Complete SASL negotiation for authentication
6. Bind a resource to the stream
7. Exchange an unbounded number of XML stanzas with other entities on the
network
8. Close the XML stream
9. Close the TCP connection
10. TLS/SASL
Dopo aver stabilito una connessione TCP e aver aperto un flusso XML si procede con la
negoziazione TLS e SASL.
TLS (Transport Layer Security ):
•Permette di criptare lo stream XML e quindi realizzare un trasferimento di dati sicuro
tra le due entità.
•L’uso di TLS non è obbligatorio, quindi il client comunica al server, tramite
STARTTLS, la volontà di usare un flusso sicuro per la comunicazione.
SASL (Simple Authentication and Security Layer):
•Permette l’autenticazione delle due entità coinvolte nella comunicazione.
11. RESOURCE BINDING
Successivamente all’autenticazione SASL l’entità che inizia la connessione potrebbe voler
eseguire il binding delle risorse(la parte resource del JID), oppure potrebbe anche essere
obbligato a farlo sotto richiesta del server.
Fino a questo punto il client è identificato attraverso un BARE JID
(node@domain), effettuando il resource binding si aggiunge al BARE JID del client un
identificatore di risorsa, generando cosi un FULL JID (node@domani/resource) che viene
utilizzato come indirizzo all’interno dello stream e che permette quindi lo scambio di
XML Stanza.
Il client lascia al server il compito di Il client scieglie una specifica risorsa:
sciegliere la risorsa:
<iq type='set' id='bind_2'>
<iq type='set' id='bind_1'> <bind
<bind xmlns='urn:ietf:params:xml:ns:xmpp
xmlns='urn:ietf:params:xml:ns:xmpp- -bind‘>
bind'/> <resource>someresource</resource>
</iq> </bind>
</iq>
In seguito il server invia un messaggio di accettazione,di rifiuto o di errore
12. ESTENSIONI
Il protocollo XMPP viene costantemente esteso dalla XMPP Standards
Foundation (XSF); tra le più interessanti troviamo:
•File transfert
•Jingle
•Privacy List
•Use avatar
•Invisibility
•
•
•
•
•
Tutte le estensioni si trovano su www.xmpp.org/extensions
•