sipping from the open source well

56
SIPping from the Open Source Well Matthew Bynum UC Architect

Upload: nguyenque

Post on 11-Feb-2017

223 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: SIPping from the Open Source Well

SIPping from the Open Source Well

Matthew BynumUC Architect

Page 2: SIPping from the Open Source Well

A little about me

• Dabbler in Unified Communications for 12 years

• CCIE Voice #21753

• Installed my first Linux distro at age 17 (RedHat 5.0)

• Open Source lover, amateur maker, forestry nerd

Matthew Bynum

http://gplus.to/mbynum

http://www.linkedin.com/in/mattbynum/

Page 3: SIPping from the Open Source Well

Agenda

• SIP History

• Why SIP matters (SIP and DNS)

• Inside the SIP spec

• Open Source (and one proprietary) SIP options

• What the future entails

Page 4: SIPping from the Open Source Well

SIP is a protocol for establishing sessions in an IP network.

Page 5: SIPping from the Open Source Well

SIP History

Glory is fleeting, but obscurity is forever.- Napoleon Bonaparte

Page 6: SIPping from the Open Source Well

Setting the Stage

The Internet Engineering Task Force first met in 1986.

“The mission of the IETF is to make the Internet work better by producing high quality, relevant technical documents that influence the way people design, use, and manage the Internet. “

- http://www.ietf.org/about/mission.html

http://tools.ietf.org/html/rfc5000

dhcp TCP UDP

TELNET IGMP ICMP FTP ECHO

POP3 OSPF RIP

Page 7: SIPping from the Open Source Well

IETF Meetings

The First IETF Audiocastoccurred in 1992. A method was needed to disseminate the meeting invites.

Create 1Descr.: DNS Discussion San FranOrig.: John Doe [email protected]: http://www.com.comStart: 04.04.2001 / 09.30End: 04.20.2001 / 16:30Media: Audio GSM 224.1.6.7/49000Media: Video H.263 224.1.6.8/49100

Disseminate 2SAP/NNTP/HTTP

InviteSMTP/SIP

Join 3PC/Telephone

Media 4PC/Telephone

Page 8: SIPping from the Open Source Well

Simple Conference

Invitation Protocol

Session Invitation

Protocol

CALL

CHANGE

CLOSE

by Henning Schulzrinneby Mark Handley and Eve Schooler

1xx

2xx

3xx

4xx

5xx

UDP/SDP TCP/SCIP

SUCCESS

UNSUCCESSFUL

BUSY

DECLINE

UNKNOWN

FAILED

FORBIDDEN

RINGINGRINGING

TRYING

REDIRECT

ALTERNATIVE

NEGOTIATE

Page 9: SIPping from the Open Source Well

Simple Conference

Invitation Protocol

Session Invitation

Protocol

SCIP/1.0 302 Callee has moved temporarily

Location: [email protected]

Location: [email protected]

CALL [email protected] 1.0

User-Agent: coco/1.3

From: Christian Zahl <[email protected]>

To: Henning Schulzrinne

<[email protected]>

Call-Id: [email protected]

berlin.de

Referer: ceres.fokus.gmd.de

Expires: Mon, 02 Oct 1995 18:44:11 GMT

Required: fc99cb08 audio/pcmu; port=3456;

transport=RTP;

rate=16000; channels=1; pt=97; net=224.2.0.1;

ttl=128,

audio/gsm; port=3456; transport=RTP;

rate=8000; channels=1,

audio/lpc; port=3456; transport=RTP;

rate=8000; channels=1

SIP/1.0 REQ

PA=128.16.65.19 16

AU=none

ID=128.16.65.19/32492374

[email protected]

[email protected]

v=0

o=van 2353644765 2353687637 IN IP4

128.3.4.5

s=Mbone Audio

i=Discussion of Mbone Engineering Issues

