This document, RFC 3261, specifies the Session Initiation Protocol (SIP), which is an application-layer control protocol used for creating, modifying, and terminating sessions such as Internet telephone calls and multimedia conferences. It outlines the functionality of SIP, including the use of proxy servers for routing requests and user authentication, as well as providing a registration function for users. The document serves as a standard for the Internet community and invites discussion for improvements.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
15 views
Code
This document, RFC 3261, specifies the Session Initiation Protocol (SIP), which is an application-layer control protocol used for creating, modifying, and terminating sessions such as Internet telephone calls and multimedia conferences. It outlines the functionality of SIP, including the use of proxy servers for routing requests and user authentication, as well as providing a registration function for users. The document serves as a standard for the Internet community and invites discussion for improvements.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 22
Network Working Group
Request for Comments: 3261
Obsoletes: 2543 Category: Standards Track J. Rosenberg dynamicsoft H. Schulzrinne Columbia U. G. Camarillo Ericsson A. Johnston WorldCom J. Peterson Neustar R. Sparks dynamicsoft M. Handley ICIR E. Schooler AT&T June 2002 Status of this Memo SIP: Session Initiation Protocol This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2002). All Rights Reserved. Abstract This document describes Session Initiation Protocol (SIP), an application-layer control (signaling) protocol for creating, modifying, and terminating sessions with one or more participants. These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences. SIP invitations used to create sessions carry session descriptions that allow participants to agree on a set of compatible media types. SIP makes use of elements called proxy servers to help route requests to the user's current location, authenticate and authorize users for services, implement provider call-routing policies, and provide features to users. SIP also provides a registration function that allows users to upload their current locations for use by proxy servers. SIP runs on top of several different transport protocols. Rosenberg, et. al. Standards Track [Page 1] RFC 3261 SIP: Session Initiation Protocol June 2002 Table of Contents 1 Introduction 8 2 Overview of SIP Functionality 9 3 Terminology 10 4 Overview of Operation 10 5 Structure of the Protocol 18 6 Definitions 20 7 SIP Messages 26 7.1 Requests 27 7.2 Responses 28 7.3 Header Fields 29 7.3.1 Header Field Format 30 7.3.2 Header Field Classification 32 7.3.3 Compact Form 32 7.4 Bodies 33 7.4.1 Message Body Type 33 7.4.2 Message Body Length 33 7.5 Framing SIP Messages 34 8 General User Agent Behavior 34 8.1 UAC Behavior 35 8.1.1 Generating the Request 35 8.1.1.1 Request-URI 35 8.1.1.2 To 36 8.1.1.3 From 37 8.1.1.4 Call-ID 37 8.1.1.5 CSeq 38 8.1.1.6 Max-Forwards 38 8.1.1.7 Via 39 8.1.1.8 Contact 40 8.1.1.9 Supported and Require 40 8.1.1.10 Additional Message Components 41 8.1.2 Sending the Request 41 8.1.3 Processing Responses 42 8.1.3.1 Transaction Layer Errors 42 8.1.3.2 Unrecognized Responses 42 8.1.3.3 Vias 43 8.1.3.4 Processing 3xx Responses 43 8.1.3.5 Processing 4xx Responses 45 8.2 UAS Behavior 46 8.2.1 Method Inspection 46 8.2.2 Header Inspection 46 8.2.2.1 To and Request-URI 46 8.2.2.2 Merged Requests 47 8.2.2.3 8.2.3 Require Content Processing 47 48 8.2.4 8.2.5 Applying Extensions Processing the Request 49 49 Rosenberg, et. al. Standards Track [Page 2] RFC 3261 SIP: Session Initiation Protocol June 2002 8.2.6 Generating the Response 49 8.2.6.1 Sending a Provisional Response 49 8.2.6.2 Headers and Tags 50 8.2.7 Stateless UAS Behavior 50 8.3 Redirect Servers 51 9 Canceling a Request 53 9.1 Client Behavior 53 9.2 Server Behavior 55 10 Registrations 56 10.1 Overview 56 10.2 Constructing the REGISTER Request 57 10.2.1 Adding Bindings 59 10.2.1.1 Setting the Expiration Interval of Contact Addresses 60 10.2.1.2 Preferences among Contact Addresses 61 10.2.2 Removing Bindings 61 10.2.3 Fetching Bindings 61 10.2.4 Refreshing Bindings 61 10.2.5 Setting the Internal Clock 62 10.2.6 Discovering a Registrar 62 10.2.7 Transmitting a Request 62 10.2.8 Error Responses 63 10.3 Processing REGISTER Requests 63 11 Querying for Capabilities 66 11.1 Construction of OPTIONS Request 67 11.2 Processing of OPTIONS Request 68 12 Dialogs 69 12.1 Creation of a Dialog 70 12.1.1 UAS behavior 70 12.1.2 UAC Behavior 71 12.2 Requests within a Dialog 72 12.2.1 UAC Behavior 73 12.2.1.1 Generating the Request 73 12.2.1.2 Processing the Responses 75 12.2.2 UAS Behavior 76 12.3 13 13.1 Overview 13.2 13.2.1 13.2.2 13.2.2.1 1xx Responses 13.2.2.2 3xx Responses Termination of a Dialog Initiating a Session UAC Processing Creating the Initial INVITE Processing INVITE Responses 13.2.2.3 4xx, 5xx and 6xx Responses 13.2.2.4 2xx Responses 77 77 77 78 78 81 81 81 81 82 13.3 UAS Processing 13.3.1 Processing of the INVITE 13.3.1.1 Progress 83 83 84 13.3.1.2 The INVITE is Redirected 84 Rosenberg, et. al. Standards Track [Page 3] RFC 3261 SIP: Session Initiation Protocol June 2002 13.3.1.3 The INVITE is Rejected 85 13.3.1.4 The INVITE is Accepted 85 14 Modifying an Existing Session 86 14.1 UAC Behavior 86 14.2 UAS Behavior 88 15 Terminating a Session 89 15.1 Terminating a Session with a BYE Request 90 15.1.1 UAC Behavior 90 15.1.2 UAS Behavior 91 16 Proxy Behavior 91 16.1 Overview 91 16.2 Stateful Proxy 92 16.3 Request Validation 94 16.4 Route Information Preprocessing 96 16.5 Determining Request Targets 97 16.6 Request Forwarding 99 16.7 Response Processing 107 16.8 Processing Timer C 114 16.9 Handling Transport Errors 115 16.10 CANCEL Processing 115 16.11 Stateless Proxy 116 16.12 Summary of Proxy Route Processing 118 16.12.1 Examples 118 16.12.1.1 Basic SIP Trapezoid 118 16.12.1.2 16.12.1.3 Traversing a Strict-Routing Proxy Rewriting Record-Route Header Field Values 120 121 17 Transactions 122 17.1 Client Transaction 124 17.1.1 INVITE Client Transaction 125 17.1.1.1 Overview of INVITE Transaction 125 17.1.1.2 Formal Description 125 17.1.1.3 Construction of the ACK Request 129 17.1.2 Non-INVITE Client Transaction 130 17.1.2.1 Overview of the non-INVITE Transaction 130 17.1.2.2 Formal Description 131 17.1.3 Matching Responses to Client Transactions 132 17.1.4 Handling Transport Errors 133 17.2 Server Transaction 134 17.2.1 INVITE Server Transaction 134 17.2.2 Non-INVITE Server Transaction 137 17.2.3 Matching Requests to Server Transactions 138 17.2.4 Handling Transport Errors 141 18 Transport 141 18.1 Clients 142 18.1.1 Sending Requests 142 18.1.2 Receiving Responses 144 18.2 Servers 145 18.2.1 Receiving Requests 145 Rosenberg, et. al. Standards Track [Page 4] RFC 3261 SIP: Session Initiation Protocol June 2002 18.2.2 Sending Responses 146 18.3 Framing 147 18.4 Error Handling 147 19 Common Message Components 147 19.1 SIP and SIPS Uniform Resource Indicators 148 19.1.1 SIP and SIPS URI Components 148 19.1.2 Character Escaping Requirements 152 19.1.3 Example SIP and SIPS URIS 153 19.1.4 URI Comparison 153 19.1.5 Forming Requests from a URI 156 19.1.6 Relating SIP URIS and tel URLS 157 19.2 Option Tags 158 19.3 Tags 159 20 Header Fields 159 20.1 Accept 161 20.2 Accept-Encoding 163 20.3 Accept-Language 164 20.4 Alert-Info 164 20.5 Allow 165 20.6 Authentication-Info 165 20.7 Authorization 165 20.8 Call-ID 166 20.9 Call-Info 166 20.10 Contact 167 20.11 Content-Disposition 168 20.12 Content-Encoding 169 20.13 Content-Language 169 20.14 Content-Length 169 20.15 Content-Type 170 20.16 CSeq 170 20.17 Date 170 20.18 Error-Info 171 20.19 Expires 171 20.20 From 172 20.21 In-Reply-To 172 20.22 Max-Forwards 173 20.23 Min-Expires 173 20.24 MIME-Version 173 20.25 Organization 174 20.26 Priority 174 20.27 Proxy-Authenticate 174 20.28 Proxy-Authorization 175 20.29 Proxy-Require 175 20.30 Record-Route 175 20.31 Reply-To 176 20.32 Require 176 20.33 Retry-After 176 20.34 Route 177 Rosenberg, et. al. Standards Track [Page 5] RFC 3261 SIP: Session Initiation Protocol June 2002 20.35 Server 177 20.36 Subject 177 20.37 Supported 178 20.38 Timestamp 178 20.39 To 178 20.40 Unsupported 179 20.41 User-Agent 179 20.42 Via 179 20.43 Warning 180 20.44 WWW-Authenticate 182 21 Response Codes 182 21.1 Provisional 1xx 182 21.1.1 100 Trying 183 21.1.2 180 Ringing 183 21.1.3 181 Call Is Being Forwarded 183 21.1.4 182 Queued 183 21.1.5 183 Session Progress 183 21.2 Successful 2xx 183 21.2.1 200 OK 183 21.3 Redirection 3xx 184 21.3.1 300 Multiple Choices 184 21.3.2 301 Moved Permanently 184 21.3.3 302 Moved Temporarily 184 21.3.4 305 Use Proxy 185 21.3.5 380 Alternative Service 185 21.4 Request Failure 4xx 185 21.4.1 400 Bad Request 185 21.4.2 401 Unauthorized 185 21.4.3 402 Payment Required 186 21.4.4 403 Forbidden 186 21.4.5 404 Not Found 186 21.4.6 405 Method Not Allowed 186 21.4.7 406 Not Acceptable 186 21.4.8 407 Proxy Authentication Required 186 21.4.9 408 Request Timeout 186 21.4.10 410 Gone 187 21.4.11 413 Request Entity Too Large 187 21.4.12 414 Request-URI Too Long 187 21.4.13 415 Unsupported Media Type 187 21.4.14 416 Unsupported URI Scheme 187 21.4.15 420 Bad Extension 187 21.4.16 421 Extension Required 188 21.4.17 423 Interval Too Brief 188 21.4.18 480 Temporarily Unavailable 188 21.4.19 481 Call/Transaction Does Not Exist 188 21.4.20 482 Loop Detected 188 21.4.21 483 Too Many Hops 189 21.4.22 484 Address Incomplete 189 Rosenberg, et. al. Standards Track [Page 6] RFC 3261 SIP: Session Initiation Protocol June 2002 21.4.23 485 Ambiguous 189 21.4.24 486 Busy Here 189 21.4.25 487 Request Terminated 190 21.4.26 488 Not Acceptable Here 190 21.4.27 491 Request Pending 190 21.4.28 493 Undecipherable 190 21.5 Server Failure 5xx 190 21.5.1 500 Server Internal Error 190 21.5.2 501 Not Implemented 191 21.5.3 502 Bad Gateway 191 21.5.4 503 Service Unavailable 191 21.5.5 504 Server Time-out 191 21.5.6 505 Version Not Supported 192 21.5.7 513 Message Too Large 192 21.6 Global Failures 6xx 192 21.6.1 600 Busy Everywhere 192 21.6.2 603 Decline 192 21.6.3 21.6.4 22 22.1 22.2 22.3 22.4 23 604 Does Not Exist Anywhere 606 Not Acceptable Usage of HTTP Authentication Framework User-to-User Authentication Proxy-to-User Authentication The Digest Authentication Scheme S/MIME 192 192 193 193 195 197 199 201 23.1 S/MIME Certificates 201 23.2 S/MIME Key Exchange 202 23.3 Securing MIME bodies 205 23.4 SIP Header Privacy and Integrity using S/MIME: Tunneling SIP 207 23.4.1 Integrity and Confidentiality Properties of SIP Headers 207 23.4.1.1 Integrity 207 23.4.1.2 Confidentiality 208 23.4.2 Tunneling Integrity and Authentication 209 23.4.3 Tunneling Encryption 211 24 Examples 213 24.1 Registration 213 24.2 Session Setup 214 25 Augmented BNF for the SIP Protocol 219 25.1 Basic Rules 219 26 Security Considerations: Threat Model and Security Usage Recommendations 232 26.1 Attacks and Threat Models 233 26.1.1 Registration Hijacking 233 26.1.2 Impersonating a Server 234 26.1.3 Tampering with Message Bodies 235 26.1.4 Tearing Down Sessions 235 Rosenberg, et. al. Standards Track [Page 7] RFC 3261 SIP: Session Initiation Protocol June 2002 26.1.5 26.2 Denial of Service and Amplification Security Mechanisms 236 237 26.2.1 26.2.2 Transport and Network Layer Security SIPS URI Scheme 238 239 26.2.3 HTTP Authentication 240 26.2.4 S/MIME 240 26.3 Implementing Security Mechanisms 241 26.3.1 Requirements for Implementers of SIP 241 26.3.2 Security Solutions 242 26.3.2.1 Registration 242 26.3.2.2 Interdomain Requests 243 26.3.2.3 Peer-to-Peer Requests 245 26.3.2.4 DoS Protection 246 26.4 Limitations 247 26.4.1 HTTP Digest 247 26.4.2 S/MIME 248 26.4.3 TLS 249 26.4.4 SIPS URIS 249 26.5 Privacy 251 27 IANA Considerations 252 27.1 Option Tags 252 27.2 Warn-Codes 252 27.3 Header Field Names 253 27.4 Method and Response Codes 253 27.5 The "message/sip" MIME type. 254 27.6 New Content-Disposition Parameter Registrations 255 28 Changes From RFC 2543 255 28.1 Major Functional Changes 255 28.2 Minor Functional Changes 260 29 Normative References 261 30 Informative References 262 A Table of Timer Values 265 Acknowledgments 266 Authors' Addresses 267 269 Full Copyright Statement 1 Introduction There are many applications of the Internet that require the creation and management of a session, where a session is considered an exchange of data between an association of participants. The implementation of these applications is complicated by the practices of participants: users may move between endpoints, they may be addressable by multiple names, and they may communicate in several different media sometimes simultaneously. Numerous protocols have been authored that carry various forms of real-time multimedia session data such as voice, video, or text messages. The Session Initiation Protocol (SIP) works in concert with these protocols by Rosenberg, et. al. Standards Track [Page 8] RFC 3261 SIP: Session Initiation Protocol June 2002 enabling Internet endpoints (called user agents) to discover one another and to agree on a characterization of a session they would like to share. For locating prospective session participants, and for other functions, SIP enables the creation of an infrastructure of network hosts (called proxy servers) to which user agents can send registrations, invitations to sessions, and other requests. SIP is an agile, general-purpose tool for creating, modifying, and terminating sessions that works independently of underlying transport protocols and without dependency on the type of session that is being established. 2 Overview of SIP Functionality SIP is an application-layer control protocol that can establish, modify, and terminate multimedia sessions (conferences) such as Internet telephony calls. SIP can also invite participants to already existing sessions, such as multicast conferences. Media can be added to (and removed from) an existing session. SIP transparently supports name mapping and redirection services, which supports personal mobility [27] users can maintain a single externally visible identifier regardless of their network location. SIP supports five facets of establishing and terminating multimedia communications: User location: determination of the end system to be used for communication; User availability: determination of the willingness of the called party to engage in communications; User capabilities: determination of the media and media parameters to be used; Session setup: "ringing", establishment of session parameters at both called and calling party; Session management: including transfer and termination of sessions, modifying session parameters, and invoking services. SIP is not a vertically integrated communications system. SIP is rather a component that can be used with other IETF protocols to build a complete multimedia architecture. Typically, these architectures will include protocols such as the Real-time Transport Protocol (RTP) (RFC 1889 [28]) for transporting real-time data and providing QoS feedback, the Real-Time streaming protocol (RTSP) (RFC 2326 [29]) for controlling delivery of streaming media, the Media Rosenberg, et. al. Standards Track [Page 9] RFC 3261 SIP: Session Initiation Protocol June 2002 Gateway Control Protocol (MEGACO) (RFC 3015 [30]) for controlling gateways to the Public Switched Telephone Network (PSTN), and the Session Description Protocol (SDP) (RFC 2327 [1]) for describing multimedia sessions. Therefore, SIP should be used in conjunction with other protocols in order to provide complete services to the users. However, the basic functionality and operation of SIP does not depend on any of these protocols. SIP does not provide services. Rather, SIP provides primitives that can be used to implement different services. For example, SIP can locate a user and deliver an opaque object to his current location. If this primitive is used to deliver a session description written in SDP, for instance, the endpoints can agree on the parameters of a session. If the same primitive is used to deliver a photo of the caller as well as the session description, a "caller ID" service can be easily implemented. As this example shows, a single primitive is typically used to provide several different services. SIP does not offer conference control services such as floor control or voting and does not prescribe how a conference is to be managed. SIP can be used to initiate a session that uses some other conference control protocol. Since SIP messages and the sessions they establish can pass through entirely different networks, SIP cannot, and does not, provide any kind of network resource reservation capabilities. The nature of the services provided make security particularly important. To that end, SIP provides a suite of security services, which include denial-of-service prevention, authentication (both user to user and proxy to user), integrity protection, and encryption and privacy services. SIP works with both IPv4 and IPv6. 3 Terminology In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119 [2] and indicate requirement levels for compliant SIP implementations. 4 Overview of Operation This section introduces the basic operations of SIP using simple examples. This section is tutorial in nature and does not contain any normative statements. Rosenberg, et. al. Standards Track [Page 10] RFC 3261 SIP: Session Initiation Protocol June 2002 The first example shows the basic functions of SIP: location of an end point, signal of a desire to communicate, negotiation of session parameters to establish the session, and teardown of the session once established. Figure 1 shows a typical example of a SIP message exchange between two users, Alice and Bob. (Each message is labeled with the letter "F" and a number for reference by the text.) In this example, Alice uses a SIP application on her PC (referred to as a softphone) to call Bob on his SIP phone over the Internet. Also shown are two SIP proxy servers that act on behalf of Alice and Bob to facilitate the session establishment. This typical arrangement is often referred to as the "SIP trapezoid" as shown by the geometric shape of the dotted lines in Figure 1. Alice "calls" Bob using his SIP identity, a type of Uniform Resource Identifier (URI) called a SIP URI. SIP URIs are defined in Section 19.1. It has a similar form to an email address, typically containing a username and a host name. In this case, it is sip:[email protected], where biloxi.com is the domain of Bob's SIP service provider. Alice has a SIP URI of sip:[email protected]. Alice might have typed in Bob's URI or perhaps clicked on a hyperlink or an entry in an address book. SIP also provides a secure URI, called a SIPS URI. An example would be sips:[email protected]. A call made to a SIPS URI guarantees that secure, encrypted transport (namely TLS) is used to carry all SIP messages from the caller to the domain of the callee. From there, the request is sent securely to the callee, but with security mechanisms that depend on the policy of the domain of the callee. SIP is based on an HTTP-like request/response transaction model. Each transaction consists of a request that invokes a particular method, or function, on the server and at least one response. In this example, the transaction begins with Alice's softphone sending an INVITE request addressed to Bob's SIP URI. INVITE is an example of a SIP method that specifies the action that the requestor (Alice) wants the server (Bob) to take. The INVITE request contains a number of header fields. Header fields are named attributes that provide additional information about a message. The ones present in an INVITE include a unique identifier for the call, the destination address, Alice's address, and information about the type of session that Alice wishes to establish with Bob. The INVITE (message F1 in Figure 1) might look like this: Rosenberg, et. al. Standards Track [Page 11] RFC 3261 SIP: Session Initiation Protocol atlanta.com proxy Alice's softphone INVITE F1 ---> 100 Trying F3 INVITE F2 biloxi.com proxy June 2002 Bob's SIP Phone ----> 100 Trying F5 < INVITE F4 180 Ringing F6 180 Ringing F7 <--- 180 Ringing F8 --> 200 OK F9 < 200 OK F10 <---- 200 OK F11 <- <- ACK F12 Media Session BYE F13 200 OK F14 > Figure 1: SIP session setup example with SIP trapezoid 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 (Alice's SDP not shown) The first line of the text-encoded message contains the method name (INVITE). The lines that follow are a list of header fields. This example contains a minimum required set. The header fields are briefly described below: Rosenberg, et. al. Standards Track [Page 12] RFC 3261 SIP: Session Initiation Protocol June 2002 Via contains the address (pc33.atlanta.com) at which Alice is expecting to receive responses to this request. It also contains a branch parameter that identifies this transaction. To contains a display name (Bob) and a SIP or SIPS URI (sip:[email protected]) towards which the request was originally directed. Display names are described in RFC 2822 [3]. From also contains a display name (Alice) and a SIP or SIPS URI (sip:[email protected]) that indicate the originator of the request. This header field also has a tag parameter containing a random string (1928301774) that was added to the URI by the softphone. It is used for identification purposes. Call-ID contains a globally unique identifier for this call, generated by the combination of a random string and the softphone's host name or IP address. The combination of the To tag, From tag, and Call-ID completely defines a peer-to-peer SIP relationship between Alice and Bob and is referred to as a dialog. The CSeq or Command Sequence contains an integer and a method name. CSeq number is incremented for each new request within a dialog and is a traditional sequence number. Contact contains a SIP or SIPS URI that represents a direct route to contact Alice, usually composed of a username at a fully qualified domain name (FQDN). While an FQDN is preferred, many end systems do not have registered domain names, so IP addresses are permitted. While the Via header field tells other elements where to send the response, the Contact header field tells other elements where to send future requests. Max-Forwards serves to limit the number of hops a request can make on the way to its destination. It consists of an integer that is decremented by one at each hop. Content-Type contains a description of the message body (not shown). Content-Length contains an octet (byte) count of the message body. The complete set of SIP header fields is defined in Section 20. The details of the session, such as the type of media, codec, or sampling rate, are not described using SIP. Rather, the body of a SIP message contains a description of the session, encoded in some other protocol format. One such format is the Session Description Protocol (SDP) (RFC 2327 [1]). This SDP message (not shown in the Rosenberg, et. al. Standards Track [Page 13] RFC 3261 SIP: Session Initiation Protocol June 2002 example) is carried by the SIP message in a way that is analogous to a document attachment being carried by an email message, or a web page being carried in an HTTP message. Since the softphone does not know the location of Bob or the SIP server in the biloxi.com domain, the softphone sends the INVITE to the SIP server that serves Alice's domain, atlanta.com. The address of the atlanta.com SIP server could have been configured in Alice's softphone, or it could have been discovered by DHCP, for example. The atlanta.com SIP server is a type of SIP server known as a proxy server. A proxy server receives SIP requests and forwards them on