- •Contents
- •Foreword to the First Edition
- •Preface to the Third Edition
- •Preface to the Second Edition
- •Preface to the First Edition
- •1 SIP and the Internet
- •1.1 Signaling Protocols
- •1.2.2 Data/Link Layer
- •1.2.3 Network Layer
- •1.2.4 Transport Layer
- •1.2 Internet Multimedia Protocol Stack
- •1.2.1 Physical Layer
- •1.2.5 Application Layer
- •1.2.6 Utility Applications
- •1.2.7 Multicast
- •1.3 Internet Names
- •1.4 URLs, URIs, and URNs
- •1.5 Domain Name Service
- •1.5.1 DNS Resource Records
- •1.5.2 Address Resource Records (A or AAAA)
- •1.5.3 Service Resource Records (SRV)
- •1.5.4 Naming Authority Pointer Resource Records (NAPTR)
- •1.5.5 DNS Resolvers
- •1.6 Global Open Standards
- •1.7 Internet Standards Process
- •1.8 A Brief History of SIP
- •1.9 Conclusion
- •References
- •2 Introduction to SIP
- •2.1 A Simple Session Establishment Example
- •2.2 SIP Call with a Proxy Server
- •2.3 SIP Registration Example
- •2.4 SIP Presence and Instant Message Example
- •2.5 Message Transport
- •2.5.1 UDP Transport
- •2.5.2 TCP Transport
- •2.5.3 TLS Transport
- •2.5.4 SCTP Transport
- •2.6 Transport Protocol Selection
- •2.7 Conclusion
- •2.8 Questions
- •References
- •3 SIP Clients and Servers
- •3.1 SIP User Agents
- •3.2 Presence Agents
- •3.3 Back-to-Back User Agents
- •3.4 SIP Gateways
- •3.5 SIP Servers
- •3.5.1 Proxy Servers
- •3.5.2 Redirect Servers
- •3.5.3 Registrar Servers
- •3.6 Uniform Resource Indicators
- •3.7 Acknowledgment of Messages
- •3.8 Reliability
- •3.9 Multicast Support
- •3.10 Conclusion
- •3.11 Questions
- •References
- •4 SIP Request Messages
- •4.1 Methods
- •4.1.1 INVITE
- •4.1.2 REGISTER
- •4.1.5 CANCEL
- •4.1.6 OPTIONS
- •4.1.7 SUBSCRIBE
- •4.1.8 NOTIFY
- •4.1.9 PUBLISH
- •4.1.10 REFER
- •4.1.11 MESSAGE
- •4.1.12 INFO
- •4.1.13 PRACK
- •4.1.14 UPDATE
- •4.2 URI and URL Schemes Used by SIP
- •4.2.1 SIP and SIPS URIs
- •4.2.2 Telephone URLs
- •4.2.3 Presence and Instant Messaging URLs
- •4.3 Tags
- •4.4 Message Bodies
- •4.5 Conclusion
- •4.6 Questions
- •References
- •5 SIP Response Messages
- •5.1 Informational
- •5.1.1 100 Trying
- •5.1.2 180 Ringing
- •5.1.3 181 Call is Being Forwarded
- •5.1.4 182 Call Queued
- •5.1.5 183 Session Progress
- •5.2 Success
- •5.2.2 202 Accepted
- •5.3 Redirection
- •5.3.1 300 Multiple Choices
- •5.3.2 301 Moved Permanently
- •5.3.3 302 Moved Temporarily
- •5.3.4 305 Use Proxy
- •5.3.5 380 Alternative Service
- •5.4.3 402 Payment Required
- •5.4.4 403 Forbidden
- •5.4.5 404 Not Found
- •5.4.6 405 Method Not Allowed
- •5.4.7 406 Not Acceptable
- •5.4.8 407 Proxy Authentication Required
- •5.4.9 408 Request Timeout
- •5.4.11 410 Gone
- •5.4.12 411 Length Required
- •5.4.13 412 Conditional Request Failed
- •5.4 Client Error
- •5.4.1 400 Bad Request
- •5.4.2 401 Unauthorized
- •5.4.14 413 Request Entity Too Large
- •5.4.15 414 Request-URI Too Long
- •5.4.16 415 Unsupported Media Type
- •5.4.17 416 Unsupported URI Scheme
- •5.4.18 417 Unknown Resource Priority
- •5.4.19 420 Bad Extension
- •5.4.20 421 Extension Required
- •5.4.21 422 Session Timer Interval Too Small
- •5.4.22 423 Interval Too Brief
- •5.4.23 428 Use Identity Header
- •5.4.24 429 Provide Referror Identity
- •5.4.25 430 Flow Failed
- •5.4.26 433 Anonymity Disallowed
- •5.4.27 436 Bad Identity-Info Header
- •5.4.29 438 Invalid Identity Header
- •5.4.30 439 First Hop Lacks Outbound Support
- •5.4.31 440 Max-Breadth Exceeded
- •5.4.32 470 Consent Needed
- •5.4.33 480 Temporarily Unavailable
- •5.4.34 481 Dialog/Transaction Does Not Exist
- •5.4.35 482 Loop Detected
- •5.4.36 483 Too Many Hops
- •5.4.37 484 Address Incomplete
- •5.4.38 485 Ambiguous
- •5.4.39 486 Busy Here
- •5.4.40 487 Request Terminated
- •5.4.41 488 Not Acceptable Here
- •5.4.42 489 Bad Event
- •5.4.43 491 Request Pending
- •5.4.44 493 Request Undecipherable
- •5.4.45 494 Security Agreement Required
- •5.5 Server Error
- •5.5.1 500 Server Internal Error
- •5.5.2 501 Not Implemented
- •5.5.3 502 Bad Gateway
- •5.5.4 503 Service Unavailable
- •5.5.5 504 Gateway Timeout
- •5.5.6 505 Version Not Supported
- •5.5.7 513 Message Too Large
- •5.5.8 580 Preconditions Failure
- •5.6 Global Error
- •5.6.1 600 Busy Everywhere
- •5.6.2 603 Decline
- •5.6.3 604 Does Not Exist Anywhere
- •5.6.4 606 Not Acceptable
- •5.7 Questions
- •References
- •6 SIP Header Fields
- •6.1 Request and Response Header Fields
- •6.1.1 Accept
- •6.1.2 Accept-Encoding
- •6.1.3 Accept-Language
- •6.1.4 Alert-Info
- •6.1.5 Allow
- •6.1.6 Allow-Events
- •6.1.7 Answer-Mode
- •6.1.8 Call-ID
- •6.1.9 Contact
- •6.1.10 CSeq
- •6.1.11 Date
- •6.1.12 Encryption
- •6.1.13 Expires
- •6.1.14 From
- •6.1.15 History Info
- •6.1.16 Organization
- •6.1.17 Path
- •6.1.19 Record-Route
- •6.1.20 Recv-Info
- •6.1.21 Refer-Sub
- •6.1.22 Retry-After
- •6.1.23 Subject
- •6.1.24 Supported
- •6.1.25 Timestamp
- •6.1.27 User-Agent
- •6.2 Request Header Fields
- •6.2.1 Accept-Contact
- •6.2.2 Authorization
- •6.2.3 Call-Info
- •6.2.4 Event
- •6.2.5 Hide
- •6.2.6 Identity
- •6.2.7 Identity-Info
- •6.2.8 In-Reply-To
- •6.2.9 Info-Package
- •6.2.10 Join
- •6.2.11 Priority
- •6.2.12 Privacy
- •6.2.13 Proxy-Authorization
- •6.2.14 Proxy-Require
- •6.2.15 P-OSP-Auth-Token
- •6.2.16 P-Asserted-Identity
- •6.2.17 P-Preferred-Identity
- •6.2.18 Max-Breadth
- •6.2.19 Max-Forwards
- •6.2.20 Reason
- •6.2.21 Refer-To
- •6.2.22 Referred-By
- •6.2.23 Reply-To
- •6.2.24 Replaces
- •6.2.25 Reject-Contact
- •6.2.26 Request-Disposition
- •6.2.27 Require
- •6.2.28 Resource-Priority
- •6.2.29 Response-Key
- •6.2.30 Route
- •6.2.31 RAck
- •6.2.32 Security-Client
- •6.2.33 Security-Verify
- •6.2.34 Session-Expires
- •6.2.35 SIP-If-Match
- •6.2.36 Subscription-State
- •6.2.37 Suppress-If-Match
- •6.2.38 Target-Dialog
- •6.2.39 Trigger-Consent
- •6.3 Response Header Fields
- •6.3.1 Accept-Resource-Priority
- •6.3.2 Authentication-Info
- •6.3.3 Error-Info
- •6.3.4 Flow-Timer
- •6.3.5 Min-Expires
- •6.3.7 Permission-Missing
- •6.3.8 Proxy-Authenticate
- •6.3.9 Security-Server
- •6.3.10 Server
- •6.3.11 Service-Route
- •6.3.12 SIP-ETag
- •6.3.13 Unsupported
- •6.3.14 Warning
- •6.3.15 WWW-Authenticate
- •6.3.16 RSeq
- •6.4 Message Body Header Fields
- •6.4.1 Content-Encoding
- •6.4.2 Content-Disposition
- •6.4.3 Content-Language
- •6.4.4 Content-Length
- •6.4.5 Content-Type
- •6.4.6 MIME-Version
- •6.5 Questions
- •References
- •7 Wireless, Mobility, and IMS
- •7.1 IP Mobility
- •7.2 SIP Mobility
- •7.4 IMS Header Fields
- •7.5 Conclusion
- •7.6 Questions
- •References
- •8 Presence and Instant Messaging
- •8.1 Introduction
- •8.2 History of IM and Presence
- •8.3 SIMPLE
- •8.4 Presence with SIMPLE
- •8.4.1 SIP Events Framework
- •8.4.2 Presence Bodies
- •8.4.3 Resource Lists
- •8.4.4 Filtering
- •8.4.6 Partial Publication
- •8.4.7 Presence Documents Summary
- •8.5 Instant Messaging with SIMPLE
- •8.5.1 Page Mode Instant Messaging
- •8.5.4 Message Composition Indication
- •8.5.5 Multiple Recipient Messages
- •8.5.6 Session Mode Instant Messaging
- •8.6 Jabber
- •8.6.1 Standardization as Extensible Messaging and Presence Protocol
- •8.6.2 Interworking with SIMPLE
- •8.6.3 Jingle
- •8.6.4 Future Standardization of XMPP
- •8.7 Conclusion
- •8.8 Questions
- •References
- •9 Services in SIP
- •9.1 Gateway Services
- •9.2 SIP Trunking
- •9.3 SIP Service Examples
- •9.4 Voicemail
- •9.5 SIP Video
- •9.6 Facsimile
- •9.7 Conferencing
- •9.7.1 Focus
- •9.7.2 Mixer
- •9.8 Application Sequencing
- •9.9 Other SIP Service Architectures
- •9.9.1 Service Oriented Architecture
- •9.9.2 Servlets
- •9.9.3 Service Delivery Platform
- •9.10 Conclusion
- •9.11 Questions
- •References
- •10 Network Address Translation
- •10.1 Introduction to NAT
- •10.2 Advantages of NAT
- •10.3 Disadvantages of NAT
- •10.4 How NAT Works
- •10.5 Types of NAT
- •10.5.1 Endpoint Independent Mapping NAT
- •10.5.2 Address Dependent Mapping NAT
- •10.5.3 Address and Port Dependent Mapping NAT
- •10.5.4 Hairpinning Support
- •10.5.5 IP Address Pooling Options
- •10.5.6 Port Assignment Options
- •10.5.7 Mapping Refresh
- •10.5.8 Filtering Modes
- •10.6 NAT Mapping Examples
- •10.7 NATs and SIP
- •10.8 Properties of a Friendly NAT or How a NAT Should BEHAVE
- •10.9 STUN Protocol
- •10.10 UNSAF Requirements
- •10.11 SIP Problems with NAT
- •10.11.1 Symmetric SIP
- •10.11.2 Connection Reuse
- •10.11.3 SIP Outbound
- •10.12 Media NAT Traversal Solutions
- •10.12.1 Symmetric RTP
- •10.12.2 RTCP Attribute
- •10.12.3 Self-Fixing Approach
- •10.13 Hole Punching
- •10.14 TURN: Traversal Using Relays Around NAT
- •10.15 ICE: Interactive Connectivity Establishment
- •10.16 Conclusion
- •10.17 Questions
- •References
- •11 Related Protocols
- •11.1 PSTN Protocols
- •11.1.1 Circuit Associated Signaling
- •11.1.2 ISDN Signaling
- •11.1.3 ISUP Signaling
- •11.2 SIP for Telephones
- •11.3 Media Gateway Control Protocols
- •11.4.1 Introduction to H.323
- •11.4.2 Example of H.323
- •11.4.3 Versions
- •References
- •12 Media Transport
- •12.1 Real-Time Transport Protocol (RTP)
- •12.2 RTP Control Protocol (RTCP)
- •12.2.1 RTCP Reports
- •12.2.2 RTCP Extended Reports
- •12.3 Compression
- •12.4.1 Audio Codecs
- •12.4.2 Video Codecs
- •12.5 Conferencing
- •12.6 ToIP—Conversational Text
- •12.7 DTMF Transport
- •12.8 Questions
- •References
- •13 Negotiating Media Sessions
- •13.1 Session Description Protocol (SDP)
- •13.1.1 Protocol Version
- •13.1.2 Origin
- •13.1.3 Session Name and Information
- •13.1.5 E-Mail Address and Phone Number
- •13.1.6 Connection Data
- •13.1.7 Bandwidth
- •13.1.8 Time, Repeat Times, and Time Zones
- •13.1.9 Encryption Keys
- •13.1.10 Media Announcements
- •13.1.11 Attributes
- •13.2 SDP Extensions
- •13.3 The Offer Answer Model
- •13.3.1 Rules for Generating an Offer
- •13.3.2 Rules for Generating an Answer
- •13.3.3 Rules for Modifying a Session
- •13.3.4 Special Case—Call Hold
- •13.4 Static and Dynamic Payloads
- •13.5 SIP Offer Answer Exchanges
- •13.6 Conclusion
- •13.7 Questions
- •References
- •14 SIP Security
- •14.1 Basic Security Concepts
- •14.1.1 Encryption
- •14.1.2 Public Key Cryptography
- •14.1.4 Message Authentication
- •14.2 Threats
- •14.3 Security Protocols
- •14.3.1 IPSec
- •14.3.3 DNSSec
- •14.3.4 Secure MIME
- •14.4 SIP Security Model
- •14.4.1 SIP Digest Authentication
- •14.4.2 SIP Authentication Using TLS
- •14.4.3 Secure SIP
- •14.4.4 Identity
- •14.4.5 Enhanced SIP Identity
- •14.6 Media Security
- •14.6.1 Non-RTP Media
- •14.6.2 Secure RTP
- •14.6.3 Keying SRTP
- •14.6.4 Best Effort Encryption
- •14.6.5 ZRTP
- •14.7 Questions
- •References
- •15 Peer-to-Peer SIP
- •15.1 P2P Properties
- •15.2 P2P Properties of SIP
- •15.3 P2P Overlays
- •15.4 RELOAD
- •15.5 Host Identity Protocol
- •15.6 Conclusion
- •15.7 Questions
- •References
- •16 Call Flow Examples
- •16.1 SIP Call with Authentication, Proxies, and Record-Route
- •16.2 SIP Call with Stateless and Stateful Proxies with Called Party Busy
- •16.3 SIP to PSTN Call Through Gateways
- •16.4 PSTN to SIP Call Through a Gateway
- •16.5 Parallel Search
- •16.6 Call Setup with Two Proxies
- •16.7 SIP Presence and Instant Message Example
- •References
- •17 Future Directions
- •17.2 More Extensions
- •17.3 Better Identity
- •17.4 Interdomain SIP
- •17.5 Making Features Work Better
- •17.6 Emergency Calling
- •17.7 More SIP Trunking
- •17.9 Improved NAT Traversal
- •17.10 Security Deployment
- •17.11 Better Interoperability
- •References
- •A.1 ABNF Rules
- •A.2 Introduction to XML
- •References
- •About the Author
336 |
SIP: Understanding the Session Initiation Protocol |
overlay due to NAT. This is one reason why often recursive routing is used on overlays instead of iterative routing.
On real overlays, during the bootstrap process (an example of which is described for the RELOAD protocol in the next section), a node learns its successor and predecessor nodes and establishes connections to them using the bootstrap server for rendezvous. The node then requests the finger tables of the neighbor elements and copies information about the node ID that it would use to populate its own finger table. For the nodes that should be in the new node’s finger table, the node uses the other node as a rendezvous server so that it can contact the other nodes, perhaps running ICE for hole punching. Once established, this connection is maintained through keep alives. The node can then request the finger table from this node, and continue in this way until it has a complete finger table and connections established to each of these nodes. As nodes join and leave the overlay, the node will make adjustments to the finger table.
By having nodes in the overlay provide this rendezvous service to other nodes, establishing and maintaining connections, the overlay can work even though nodes are behind NATs.
15.4 RELOAD
The RELOAD (Resource Location and Discovery) Protocol [6] is a P2P protocol being developed in the P2PSIP working group of the IETF. Currently, the protocol is defined in an Internet Draft and still needs significant work before it will be finalized and published as an RFC. Another peer protocol which is not progressing as a standard but is being implemented and deployed is P2PP [7]. Some of the protocol details presented in this section may have changed. Readers interested in peer protocols should check for the latest Internet Drafts and RFCs at the P2PSIP working group charter page [8].
RELOAD attempts to provide a self-organizing overlay network with routing between nodes and service discovery. RELOAD can be used for a number of applications, each of which is defined in separate usage documents. For example, the SIP usage of RELOAD is defined in [9]. In RELOAD, nodes join the overlay by establishing connections to a small number of other nodes in the overlay. Each node in the overlay has a node identifier (Node-ID), which is a 128 bit value used for routing messages across the overlay. Node-IDs are assigned by a centralized enrollment server. The enrollment server also issues credentials (certificates containing the Node-ID) used to authenticate nodes in the overlay. A node joins the overlay using a bootstrap node: a stable node in the overlay with a public IP address that is discoverable based on the name of the overlay. A new node forms new connections to other nodes in the overlay and builds a routing table. The node then actually joins the overlay by inserting itself into the routing
Peer-to-Peer SIP |
337 |
tables of surrounding nodes and storing the data associated with that part of the overlay. Information is stored and retrieved in the overlay distributed database using store and fetch requests. The functions of different types of peers in the overlays are discussed in Table 15.2.
RELOAD uses a combination of binary encoding and TLV (tag length value) encoding; messages are routed over TLS or DTLS. Table 15.3 summarizes some of the diverse function of RELOAD that are grouped together in this protocol.
The SIP usage of RELOAD provides two main functions: registration and rendezvous. The registration function is the ability of a UA to store the mapping between their address of record (AOR) and their Node-ID. This allows another UA in the overlay to do a lookup of their AOR URI to determine their NodeID. The rendezvous function is to use RELOAD to establish a direct connection between two UAs in the overlay so they can exchange SIP messages. Without NAT, this function would not be needed, and instead the registration function could provide a mapping between an AOR and an IP address and port. However, since many peers will be behind NAT, this rendezvous functionality allows them to perform hole punching using ICE in order to establish a direct TLS or DTLS connection between the UAs. At that point, normal SIP messages including INVITE, ACK, and BYE can be exchanged. To complete the NAT traversal, the SIP exchange can provide rendezvous functionality for the media, and hence ICE will be run again. Both the RELOAD ICE and SIP ICE applications need to
|
Table 15.2 |
|
|
Roles in an Overlay |
|
Peer node |
A full member of the overlay that stores information and routes overlay |
|
requests. |
||
|
||
Client node |
Not a full member of the overlay, but it can query the overlay for information. |
|
Joining peer |
A peer attempting to join the overlay. |
|
Bootstrap peer |
A stable peer with a public IP address used to join the overlay. |
|
Admitting peer |
The first peer contacted by joining peer after the bootstrap peer. |
|
Proxy peer |
A SIP proxy server that is also a peer in the overlay. It helps route SIP |
|
|
messages to and from the outside of the overlay. |
|
Enrollment server |
It issues credentials used by peers for authentication in the overlay. |
|
Table 15.3 |
|
RELOAD Protocol Functions |
Usage layer |
An application that uses RELOAD, such as SIP. |
Message transport |
Provides end-to-end reliability of overlay messages. |
Storage |
Provides database functions for overlay users. |
Topology plug-in |
Supports different topologies based on overlay algorithm. |
338 |
SIP: Understanding the Session Initiation Protocol |
have a fallback, and that means TURN transport relay addresses. The method of discovering and using TURN servers is still under development. RELOAD can use different overlay protocols. The current version uses a modified version of Chord.
15.5 Host Identity Protocol
RELOAD as a protocol reimplements many layers of the protocol stack. It provides many transport layer and routing layer services, including reliability and fragmentation. An alternative approach to building an overlay is to reuse the existing parts of the IP stack by inserting shim layers. One example of this is the usage of Host Identity Protocol (HIP) [10] over an overlay. The protocol stack of HIP is shown in Figure 15.3. The HIP architecture separates the identifier and locator roles of an IP address. An HIP host has a constant host identity, while its IP address can change in real-time and over time. The host identity is a public private key pair. HIP uses a Host Identity Tag (HIT) as an identifier. A HIT is a self-certifying identity because it is formed as a prefixed, truncated hash of the public key, ORCHID (Overlay Routable Cryptographic Hash Identifier) [11] as an identifier, which is a 128-bit address that has the same format as an IPv6 address, but is not routable using IPv6. To claim a particular HIT, a host uses the private key associated with the public key of the HIT. The use of an ORCHID means that the IPv6 APIs can be used with HIP without any changes.
HIP may one day be run natively as a transport on top of IP. However, today it is tunneled over UDP so that it can traverse NAT.
HIP exchanges messages between hosts by first establishing connections known as HIP associations. An HIP association is secured using an IPSec tunnel, which is keyed using a DH exchange authenticated by the public keys associated with the host HITs. The HIP base exchange is used to signal the HIP
Figure 15.3 Host Identity Protocol stack.
Peer-to-Peer SIP |
339 |
association, and is currently being extended to support ICE hole punching for NAT traversal.
HIP needs a way to map an HIT to an IP address used to establish HIP connections. This can be done with either DNS, a registration method (a HIP rendezvous server), or an overlay routing protocol. This usage of HIP is described in [12]. Currently, the IETF HIP working group is working on taking parts of the RELOAD protocol and using them for discovery and rendezvous for HIP. Adding HIP to RELOAD would have the following advantages:
•Since HIP uses ICE, all other protocols that run on top of HIP, including RELOAD, SIP, and RTP would all get the benefits of ICE without having to implement it. For example, consider two peers who need to establish a RELOAD connection, exchange SIP messages, and then exchange RTP media. The RELOAD messages would be run over HIP and ICE would be run to establish the secure HIP association between the hosts; then RELOAD messages could be exchanged. Next, SIP could be sent over the same HIP association and finally RTP, all without having to run ICE again.
•Minimal changes to SIP and RTP would be required to use HIP. HITs would be carried as IPv6 addresses in SIP URIs and in SDP offer/answer exchanges for RTP media negotiation. This allows direct HIP usage for SIP and RTP without major changes to the protocols. The only change is the way URIs are resolved. In normal SIP, routing is based on the host part, and the user part is only resolved within the domain. In P2PSIP with HIP, the entire user and host part of the URI would need to be resolved. One solution to this would be to only use the domain part of the URI—the user part would essentially be ignored. While both a RELOAD and an HIP approach require this change to SIP, RELOAD requires even more extensive changes.
The complete set of HIP experimental specifications is listed in Table 15.4. For more details of HIP, see [19].
15.6 Conclusion
P2P SIP is an area with quite a lot of activity, both in industry and in standards. P2P has advantages in some applications and scenarios. Protocols such as RELOAD and HIP will likely be used to implement some of these applications and scenarios.
