• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Os Tucker
 

Os Tucker

on

  • 1,708 views

 

Statistics

Views

Total Views
1,708
Views on SlideShare
1,702
Embed Views
6

Actions

Likes
1
Downloads
0
Comments
0

1 Embed 6

http://www.techgig.com 6

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Os Tucker Os Tucker Presentation Transcript

    • Jingle: Cutting Edge Open Source VoIP
      • Matt Tucker
      • CTO, Jive Software
    • I like XMPP
    • The Vision:
      • People wouldn’t stop asking for voice chat to be added to XMPP.
      • or
      • Worldwide federated network that combines messaging, presence and voice. Ensure there are Open Source tools for all of it.
    • Current approaches don’t work
      • Skype
        • Closed network
        • Proprietary protocol
      • SIP
        • Poor protocol for IM and presence
        • Very little world-wide federation
        • Most implementations don’t do Skype-type p2p
    • In this talk
      • XMPP Overview
      • All about Jingle
        • Protocol flow
        • NAT traversal (ICE)
        • Open Source implementations
        • Others uses for Jingle
    • XMPP
      • eXtensible Messaging and Presence Protocol
      • Open standard approved by the IETF as RFC 3920 and 3921, maintained and extended by the XMPP Standards Foundation
      • Countless servers and clients deployed in an open federation.
      • XMPP already won as the open standard for IM
    • XMPP Protocol Basics
      • XML based, making it very easy to use and extend
      • Strong security (TLS) and identity protection built-in Secure Communications with Jabber Peter Saint-Andre Time: 11:35AM - 12:20PM Location:  D137-138
      • Major packet types: Message, Presence and IQ
    • Sample XMPP Message
      • <message to='matt@jivesoftware.com'
      • from='gato@igniterealtime.org' type='chat'>
      • <thread>thread1</thread>
      • <body>How's that presentation going?</body>
      • </message>
    • XEPs: XMPP Extension Protocols
      • Core RFC’s are extended through an open process by the XSF
      • Key extensions cover multi-user chat, file transfer, avatars, publish-subscribe
      • Jingle is a set of XEPs
    • Example packet extension
        • <message to='player@igniterealtime.org'
        • from='dealer@igniterealtime.org'>
        • <body>Blackjack!</body>
        • <gameData xmlns='casino:blackjack'>
        • <card1 rank='ace' suit='diamonds'/>
        • <card2 rank='jack' suit='spades'/>
        • </gameData>
        • </message>
    • Jingle
      • Many attempts at VoIP were tried – stream initiation, TINS, etc. None of them worked very well.
      • Google launched their XMPP network with voice support, then joined the standards effort to define Jingle.
      • Covered by several XMPP extensions: XEP-166: Jingle XEP-167: Jingle Audio via RTP XEP-176: Jingle ICE Transport XEP-177: Jingle Raw UDP Transport XEP-180: Jingle Video via RTP XEP-181: Jingle DTMF XEP-183: Jingle Telepathy Transport Method XEP-208: Bootstrapping Implementation of Jingle XEP-215: STUN Server Discovery for Jingle
      • Acronym soup: ICE, STUN, TURN
    • Jingle in three easy steps
      • Do you want a session? Session Negotiation
      • What kind of session do you want to negotiate? (voice, video, file transfer?) Content Negotiation
      • How are we going to make this session work? (direct connect, ICE, media proxy?) Transport Negotiation
      • <iq from='romeo@montague.net/orchard‘ to='juliet@capulet.com/balcony‘ id='jingle1‘ type='set'> <jingle xmlns='http://www.xmpp.org/extensions/xep-0166.html#ns‘ action='session-initiate‘ initiator='romeo@montague.net/orchard‘ sid='a73sjjvkla37jfea‘> <content creator='romeo@montague.net‘ name='this-is-the-audio-content'> <description xmlns='http://www.xmpp.org/extensions/xep-0167.html#ns'> <payload-type id='96' name='speex' clockrate='16000'/> <payload-type id='97' name='speex' clockrate='8000'/> </description> <transport xmlns='http://www.xmpp.org/extensions/xep-0177.html#ns'> <candidate .../> <candidate ip='10.1.1.104' port='13540' generation='0'/> </transport> </content> </jingle>
      • </iq>
      Jingle packet example
    • SIP packet example
      • INVITE sip:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TCP client.atlanta.example.com:5060;branch=z9hG4bK74bf9 Max-Forwards: 70 From: Alice <sip:alice@atlanta.example.com>;tag=9fxced76sl To: Bob <sip:bob@biloxi.example.com> Call-ID: 3848276298220188511@atlanta.example.com CSeq: 2 INVITE Proxy-Authorization: Digest username=&quot;alice&quot;, realm=&quot;atlanta.example.com&quot;, nonce=&quot;wf84f1ceczx41ae6cbe5aea9c8e88d359&quot;, opaque=&quot;&quot;, uri=&quot;sip:bob@biloxi.example.com&quot;, response=&quot;42ce3cef44b22f50c6a6071bc8“ Contact: <sip:alice@client.atlanta.example.com;transport=tcp> Content-Type: application/sdp Content-Length: 151 v=0 o=alice 2890844526 2890844526 IN IP4 client.atlanta.example.com s=- c=IN IP4 192.0.2.101 t=0 0 m=audio 49172 RTP/AVP 0 a=rtpmap:0 PCMU/8000
    • Transport approaches
      • Always use the server to transport media
        • Pro: always works (we’re using the server to send XMPP packets already)
        • Con: overloads the server, may be too slow for real-time protocols like voice/video. (~2000 concurrent users max)
      • Try to go peer to peer
        • Pro: scales forever. Best way to build a worldwide network.
        • Con: gets really complicated with firewalls and NATs.
    • Making peer to peer work
      • Step 1: try direct connect between IP addresses. (typically only works inside a local network)
      • Step 2: if #1 fails, the parties are probably behind a firewall or NAT. Do some “crazy stuff” to punch through. (can work up to 90% of the time)
      • Step 3: if #2 fails, there’s a pretty strict firewall in place so failover to using the server (media relay) (catch the other 10% or so)
      • The sum of these techniques is ICE, at the cutting edge of VoIP connectivity
    • Jingle connection architecture
    • What is NAT?
      • Problem: the internet was running out of IPv4 addresses Whoops. In the same category as the fake Bill Gates quote: ”640K ought to be enough for anybody”
      • Solution: group a bunch of computers behind a single IP address using Network Address Translation You don’t know your public IP when behind a NAT. The NAT device dynamically assigns ports to internal hosts to keep all the network traffic going to the right places
      • Better Solution: IPv6 – bigger addresses (not being adopted worldwide anytime soon) 340,282,366,920,938,463,463,374,607,431,768,211,456 addresses, or enough to give multiple IP addresses to every grain of sand on the planet. Could run into problems when humans conquer multiple galaxies?
    • “ Crazy stuff”: punching through NATs
      • Step 1: use a STUN server to find your public IP address
      • Me: Hey STUN server, I don’t know my IP Address. Can you help? NUTS (the STUN server): Looking at the packet you sent me, I see that the IP address of your NAT device is AAA.BBB.CCC.DDD Me: Sweet!
      • Step 2: figure out more stuff using the STUN server
      • Me: Ok, now I want to check to see what my NAT device does with ports. Does the public port change when I connect to different IP addresses? NUTS: Well, good question. I have another IP address you can connect to in order to try that. Me: Awesome, I tried that out and now I know more about my NAT device. Based on my local addresses, what you told me, plus what the other guy told me, I now have have a bunch of address/port options I can try with the other party. NUTS: No problem, glad to help! Buh-bye.
      • Step 3: connectivity checking to try to create a hole
      • Me: Can you hear me on this IP/port? You: … [Silence] Me: Hmm, the last one didn’t work. How about this one? You: … [Silence] Me: This is taking awhile… arg! How about this one? You: I hear you, I hear you! Yay, we found a hole.
      • (Punching holes works better with UDP vs. TCP)
    • Jingle Client Libraries
      • libjingle from Google -- http://code.google.com/apis/talk/libjingle/index.html
      • Telepathy -- http://telepathy.freedesktop.org
      • Smack – http://www.igniterealtime.org
    • Jingle server support
      • Openfire: an Open Source XMPP server with enhancements for Jingle.
      • Built-in media relay
        • Without it, P2P calls won’t always complete
      • Built-in STUN server
        • Without it, you’ll have to use public STUN servers
    • Jingle: not just for voice
      • File transfer
      • Screen sharing
      • Video
      • Whiteboard
      • Anything else that uses a lot of bandwidth or that does streaming
    • Jingle: what’s missing
      • Haven’t defined a way to do VoIP conferencing
      • Advanced call controls are missing (hold, transfer, etc). There’s a general consensus that this stuff shouldn’t be added to Jingle. Leave it to SIP.
      • Other Jingle content types (besides audio) are either not defined or immature
    • Current Jingle status
      • Standards work on the fundamentals and audio content profile is wrapping up.
      • Waiting for Google to switch to official Jingle protocol.
      • Need interop work between different implementations.
      • Jingle is poised to fulfill its promise as an open standard for a federated, world-wide VoIP network.
    • Questions?
      • Contact me via IM or email:
      • [email_address]
      • Resources
      • http://www.xmpp.org
      • http://www.igniterealtime.org
      • Secure Communications with Jabber Peter Saint-Andre Time: 11:35AM - 12:20PM Location:  D137-138