- •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
10
Network Address Translation
This chapter introduces Network Address Translation (NAT) and looks at the issues and challenges involved in making SIP and other Internet communications protocols work through them. The motivations for, advantages, and disadvantages of NAT are discussed. NAT classification terminology is introduced. Techniques for NAT traversal such as hole punching and protocols such as STUN, ICE, and TURN are introduced. SIP and SDP extensions enabling NAT traversal are discussed.
First, here is a word about terminology, which can be a bit confusing in this chapter. While NAT usually stands for network address translation, the function of converting or mapping an inside IP address and port to an outside IP address and port, it also has another meaning as a network address translator, the device which performs this function. Which meaning is used can usually be determined by context. In this chapter, I will mainly use the abbreviation for the function, but there are times when it is common terminology to use it for the device. NAT is also sometimes used as a verb, that is, to NAT is to change the IP address and ports of packets on packets as they pass on the wire. This is also known as NATting. An address which has been changed by a NAT is also known as a NATed address. In this chapter, two other protocols also have an abbreviation used to represent two different things—both STUN and TURN protocols have two different meanings.
10.1 Introduction to NAT
Network address translation (NAT) is used to interconnect IP networks that use different IP address types. For example, in Chapter 1, the concept of private address spaces was introduced. Typically, NAT is used to map an inside address to an outside address. NAT operates at Layer 3 in the Internet protocol stack. Net-
235
236 |
SIP: Understanding the Session Initiation Protocol |
work address and port translation (NAPT) also change the port number in IP packets, operating at Layers 3 and 4. Typically most NAT also perform NAPT, but are still referred to simply as NAT. The reasons for implementing NAT will be discussed in the following sections, but the main reason has to do with the shortage of IPv4 addresses.
The earliest discussion of NAT in the IETF is RFC 1631 [1], which discusses the pros and cons of using NAT. The need for private IP address spaces resulted in the publication of RFC 1918 [2] in 1996 by the IETF, which reserved three IPv4 address blocks. These addresses are not routable on the public Inter- net—they only have meaning within a private network. RFC 2663 [3] defined NAT for the first time. Recently, serious discussions have started about the standardization of NAT and the architectural implications of NAT been held in the IETF. In 2004, a working group was formed to develop terminology for NAT, define requirements, and define protocols for the testing and probing of NATs. This working group, known obtusely as BEHAVE (Behavioral Engineering for Hindrance Avoidance) [4] has made excellent progress over the past few years and has published a number of documents discussed in this chapter. This chapter will make use of some this new terminology and definitions. The next sections cover the advantages and the problem with NAT as discussed in RFC 2993 [5].
10.2 Advantages of NAT
A number of factors led to the development of NAT, and only a few of them relate to the shortage of IPv4 addresses. Many of them are aspects of management. For example, a network can avoid having to renumber IP addresses when changing internet service providers. The management of IP addresses can be simplified if a network must use a number of small individual address blocks. The use of a single private address range is easier to manage in the end devices, with the complexity of the small address blocks being centralized in the NAT. Networks can also use the basic filtering properties of NAT to provide some firewall security. Any host that does not initiate outbound connections to the Internet is not reachable by a host on the Internet. Hosts that do initiate connections are limited by the filtering rules of the NAT in receiving incoming packets.
For Internet service providers (ISPs), NAT can allow an ISP to conserve the number of IP addresses it needs. The number of IP addresses needed is only the maximum number of concurrent connected users rather than the total number of users. Each user can be assigned a private address and will only be assigned a public address when they connect. NAT also allows an ISP to segment their network for management purposes.
Network Address Translation |
237 |
10.3 Disadvantages of NAT
There are many problems with NAT. The biggest problem is that they break the end-to-end model of the Internet. The reachability of any Internet host by any other Internet host was part of the Internet from the beginning, and many assumptions about reachability are included in Internet protocols. NAT also breaks the transitive reachability of hosts (e.g., host A can reach host B, host B can reach host C, but host C cannot reach host A). NAT creates a single point of failure in the Internet where fates are shared. For example, in a connection without NAT between host A and host B, as long as both hosts have Internet connectivity they can exchange packets and communicate. Any of the routers and connections between them can fail and the connection can be maintained, possibly with some lost packets. However, if A and B connect through a NAT, the failure of that NAT will cause the connection to fail with no guarantee that either A or B can re-establish it. For example, many failures experienced during Web browsing are not failures of either the Web browser or the Web server, but of a NAT in between. When the NAT fails, the bindings are lost and the connection stalls. This continues until the user hits the refresh button on the Web browser which closes all the TCP connections and opens new ones, creating new bindings, which allow browsing to continue. The use of NAT also complicates multihoming in a site, since a response must route back through the same NAT that processed the request. NAT also inhibits the implementation of security at the IP layer.
There are cases where NAT will not prevent IP address renumbering. For example, when networks that use the same private address range are combined, the address overlap will require renumbering. NAT with port mapping complicates offering services that use well-known port numbers. For example, Web servers typically use port 80 which can only be allocated once by NAT for a particular public address. If multiple SIP clients are behind the same NAT and share a public IP address, only one of them can be allocated the well-known SIP port of 5060, which can result in routing failures.
NATs that operate at both layer 3 and layer 4 must understand all transport protocols used through it. While this is not a problem for the common TCP and UDP, it is a major problem for newer transport protocols such as the Datagram Congestion Control Protocol (DCCP), Stream Control Transport Protocol (SCCP), and Host Identity Protocol (HIP). As a result NATs are an impediment to new transport protocols.
Unfortunately, NAT usage is widespread on the Internet today. As a result, all protocols must be aware of NAT operation and be able to overcome their limitations. The next section will discuss how NAT works.
238 |
SIP: Understanding the Session Initiation Protocol |
10.4 How NAT Works
NAT operates at the IP Layer 3 as shown in Figure 1.1. NAPT operates at both the IP and transport layers 3 and 4. NAT creates mappings between inside and outside addresses and ports. These mappings are sometimes called bindings. Mappings are temporary, and expire either after a TCP connection is closed with a FIN or after inactivity with UDP transport. There are multiple types of NAT depending on the rules used for mapping and filtering. Older NAT terminology classified NAT in terms of full cone, restricted cone, and symmetric. However, in this chapter, we will use more modern terminology developed by the BEHAVE working group. Some major types of NAT are endpoint address independent, endpoint address dependent, and endpoint address and port dependent. There are also several behavioral options as well.
Table 10.1 lists the parts of the IPv4 and UDP/TCP header field that are modified by NAT. When a request is received on the inside of a NAT and forwarded to the outside, the source address and source port are rewritten. If this is the first packet in a flow, a new mapping will be created to be used for routing responses. If this is not the first packet, an existing mapping will be used. The UDP checksum must also be rewritten. When a response packet is received from the outside of the NAT and forwarded to the inside, the destination address and destination port are rewritten to the inside address and port for this mapping. Again, the UDP checksum must be rewritten.
Note that the fact that NAT operates at Layer 4 with TCP does not mean that the resulting TCP session is no longer end-to-end—the TCP connection is still end-to-end. NAT never maintains a transmission control block or maps sequence numbers. NAT also never performs retransmissions or acknowledgements. As a result, TCP still operates with end-to-end flow control and reliability through NAT.
An example of NAT operation is shown in Figure 10.1. In this example, a SIP client on a host sends a SIP request through a NAT, two routers, and an Ethernet switch. The Ethernet switch operates only at the link and physical layer while the routers operate at the IP, link, and physical layers. These devices only forward the packet without making any changes to the packet. The
Table 10.1
Parts of an IPv4 and UDP/TCP Header Field Modified by NAT
IP header checksum
Source address
Destination address
Source port
Desitnation port
UDP checksum
