112
Ever used WhatsApp or Google Cloud Messaging?

XMPP Technical Overview + Jingle Protocol Study

Embed Size (px)

Citation preview

Ever used WhatsApp or Google Cloud Messaging?

Ever wondered which protocol lies behind it?

That’s a chat protocol.

Open Source

Standardized

Decentralized

Interoperable

Encrypted

Extensible

Goals?

Origins?

XMPP Architecture

XMPP Architecture

jappix.comjabber.org

talkr.im

XMPP Architecture

jappix.comjabber.org

talkr.im

XMPP Architecture

jappix.comjabber.org

talkr.imServer to server

TCP 5269Outbound + Inbound

XMPP Architecture

jappix.comjabber.org

talkr.im

gmail.com googlemail.com

XMPP Architecture

jappix.comjabber.org

talkr.im

gmail.com googlemail.com

XMPP Architecture

jappix.comjabber.org

talkr.im

Not encrypted

PLAIN

gmail.com googlemail.com

Encrypted

TLS v1.0+

NO SSL (v3-)

XMPP Architecture

jappix.comjabber.org

talkr.im

[email protected]@jabber.org

[email protected]

XMPP Architecture

jappix.comjabber.org

talkr.im

[email protected]@jabber.org

[email protected]

Pidgin Beem

AdiumJappix

IM+IM+

XMPP Architecture

jappix.comjabber.org

talkr.im

[email protected]@jabber.org

[email protected]

Pidgin Beem

AdiumJappix

IM+IM+

Client to server

TCP 5222Outbound + Inbound

XMPP Architecture

jappix.comjabber.org

talkr.im

[email protected]@jabber.org

[email protected]

Pidgin Beem

AdiumJappix

IM+IM+

Web to proxy to server

TCP 5280Outbound + Inbound

XMPP Architecture

jappix.comjabber.org

talkr.im

[email protected]@jabber.org

[email protected]

[email protected]

[email protected]

[email protected]

+25K users

[email protected]

XMPP Architecture

jappix.comjabber.org

talkr.im

[email protected]@jabber.org

[email protected]

[email protected]

[email protected]

[email protected]

+25K users

[email protected]

gmail.com

+425M users!

googlemail.com

XMPP Architecturejappix.com

XMPP Architecturejappix.com

muc.jappix.com

pubsub.jappix.com

vjud.jappix.com

XMPP Components

websocket.jappix.com

XMPP Architecturejappix.com

muc.jappix.com

pubsub.jappix.com

vjud.jappix.com

XMPP Components XMPP Gateways

skype.jappix.com

msn.jappix.com

websocket.jappix.com

XMPP Architecturejappix.com

muc.jappix.com

pubsub.jappix.com

vjud.jappix.com

XMPP Components XMPP Gateways

skype.jappix.com

msn.jappix.com

Non-XMPP services

stun.jappix.com

turn.jappix.com

websocket.jappix.com

XMPP ArchitectureSecurity watchdog

XMPP Architecture

Everything is a node

Server = node Gateway = node

Client = node Bot = node

Component = node

XMPP Architecture

Server => TCP 5269 Client => TCP 5222

HTTP services => TCP 5280

XMPP Architecture

1 node = 1 JID = “1 phone number”

XMPP Architecture

Full JID = [email protected]/resource Bare JID = [email protected]

XMPP Architecture

Stanza = XMPP XML node

XMPP Architecture

to = sender user from = receiving user type = stanza purpose id = stanza identifier

XMPP CoreStandardized - IETF RFC

XMPP Core

<message />

XMPP Core

<message    type=‘chat’       from=‘[email protected]/Mac’    to=‘[email protected]/Gajim’    id=‘sz_ab_11’>  <body>Hello buddy!</body></message>

XMPP Core

<presence />

XMPP Core

<presence    type=‘available’       to=‘[email protected]‘    id=‘sz_ab_12’>  <show>away</show></presence>

XMPP Core

<iq />

XMPP Core

<iq    type='get'    from=‘[email protected]/iPhone‘    to='[email protected]/Jappix'    id=‘sz_ab_292’>  <query xmlns='jabber:iq:version'/></iq>

STREAM

S

STREAM

R

STREAM

R

STREAM

S

STREAM

R

STREAM

S

STREAM

STREAM

R

BINDING

S

BINDING

BINDING

R

R

BINDING

S

BINDING

R

BINDING

S

BINDING

CLOSING

CLOSING

S

XMPP EXtensionsaka ‘XEP’

XEP Types

Procedural Standards Track Historical

Informational Humorous

XMPP Extensions

XEP Statuses

Active

Draft

Obsolete

DeprecatedDeferred

Experimental

Final

Proposed

Rejected Retracted

XMPP Extensions

357 total

XMPP Extensions

XEP-0166

Draft Standards Track XMPP Extensions

Jingle RTP SessionsXEP-0167

Draft Standards Track XMPP Extensions

Jingle ICE-UDP Transport Method

XEP-0176

Draft Standards Track XMPP Extensions

Use of ZRTP in Jingle RTP Sessions

XEP-0262

Draft Standards Track XMPP Extensions

Case study

XMPP Extensions

Romeo calls Juliet

Jingle session flow

session-initiateRomeo Juliet

session inactive

STEP 1

Romeo Juliet

session-initiate

session-initiate

STEP 2

session-initiate

ACK

Romeo Juliet

session-initiate

STEP 3

Romeo Juliet

session-initiate

ACK

session-info

session-info

STEP 4

Romeo Juliet

session-initiate

ACK

session-info

session-info

ACK

Romeo Juliet

session-initiate

ACK

session-info

session-info

ACK

RINGING…

STEP 5

session-accept

Romeo Juliet

session-initiate

ACK

session-accept

session-info

ACK

STEP 6

session-accept

Romeo Juliet

session-initiate

ACK

session-accept

ACK

session-info

ACK

session-accept

Romeo Juliet

session-initiate

ACK

session-accept

ACK

session-info

ACK

session established

RTC stream now flowing… Audio/video session is established

Ending the call Juliet wants to stop the call (properly)

STEP 1

session-terminateRomeo Juliet

session-terminate

Previous flow

STEP 2

Romeo Juliet

Previous flow

ACK

session-terminate

session-terminate

Romeo Juliet

Previous flow

ACK

session ended

session-terminate

session-terminate

Stanzas exchanged

S

STANZA

R

STANZA

R

STANZA

S

STANZA

S

STANZA

R

STANZA

Testing with Chromium

Giggle.js

20K lines of JavaScript

TEST

WebRTC <> Jingle/XMPP

TEST

TEST

XMPP EcosystemServers, libs, clients, companies

XMPP Ecosystem

XMPP Ecosystem

XMPP Ecosystem

XMPP Ecosystem

Erlang

XMPP Ecosystem

Lua

Erlang

XMPP Ecosystem

Erlang

Lua

Java

XMPP Ecosystem

XMPP Ecosystem

XMPP Ecosystem

JavaScriptJSJaC Strophe.js

Pythonpyxmpp jabber.py

RubyBabylon Blather

C++dxmpp gloox

XMPP EcosystemXMPP JavaScript

<iq type='get' id=‘jsjac_23’>  <prefs xmlns='urn:xmpp:mam:0'/></iq>

JSJaC.js

Now mostly geeky Future can help unify communications, trash PSTN avoid communications to be PSTN-dependant

Questions?

Thanks!

Jappix - jappix.com

XMPP - xmpp.org

Giggle.js - github.com/valeriansaliou/giggle