[email protected] (Van Jacobsen

c=IN IP4 224.2.0.1/127

t=0 0

m=audio 3456 RTP PCMU

Page 10: SIPping from the Open Source Well

Papa SIP

“Personal Mobility for Multimedia Services in the Internet”

by Henning Schulzrinne, March 1996http://www.cs.columbia.edu/~hgs/papers/Schu9603_Personal.pdf

http://www.cs.columbia.edu/~hgs/

Creator of RTP

Page 11: SIPping from the Open Source Well

The Internet Architect

http://www.cs.ucl.ac.uk/staff/M.Handley/

SIP (RFC 2543, RFC 3261); SDP (RFC 2327; SAP, RFC 2974); Protocol

Independent Multicast-Sparse Mode (PIM-SM, RFC 2362), TCP-Friendly Rate

Control (TFRC, RFC 3448), Multicast-Scope Zone Announcement Protocol

(MZAP, RFC 2776), Multicast Address Allocation (RFC 2908, RFC 2909), TCP

Congestion Window Validation ( RFC 2861), Reliable Multicast ( RFC 3451, RFC

3452, RFC 3453, RFC 3048), Datagram Congestion Control Protocol ( RFC 4340,

RFC 4336).

Mark HandleyFounder of XORP (www.xorp.org)

Creator of SDP

Page 12: SIPping from the Open Source Well

SIP Drafts http://www.cs.columbia.edu/sip/history.html

Date Draft Name

December 2, 1996 draft-ietf-mmusic-sip-01

March 27, 1997 draft-ietf-mmusic-sip-02

July 31, 1997 draft-ietf-mmusic-sip-03

November 11, 1997 draft-ietf-mmusic-sip-04

May 14, 1998 draft-ietf-mmusic-sip-05

June 17, 1998 draft-ietf-mmusic-sip-06

July 16, 1998 draft-ietf-mmusic-sip-07

August 7, 1998 draft-ietf-mmusic-sip-08

September 18, 1998 draft-ietf-mmusic-sip-09

September 28, 1998 Last call

November 12, 1998 draft-ietf-mmusic-sip-10

December 15, 1998 draft-ietf-mmusic-sip-11

January 16, 1999 draft-ietf-mmusic-sip-12

February 2, 1999 Approved

March 17, 1999 RFC 2543

Page 13: SIPping from the Open Source Well

SIP Today

RFC 3261 (SIP: Session Initiation Protocol)

RFC 3263 (Session Initiation Protocol (SIP): Locating SIP Servers)

RFC 3264 (An Offer/Answer Model with Session Description Protocol (SDP))

RFC 3265 (Session Initiation Protocol (SIP)-Specific Event Notification)

RFC 3325 (Private Extensions to SIP for Asserted Identity within Trusted Networks)

RFC 3327 (SIP Extension Header Field for Registering Non-Adjacent Contacts)

RFC 3581 (An Extension to SIP for Symmetric Response Routing)

RFC 3840 (Indicating User Agent Capabilities in SIP)

RFC 4320 (Actions Addressing Issues Identified with the Non-INVITE Transaction in SIP)

RFC 4474 (Enhancements for Authenticated Identity Management in SIP)

GRUU (Obtaining and Using Globally Routable User Agent Identifiers (GRUU) in SIP)

OUTBOUND (Managing Client Initiated Connections through SIP)

RFC 4566 (Session Description Protocol)

SDP-CAP (SDP Capability Negotiation)

ICE (Interactive Connectivity Establishment)

RFC 3605 (Real Time Control Protocol (RTCP) Attribute in the Session Description Protocol)

RFC 4916 (Connected Identity in the Session Initiation Protocol (SIP))

RFC 3311 (The SIP UPDATE Method)

SIPS-URI (The Use of the SIPS URI Scheme in the Session Initiation Protocol (SIP))

RFC 3665 (Session Initiation Protocol (SIP) Basic Call Flow Examples)

http://tools.ietf.org/html/rfc5411

Don’t

Panic!A Hitchhiker's Guide to the Session Initiation Protocol (SIP)

Page 14: SIPping from the Open Source Well

• Q.931 (TDM)

• H.323 (IP)

Alternative protocols…

Page 15: SIPping from the Open Source Well

Why SIP is kind of a big deal

Page 16: SIPping from the Open Source Well

It’s all about the decentralization

Internet

linuxcon.com

20.20.20.20

SIP Proxy

DNS

SIP

DNS

atlanta.com

SIP Proxy

Media

[email protected]@atlanta.com

2.

Where is the SIP server

for linuxcon.com?

20.20.20.20 and port

5061

1.

Alice places call to

[email protected].

INVITE is sent to

20.20.20.20 addressed

to [email protected]

4.

INVITE is forwarded to

the user bob, who

answers, and the media

is established between

Alice and Bob.

Page 17: SIPping from the Open Source Well

SIP and DNS (RFC 3263)

• Use DNS SRV records for determining what servers provide SIP services for a domain (internal and external)

sipserver A 10.0.0.1

; SRV’s

_sips._tcp IN SRV 50 1 5061 sipserver.yourdomain.com.

_sip._tcp IN SRV 90 1 5060 sipserver.yourdomain.com.

_sip._udp IN SRV 100 1 5060 sipserver.yourdomain.com.

; NAPTR

IN NAPTR 50 50 "s" "SIPS+D2T" "" _sips._tcp.yourdomain.com.

IN NAPTR 90 50 "s" "SIP+D2T" "" _sip._tcp.yourdomain.com.

IN NAPTR 100 50 "s" "SIP+D2U" "" _sip._udp.yourdomain.com.

Page 18: SIPping from the Open Source Well

SIP and DNS (cont.)

• Use ENUM records for determining what URI a full E.164 number should map to

• Politics restrict this from being a viable option. Screenshot from the ITU website:

; NAPTR for calling +12561234567

$ORIGIN 7.6.5.4.3.2.1.6.5.2.1.e164.arpa.

IN NAPTR 100 10 “u" "E2U+sip" “!^.*$!sip:[email protected]!” .

Page 19: SIPping from the Open Source Well

Inside SIP

Page 20: SIPping from the Open Source Well

User Agents

Client Server

TCP or UDP port 5060

TLS on port 5061

Page 21: SIPping from the Open Source Well

SIP Methods

METHOD DESCRIPTION

INVITE Session setup

ACK Acknowledgement of final response to INVITE

BYE Session termination

CANCEL Pending session cancellation

REGISTER Registration of a user’s URI

OPTIONS Query of options and capabilities

INFO Mid-call signaling transport

PRACK Provisional response acknowledgement

UPDATE Update session information

REFER Transfer user to a URI

SUBSCRIBE Request notification of an event

NOTIFY Transport of subscribed event notification

MESSAGE Transport of an instant message body

PUBLISH Upload presence state to a server

Page 22: SIPping from the Open Source Well

SIP Responses

Status Message

100 Trying

180 Ringing

183 Session Progress

200 OK

300 Multiple Choices

302 Moved Temporarily

305 Use Proxy

400 Bad Request

401 Unauthorized

402 Payment Required

403 Forbidden

404 Not Found

500 Internal Server Error

501 Not Implemented

502 Bad Gateway

CLASS DESCRIPTION

1xx Provisional or Informational

2xx Success

3xx Redirection

4xx Client Error

5xx Server Error

6xx Global Failure

Page 23: SIPping from the Open Source Well

SIP Roles

Element Function

Proxy Responsible for routing

Registrar Accepts REGISTER request from endpoints

Redirect Generates 3xx responses

Back to Back User Agent (B2BUA)

Terminates SIP dialogs from UAC and creates new dialog to end destination

Session BorderController (SBC)

Demarcation between disparate networks

Media Gateway Media translation

Page 24: SIPping from the Open Source Well

SIP Element Examples

Service Provider

SBCProxy

Registrar/B2BUA

Media GatewaySIP

TDM

Redirect

Page 25: SIPping from the Open Source Well

Basic Call Flow

INVITE

Phone BPhone A

180 Ringing

200 OK

ACK

Media

BYE

200 OK

Page 26: SIPping from the Open Source Well

Call Flow with Proxy

INVITE

Proxy (Server/Client)Phone (Client) Phone (Server)

INVITE

100 Trying

180 Ringing

180 Ringing

200 OK

200 OK

ACK

Media

BYE

200 OK

Page 27: SIPping from the Open Source Well

Example SIP INVITE

INVITE <sip:[email protected]> SIP/2.0

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds

Max-Forwards: 70

To: Bob <sip:[email protected]>

From: Alice <sip:[email protected]>;tag=1928301774

Call-ID: [email protected]

CSeq: 314159 INVITE

Contact: <sip:[email protected]>

Content-Type: application/sdp

Content-Length: 142

v=0

o=alice 2890844526 2890844526 IN IP4 linuxcon.com

s=SIP Call

c=IN IP4 216.81.194.139

t=0 0

m=audio 32894 RTP/AVP 0 101

a=rtpmap: 0 PCMU/8000

a=rtpmap: 101 iLBC/8000

Page 28: SIPping from the Open Source Well

Example SIP OK

SIP/2.0 200 OK

Via: SIP/2.0/UDP server10.linuxcon.com

;branch=z9hG4bKnashds8;received= 216.81.194.139

To: Bob <sip:[email protected]>;tag=a6c85cf

From: Alice <sip:[email protected]>;tag=1928301774

Call-ID: [email protected]

CSeq: 314159 INVITE

Contact: <sip:[email protected]>

Content-Type: application/sdp Content-Length: 131 v=0

o=alice 7844 125 IN IP4 10.0.0.1

s=SIP Call

c=IN IP4 10.0.0.1

t=0 0

m=audio 43588 RTP/AVP 0

a=sendrecv

a=rtpmap: 0 PCMU/8000

Page 29: SIPping from the Open Source Well

Presence

• Real-time indicator of a person’s willingness and availability to communicate

• Blends communication methods together, allows for designating preferred contact method

Page 30: SIPping from the Open Source Well

SIMPLE – Powering Presence in SIP

• Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions

• Uses the SIP methods of PUBLISH, SUBSCRIBE, and NOTIFY, defined in RFC’s 3903, 3265, and 3856

• http://datatracker.ietf.org/wg/simple/

Page 31: SIPping from the Open Source Well

XMPP– Powering Presence in SIP

• EXtensible Messaging and Presence Protocol

• Uses XML messages and a Publisher/Subscriber model for messages, defined in RFC’s 6120, 6121, and 6122

• http://datatracker.ietf.org/wg/XMPP/

Page 32: SIPping from the Open Source Well

Open Source (and one proprietary) SIP Server Options

Knowledge without practice is useless. Practice without knowledge is dangerous.

- Confucius

Page 33: SIPping from the Open Source Well

Two main types of SIP servers

• Back-to-Back User Agent (B2BUA)– owns each leg of call as a separate dialog– Stateful– inter-work SIP with other protocols, including TDM and

analog interfaces– More like traditional telephony– Doesn’t scale as well as a Proxy

• Proxy– Relays messages between UACs and other SIP entities– Stateless option– SIP-only (with some exceptions)– some trouble exists with the way endpoints implement

some features (like transfers)– Future proof

Page 34: SIPping from the Open Source Well

Asterisk – B2BUA/Media Server

• B2BUA…so it stays in the signaling (and media) path

• Provides ACD, Voicemail, and IVR functionality

• Most popular VoIP project in the world

• Backed by Digium in Huntsville, AL

• Rooted in traditional telephony

• Struggles with NAT traversal

Page 35: SIPping from the Open Source Well

FreeSWITCH

• B2BUA, stays in the signaling (and media) path

• Provides ACD, Voicemail, and IVR functionality

• Used by other projects for its media processing capabilities

• Geared for replacing a PBX

Page 36: SIPping from the Open Source Well

sipXecs

• Composed of sipX (Proxy), FreeSWITCH(media), OpenFire (IM & Presence)

• Backed by eZuce in Andover, MA; but run by SIPfoundry

• Biggest user is Amazon with 5,000 users

• Marketed as an open source Unified Communications solution

Page 37: SIPping from the Open Source Well

Kamailio

• Registrar, Redirect, Proxy

• 1&1 uses Kamailio and has 1 billion minutes per month of usage through the platform

• Frequently used to “front-end” other SIP servers such as Asterisk or FreeSWITCH

• Kamailio does NOT handle media (relies on Asterisk or FreeSWITCH for that)

Page 38: SIPping from the Open Source Well

OpenSIPS

• Registrar, Redirect, Proxy

• Fork of what Kamailio came from (SIP Express Router or SER)

• Frequently used to “front-end” other SIP servers such as Asterisk or FreeSWITCH

• OpenSIPS does NOT handle media (relies on Asterisk or FreeSWITCH for that)

Page 39: SIPping from the Open Source Well

reSIProcate

• Proxy, Location, STUN/TURN

• Initial VOCAL stack started by Vovida Networks “back in the day”, then was acquired by Cisco

• reSIProcate founded in 2002, moved to SIPfoundry, then went independent in 2006

• reSIProcate stacks used by commercial products(through a “BSD-like” license) from Cisco, Avaya, LifeSize, Plantronics, Motorola, Ericsson, and more

Page 40: SIPping from the Open Source Well

STUN and TURN and ICE, oh my!

• NAT traversal for endpoints is…troublesome

• Kamailio or OpenSIPS with RTPproxy or MediaProxy

• reSIProcate (repro + reTurn) (STUN and TURN but no RFC ICE support)

Page 41: SIPping from the Open Source Well

Proprietary: Cisco CallManager (CUCM)

• B2BUA for all types of SIP calls (trunk and line)

• Cisco’s implementation is 100% standards compatible SIP…except when it’s not.

• There are “extensions” to SIP implemented in CUCM for Cisco’s SCCP protocol feature parity to handsets

• Leads to two modes of SIP support for phones, basic and advanced. Basic is no bueno.

Page 42: SIPping from the Open Source Well

Open Source SIP Client Options

Product Version Linux Win Mac Android iOS SIP XMPP NAT Traversal

Jitsi 2.2 X X X X X TURN

Blink 0.5.0 X X Pro X ICE

Empathy 3.8.4 X X X ICE

Linphone 3.6.0 X X X X (2.0) X (2.0) X ICE

cSipSimple 1.01 X X ICE

Page 43: SIPping from the Open Source Well

Future of SIP

How does this get me my flying car?

- Me, a child of the 80’s

Page 44: SIPping from the Open Source Well

SIP-based UC is spreading

Page 45: SIPping from the Open Source Well

P2P SIP

• Decentralized SIP Services

• Uses overlay networks and Distributed Hash Tables

• REsource LOcation And Discovery (RELOAD)

• No RFCs, only drafts

C

AB

http://datatracker.ietf.org/wg/p2psip/

Page 46: SIPping from the Open Source Well

WebRTC

• sipml5.org

• HTML5 Web-based SIP clients

• Enables future B2C, B2B, P2P, and any other acronym you can think of

Page 47: SIPping from the Open Source Well

Where do we go now?

Page 48: SIPping from the Open Source Well

Q&A

Questions?

Page 49: SIPping from the Open Source Well

The End

“Due to technological advances, changes in consumer preference, and market forces, the question is when, not if, POTS service and the PSTN over which it is provided will become obsolete.”

- AT&T Response to FCC on PSTN Evolution, Dec 2009

Page 50: SIPping from the Open Source Well

Appendix

Additional Reference Slides

Page 51: SIPping from the Open Source Well

Offer/Answer Model

INVITE w/SDP (offer)

200 OK w/SDP (answer)

INVITE w/o SDP

200 OK w/SDP (offer)

ACK w/SDP (answer)ACK

Early Offer Delayed Offer

Page 52: SIPping from the Open Source Well

REFER (Transfer)

INVITE

Phone BPhone A Phone C

INVITE

200 OK

200 OK

ACK

ACK

Media Session

REFER (Refer-To: C)

202 Accepted

200 OK

Media Session

NOTIFY

200 OK

BYE

Page 53: SIPping from the Open Source Well

PRACK (Provisional Acknowledgement)

INVITE

100 Trying

183 Session Progress

200 OK

ACK

PRACK

200 OK (PRACK)

PRACK sip:[email protected]:5060 SIP/2.0

Via: SIP/2.0/UDP 172.16.13.87:5060

;branch=z9hG4bKC384

From: <sip:[email protected]>;tag=1EDC10-2436

To: <sip:[email protected]>;tag=85E9C7C8-A4C

Date: Fri, 01 Mar 2002 00:33:42 GMT

Call-ID: D110EA36-2BE211D6-801CEF21-

[email protected]

CSeq: 102 PRACK

RAck: 3696 101 INVITE

Max-Forwards: 70

Content-Length: 0

Page 54: SIPping from the Open Source Well

OPTIONS Ping

OPTIONS sip:[email protected]:5060 SIP/2.0

Via: SIP/2.0/UDP 172.16.13.87:5060;branch=z9hG4bKC384

From: <sip:[email protected]>;tag=1EDC10-2436

To: <sip:[email protected]>;tag=85E9C7C8-A4C

Call-ID: D110EA36-2BE211D6-801CEF21-

[email protected]

CSeq: 100 OPTIONS

Contact: <sip:[email protected]>

Accept: application/sdp

Max-Forwards: 70

Content-Length: 0

OPTIONS

200 OK

Page 55: SIPping from the Open Source Well

SIMPLE Presence Example

IP PBX

PUBLISHNOTIFY

SUBSCRIBE

SIMPLE Server

On Hook / Off Hook

Page 56: SIPping from the Open Source Well

XMPP Presence Example

IP PBX

Presence StanzaPresence Stanza

XMPP Server

On Hook / Off Hook

<presence xml:lang="en"> <show>on

hook</show>

</presence>