XMPP

3.010 Aufrufe

Veröffentlicht am

Protocollo di IM

Veröffentlicht in: Technologie, News & Politik
  • Als Erste(r) kommentieren

XMPP

  1. 1. Seminario di Protocolli di reti: XMPP Bertolini Roberto Felice Fabio
  2. 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. 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. 4. ARCHITETTURA E COMPONENTI FONDAMENTALI L’architettura XMPP è basata sul modello Client-Server, ed è composta dai seguenti componenti: •Server: •Client: •Gateway:
  5. 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. 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. 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. 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. 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. 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. 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. 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 •

×