idnits 2.17.1 draft-ietf-behave-turn-05.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** It looks like you're using RFC 3978 boilerplate. You should update this to the boilerplate described in the IETF Trust License Policy document (see https://trustee.ietf.org/license-info), which is required now. -- Found old boilerplate from RFC 3978, Section 5.1 on line 21. -- Found old boilerplate from RFC 3978, Section 5.5, updated by RFC 4748 on line 1694. -- Found old boilerplate from RFC 3979, Section 5, paragraph 1 on line 1705. -- Found old boilerplate from RFC 3979, Section 5, paragraph 2 on line 1712. -- Found old boilerplate from RFC 3979, Section 5, paragraph 3 on line 1718. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- == There are 5 instances of lines with private range IPv4 addresses in the document. If these are generic example addresses, they should be changed to use any of the ranges defined in RFC 6890 (or successor): 192.0.2.x, 198.51.100.x or 203.0.113.x. -- The document has examples using IPv4 documentation addresses according to RFC6890, but does not use any IPv6 documentation addresses. Maybe there should be IPv6 examples, too? Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust Copyright Line does not match the current year -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (November 15, 2007) is 6006 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Looks like a reference, but probably isn't: '2' on line 259 -- Looks like a reference, but probably isn't: '5' on line 263 == Outdated reference: A later version (-18) exists of draft-ietf-behave-rfc3489bis-12 == Outdated reference: A later version (-07) exists of draft-ietf-behave-turn-tcp-00 Summary: 1 error (**), 0 flaws (~~), 4 warnings (==), 10 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Behave J. Rosenberg 3 Internet-Draft Cisco 4 Intended status: Standards Track R. Mahy 5 Expires: May 18, 2008 Plantronics 6 P. Matthews 7 Avaya 8 D. Wing 9 Cisco 10 November 15, 2007 12 Traversal Using Relays around NAT (TURN): Relay Extensions to Session 13 Traversal Utilities for NAT (STUN) 14 draft-ietf-behave-turn-05 16 Status of this Memo 18 By submitting this Internet-Draft, each author represents that any 19 applicable patent or other IPR claims of which he or she is aware 20 have been or will be disclosed, and any of which he or she becomes 21 aware will be disclosed, in accordance with Section 6 of BCP 79. 23 Internet-Drafts are working documents of the Internet Engineering 24 Task Force (IETF), its areas, and its working groups. Note that 25 other groups may also distribute working documents as Internet- 26 Drafts. 28 Internet-Drafts are draft documents valid for a maximum of six months 29 and may be updated, replaced, or obsoleted by other documents at any 30 time. It is inappropriate to use Internet-Drafts as reference 31 material or to cite them other than as "work in progress." 33 The list of current Internet-Drafts can be accessed at 34 http://www.ietf.org/ietf/1id-abstracts.txt. 36 The list of Internet-Draft Shadow Directories can be accessed at 37 http://www.ietf.org/shadow.html. 39 This Internet-Draft will expire on May 18, 2008. 41 Copyright Notice 43 Copyright (C) The IETF Trust (2007). 45 Abstract 47 This specification defines an extension of the Session Traversal 48 Utilities for NAT (STUN) Protocol for asking the STUN server to relay 49 packets towards a client. This extension, called Traversal Using 50 Relays around NAT (TURN), is useful for hosts behind address 51 dependent NATs. The extension purposefully restricts the ways in 52 which the relayed address can be used. In particular, it prevents 53 users from running general purpose servers on ports obtained from the 54 TURN server. 56 Table of Contents 58 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 59 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 60 3. Overview of Operation . . . . . . . . . . . . . . . . . . . . 5 61 3.1. Transports . . . . . . . . . . . . . . . . . . . . . . . . 8 62 3.2. About Tuples . . . . . . . . . . . . . . . . . . . . . . . 9 63 3.3. Keepalives . . . . . . . . . . . . . . . . . . . . . . . . 10 64 4. TURN Framing Mechanism . . . . . . . . . . . . . . . . . . . . 11 65 5. General Behavior . . . . . . . . . . . . . . . . . . . . . . . 11 66 6. Managing Allocations . . . . . . . . . . . . . . . . . . . . . 13 67 6.1. Client Behavior . . . . . . . . . . . . . . . . . . . . . 13 68 6.1.1. Initial Allocate Requests . . . . . . . . . . . . . . 13 69 6.1.2. Refresh Requests . . . . . . . . . . . . . . . . . . . 14 70 6.2. Server Behavior . . . . . . . . . . . . . . . . . . . . . 15 71 6.2.1. Initial Allocate Requests . . . . . . . . . . 15 72 6.2.2. Refresh Requests . . . . . . . . . . . . . . . . . . . 18 73 7. Sending and Receiving Data . . . . . . . . . . . . . . . . . . 19 74 7.1. Client Behavior . . . . . . . . . . . . . . . . . . . . . 19 75 7.1.1. Sending . . . . . . . . . . . . . . . . . . . . . . . 19 76 7.1.2. Receiving . . . . . . . . . . . . . . . . . . . . . . 20 77 7.2. Server Behavior . . . . . . . . . . . . . . . . . . . . . 20 78 7.2.1. Receiving Data from the Client . . . . . . . . . . . . 20 79 7.2.2. Receiving Data from Peers . . . . . . . . . . . . . . 22 80 7.2.3. Allocation Activity Timer and Permission Timeout . . . 23 81 8. New Attributes . . . . . . . . . . . . . . . . . . . . . . . . 23 82 8.1. CHANNEL-NUMBER . . . . . . . . . . . . . . . . . . . . . . 23 83 8.2. LIFETIME . . . . . . . . . . . . . . . . . . . . . . . . . 24 84 8.3. BANDWIDTH . . . . . . . . . . . . . . . . . . . . . . . . 24 85 8.4. PEER-ADDRESS . . . . . . . . . . . . . . . . . . . . . . . 24 86 8.5. DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 87 8.6. RELAY-ADDRESS . . . . . . . . . . . . . . . . . . . . . . 24 88 8.7. REQUESTED-PORT-PROPS . . . . . . . . . . . . . . . . . . . 24 89 8.8. REQUESTED-TRANSPORT . . . . . . . . . . . . . . . . . . . 25 90 8.9. REQUESTED-IP . . . . . . . . . . . . . . . . . . . . . . . 26 91 9. New Error Response Codes . . . . . . . . . . . . . . . . . . . 26 92 10. Client Discovery of TURN Servers . . . . . . . . . . . . . . . 27 93 11. Security Considerations . . . . . . . . . . . . . . . . . . . 27 94 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 95 12.1. New STUN Methods . . . . . . . . . . . . . . . . . . . . . 29 96 12.2. New STUN Attributes . . . . . . . . . . . . . . . . . . . 30 97 12.3. New STUN Response Codes . . . . . . . . . . . . . . . . . 30 98 13. IAB Considerations . . . . . . . . . . . . . . . . . . . . . . 30 99 14. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 100 15. Changes since version -04 . . . . . . . . . . . . . . . . . . 35 101 16. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 36 102 17. References . . . . . . . . . . . . . . . . . . . . . . . . . . 36 103 17.1. Normative References . . . . . . . . . . . . . . . . . . . 36 104 17.2. Informative References . . . . . . . . . . . . . . . . . . 36 105 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 37 106 Intellectual Property and Copyright Statements . . . . . . . . . . 39 108 1. Introduction 110 Session Traversal Utilities for NAT (STUN) 111 [I-D.ietf-behave-rfc3489bis] provides a suite of tools for 112 facilitating the traversal of NAT. Specifically, it defines the 113 Binding method, which is used by a client to determine its reflexive 114 transport address towards the STUN server. The reflexive transport 115 address can be used by the client for receiving packets from peers, 116 but only when the client is behind "good" NATs. In particular, if a 117 client is behind a NAT whose mapping behavior [RFC4787] is address or 118 address and port dependent (sometimes called "bad" NATs), the 119 reflexive transport address will not be usable for communicating with 120 a peer. 122 The only way to obtain a UDP transport address that can be used for 123 corresponding with a peer through such a NAT is to make use of a 124 relay. The relay sits on the public side of the NAT, and allocates 125 transport addresses to clients reaching it from behind the private 126 side of the NAT. These allocated transport addresses are from IP 127 addresses belonging to the relay. When the relay receives a packet 128 on one of these allocated addresses, the relay forwards it toward the 129 client. 131 This specification defines an extension to STUN, called TURN, that 132 allows a client to request an address on the TURN server, so that the 133 TURN server acts as a relay. This extension defines a handful of new 134 STUN methods. The Allocate method is the most fundamental component 135 of this set of extensions. It is used to provide the client with a 136 transport address that is relayed through the TURN server. A 137 transport address which relays through an intermediary is called a 138 relayed transport address. 140 Though a relayed transport address is highly likely to work when 141 corresponding with a peer, it comes at high cost to the provider of 142 the relay service. As a consequence, relayed transport addresses 143 should only be used as a last resort. Protocols using relayed 144 transport addresses should make use of mechanisms to dynamically 145 determine whether such an address is actually needed. One such 146 mechanism, defined for multimedia session establishment protocols 147 based on the offer/answer protocol in RFC 3264 [RFC3264], is 148 Interactive Connectivity Establishment (ICE) [I-D.ietf-mmusic-ice]. 150 Though originally invented for Voice over IP applications, TURN is 151 designed to be a general-purpose relay mechanism for NAT traversal. 153 2. Terminology 155 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 156 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 157 document are to be interpreted as described in RFC 2119 [RFC2119]. 159 Relayed Transport Address: A transport address that terminates on a 160 server, and is forwarded towards the client. The TURN Allocate 161 request can be used to obtain a relayed transport address, for 162 example. 164 TURN client: A STUN client that implements this specification. It 165 obtains a relayed transport address that it provides to a small 166 number of peers (usually one). 168 TURN server: A STUN server that implements this specification. It 169 relays data between a TURN client and its peer(s). 171 Peer: A node with which the TURN client wishes to communicate. The 172 TURN server relays traffic between the TURN client and its 173 peer(s). 175 Allocation: The IP address and port granted to a client through an 176 Allocate request, along with related state, such as permissions 177 and expiration timers. 179 5-tuple: A combination of the source IP address and port, 180 destination IP address and port, and transport protocol (UDP, or 181 TCP). It uniquely identifies a TCP connection or bi-directional 182 flow of UDP datagrams. 184 Permission: A record of an IP address and transport of a peer that 185 is permitted to send traffic to the TURN client. The TURN server 186 will only forward traffic to its client from remote peers that 187 match an existing permission. 189 3. Overview of Operation 191 In a typical configuration, a TURN client is connected to a private 192 network and through one or more NATs to the public Internet. On the 193 public Internet is a TURN server. Elsewhere in the Internet are one 194 or more peers that the TURN client wishes to communicate with. This 195 specification defines a framing mechanism and several new STUN 196 methods. Together, these add the ability for a STUN server to act as 197 a packet relay. 199 The framing mechanism serves two purposes. First, it contains a 200 length field that allow TURN nodes to find the boundaries between 201 chunks of application data when the communication with the TURN 202 server is over a stream-based transport such as TCP. Second, it 203 carries a channel number. Channel zero is used for TURN control 204 messages, while the other channel numbers are used for application 205 data traveling to or from various peers. The channel number allows 206 the client to know which peer sent data to it, and to specify which 207 peer is to be the recipient of data. Application data flowing on any 208 non-zero channel is unencapsulated, meaning that the application data 209 starts immediately after the framing header. The framing header is 210 just four bytes. This allows TURN to operate with minimal overhead, 211 which is important for the real-time protocols it is designed to 212 support. Application data can also flow in encapsulated format, 213 meaning that it is carried in certain TURN messages on channel 0. 214 Channel numbers are independent in each direction: for example, 215 channel 5 might indicate one peer in the client to server direction, 216 but a different peer in the server to client direction. 218 When the client wants to obtain a relayed transport address, the 219 client first sends an Allocate request to the server, which the 220 server authenticates. The server generates an Allocate response with 221 the allocated address, port, and target transport. All other STUN 222 messages defined by this specification happen in the context of an 223 allocation. 225 A successful Allocate transaction just reserves a transport address 226 on the TURN server. Data does not flow through an allocated 227 transport address until the TURN client asks the TURN server to open 228 a permission, which is done with a Send Indication. While the client 229 can request more than one permission per allocation, it needs to 230 request each permission explicitly and one at a time. This insures 231 that a client can't use a TURN server to run a traditional server, 232 and partially protects the client from DoS attacks. 234 Once a permission is open, the client can then receive data flowing 235 back from its peer. Initially this data is encapsulated in a Data 236 Indication. Since multiple permissions can be open simultaneously, 237 the Data Indication contains the PEER-ADDRESS attribute so the TURN 238 client knows which peer sent the data, and a CHANNEL-NUMBER attribute 239 so the client knows how the server will refer to traffic from this 240 peer when sent unencapsulated. Likewise when the client initially 241 sends to a new peer, it uses a Send Indication with the peer address 242 in the PEER-ADDRESS attribute, along with a channel number so the 243 server knows how the client will refer to unencapsulated data to this 244 peer. 246 TURN TURN peer 247 client server 248 |--- Allocate Req -->| | 249 |<-- Allocate Resp ---| | 250 | | | 251 |--- Send (chan 2) -->| data | 252 | |============>| 253 |<-- ChannelConfirm --| | 254 | | data | 255 | |<============| 256 |<-- Data (chan 5) ---| | 257 |--- ChannelConfirm ->| | 258 | | | 259 |--- [2] + data ----->| data | 260 | |============>| 261 | | data | 262 | |<============| 263 |<-- [5] + data ------| | 265 Figure 1: Example Usage of Channels 267 When the client and server communicate over UDP, data and control 268 messages can arrive out of order. For this reason, the client needs 269 to verify the server knows the client channel mapping before the 270 client sends unencapsulated, and the server needs to verify the 271 client knows the server channel mapping before the server sends 272 unencapsulated. When the client and server communicate over UDP, a 273 Channel Confirmation indication is sent after the Send (or Data) 274 indication so the client (or server) knows that it can send 275 unencapsulated. 277 Figure 1 demonstrates how this works. The client performs an 278 Allocate Request, and gets a response. It decides to send data to a 279 specific peer. Initially, it sends data to that peer using a TURN 280 Send indication on channel 0. That Send Indication tells the TURN 281 server that, once confirmed, the client will send data unencapsulated 282 to that peer on channel 2. Whenever the TURN server receives a Send 283 indication, it stores the mapping from channel number to peer, and 284 sends a ChannelConfirm indication (on channel 0). Once the 285 confirmation has been received by the client, the client can send 286 data to the peer on channel 2. Prior to receipt of the 287 ChannelConfirm, any other data the client wishes to send to the peer 288 is sent using Send indications, all of which indicate that channel 2 289 is to be used for unencapsulated data. The same procedure happens 290 from server to client; the TURN server initially sends data using a 291 Data indication on channel 0, and once confirmed with a 292 ChannelConfirm, it can send it unencapsulated on its selected channel 293 (channel 5 in the example). 295 Over a reliable transport, such as TCP, the confirmation step is not 296 needed so the Channel Confirmation indication is not used. Clients 297 can immediately send the next piece of data to the peer on the 298 requested channel. 300 Allocations can also request specific attributes such as the desired 301 Lifetime of the allocation and the maximum Bandwidth. Clients can 302 also request specific port assignment behavior, for example, a 303 specific port number, odd or even port numbers, or pairs of 304 sequential port numbers. 306 3.1. Transports 308 TURN clients can communicate with a TURN server using UDP, TCP, or 309 TLS over TCP. A TURN server can then relay traffic between a 310 reliable transport used between the client and server (TCP or TLS 311 over TCP), and UDP used from server to peer. When relaying data sent 312 from a stream-based protocol to a UDP peer, the TURN server emits 313 datagrams which are the same length as the length field in the TURN 314 framing or the length of the DATA attribute in a Send Indication. 315 Likewise, when a UDP datagram is received by the TURN server and 316 relayed to the client over a stream-based transport, the length of 317 the datagram is the length of the TURN framing or Data Indication's 318 DATA attribute. 320 The following table shows the possible combinations of transport 321 protocols from client to server and from server to peer: 323 +-----------------------+---------------------+ 324 | client to TURN server | TURN server to peer | 325 +-----------------------+---------------------+ 326 | UDP | UDP | 327 | TCP | UDP | 328 | TLS | UDP | 329 +-----------------------+---------------------+ 331 For TURN clients, using TLS over TCP provides two benefits. When 332 using TLS, the client can be assured that the address of the client's 333 peers are not visible to an attacker except by traffic analysis 334 downstream of the TURN server. Second, the client may be able to 335 communicate with TURN servers using TLS when it would not be able to 336 communicate with the same server using TCP or UDP, due to the 337 configuration of a firewall between the TURN client and its server. 338 TLS between the client and TURN server in this case just facilitates 339 traversal. 341 In addition, an extension to TURN is planned to add support for TCP 342 allocations [I-D.ietf-behave-turn-tcp]. 344 3.2. About Tuples 346 To relay data to and from the correct location, the TURN server 347 maintains an association between the 5-tuple used to communicate with 348 the client and the 5-tuple used to communicate with each of the 349 client's peers. The 5-tuple on the client side will consist of the 350 client's reflexive address -- the apparent source address and port of 351 the client (typically as rewritten by the last NAT)--and the 352 destination address and port used by the TURN server. The figure 353 below (Figure 2) shows a typical topology. In this diagram, the 354 client 5-tuple is for a UDP flow between 192.0.2.1:7000 and 355 192.0.2.15:3490. The 5-tuple between the TURN server and Peer B is 356 for a UDP flow between 192.0.2.15:9000 (the TURN allocated address) 357 and 192.0.2.210:18200. 359 While the terminology used in this document refers to 5-tuples, 360 the TURN server can store whatever identifier it likes that yields 361 identical results. Specifically, many implementations may use a 362 file-descriptor in place of a 5-tuple to represent a TCP 363 connection. 365 +---------+ 366 | | 367 | | 368 / | Peer A | 369 Client's TURN // | | 370 Host Server / | | 371 Address Address // +---------+ 372 10.1.1.2:17240 192.0.2.15:3490 / 192.0.2.180:16400 373 | | // 374 | +-+ | / 375 | | | | / 376 v | | | // 192.0.2.210:18200 377 +---------+ | | |+---------+ / +---------+ 378 | | |N| || | // | | 379 | TURN | | | v| TURN |/ | | 380 | Client |----|A|----------| Server |------------------| Peer B | 381 | | | |^ | |^ ^| | 382 | | |T|| | || || | 383 +---------+ | || +---------+| |+---------+ 384 | || | | 385 | || | | 386 +-+| | | 387 | | | 388 | 389 Client's TURN Peer B 390 Reflexive Allocated Transport 391 Address Address Address 392 192.0.2.1:7000 192.0.2.15:9000 192.0.2.210:18200 394 Figure 2 396 3.3. Keepalives 398 Since the main purpose of STUN and TURN is to traverse NATs, it is 399 natural to consider which elements are responsible for generating 400 sufficient periodic traffic to insure that NAT bindings stay alive. 401 TURN clients need to send data frequently enough to keep both NAT 402 bindings and the TURN server permissions fresh. Like NAT bindings, 403 the TURN server permissions are refreshed by ordinary data traffic 404 relayed from the client to the peer. Unlike permissions, allocations 405 on the TURN server have an explicit expiration time and need to be 406 refreshed explicitly by the client with a TURN Refresh request. When 407 an allocation expires, all permissions associated with that 408 allocation are automatically deleted. 410 4. TURN Framing Mechanism 412 All TURN control messages and all application data sent between the 413 client and the server MUST start with the TURN framing header. This 414 header is used for two purposes: indicating the channel number, and 415 for framing. 417 TURN uses a channel number to distinguish control traffic from data, 418 and to distinguish among multiple peers using the same allocation. 419 Channel number zero is reserved for TURN control messages. All TURN 420 requests, responses and indications between the client and server 421 MUST be sent on channel 0, and MUST NOT be sent on any other channel. 422 Channel 0xFFFF is reserved for future use and MUST NOT be used by 423 clients or servers compliant to this specification. Other channel 424 numbers are assigned and communicated as described in Section 7. 425 Because the framing is always used, TURN needs to run on a separate 426 port number from unframed STUN requests. 428 Over stream-based transports, the TURN client and server also need to 429 include an explicit length so that the TURN server can perform 430 conversion from streams to datagrams and vice versa. TURN framing 431 has a 2 octet channel number and a 2 octet length field. Over 432 stream-based transports, the length field counts the number of octets 433 immediately after the length field itself. Over UDP the length is 434 always set to zero. 436 0 1 2 3 437 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 438 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 439 | Channel Number | Length | 440 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 442 Channel numbers are always defined within a particular allocation. 443 If a client has multiple allocations on a TURN server, there is no 444 relationship whatsoever between the channel numbers in each 445 allocation. Once created, a channel number persists for the lifetime 446 of the allocation. There is no way to explicitly remove a channel. 447 Consequently, a client which obtains an allocation with the intent of 448 holding it for extremely long periods, possibly for communication 449 with many different peers over time, may eventually exhaust the set 450 of channels. In that case, the client will need to obtain a new 451 allocation. 453 5. General Behavior 455 After the initial Allocate transaction, all subsequent TURN 456 transactions need to be sent in the context of a valid allocation. 458 The source and destination IP address and ports for these TURN 459 messages MUST match the internal 5-tuple of an existing allocation. 460 These are processed using the general server procedures in 461 [I-D.ietf-behave-rfc3489bis] with a few important additions. For 462 requests (in this specification, the only subsequent request possible 463 is a Refresh request), if there is no matching allocation, the server 464 MUST generate a 437 (Allocation Mismatch) error response. For 465 indications, if there is no matching allocation, the indication is 466 silently discarded. An Allocate request MUST NOT be sent by a client 467 within the context of an existing allocation. Such a request MUST be 468 rejected by the server with a 437 (Allocation Mismatch) error 469 response. 471 A subsequent request MUST be authenticated using the same username 472 and realm as the one used in the Allocate request that created the 473 allocation. If the request was authenticated but not with the 474 matching credential, the server MUST reject the request with a 401 475 (Unauthorized) error response. 477 When a server returns an error response, it MAY include an ALTERNATE- 478 SERVER attribute if it has positive knowledge that the problem 479 reported in the error response will not be a problem on the alternate 480 server. For example, a 443 response (Invalid IP Address) with an 481 ALTERNATE-SERVER means that the other server is responsible for that 482 IP address. A 442 (Unsupported Transport Protocol) with this 483 attribute means that the other server is known to support that 484 transport protocol. A 507 (Insufficient Capacity) means that the 485 other server is known to have sufficient capacity. Using the 486 ALTERNATE-SERVER mechanism in the 507 (Insufficient Capacity) 487 response can only be done if the rejecting server has definitive 488 knowledge of available capacity on the target. This will require 489 some kind of state sharing mechanism between TURN servers, which is 490 beyond the scope of this specification. If a TURN server attempts to 491 redirect to another server without knowledge of available capacity, 492 it is possible that all servers are in a congested state, resulting 493 in series of rejections that only serve to further increase the load 494 on the system. This can cause congestion collapse. 496 If a client sends a request to a server and gets a 500 class error 497 response without an ALTERNATE-SERVER, or the transaction times out 498 without a response, and the client was utilizing the SRV procedures 499 of [I-D.ietf-behave-rfc3489bis] to contact the server, the client 500 SHOULD try another server based on those procedures. However, the 501 client SHOULD cache the fact that the request to this server failed, 502 and not retry that server again for a configurable period of time. 503 Five minutes is RECOMMENDED. 505 TURN clients and servers MUST NOT include the FINGERPRINT attribute 506 in any of the methods defined in this document. 508 6. Managing Allocations 510 Communications between a TURN client and a TURN server on a new flow 511 begin with an Allocate transaction. All subsequent transactions 512 happen in the context of that allocation. The client refreshes 513 allocations and deallocates them using a Refresh transaction. 515 6.1. Client Behavior 517 6.1.1. Initial Allocate Requests 519 When a client wishes to obtain a transport address, it sends an 520 Allocate request to the server. This request is constructed and sent 521 using the general procedures defined in [I-D.ietf-behave-rfc3489bis]. 522 Clients MUST implement the long term credential mechanism defined in 523 [I-D.ietf-behave-rfc3489bis], and be prepared for the server to use 524 it. 526 The client SHOULD include a BANDWIDTH attribute, which indicates the 527 maximum bandwidth that will be used with this binding. If the 528 maximum is unknown, the attribute is not included in the request. 530 OPEN ISSUE: Bandwidth is very much underspecified. Is anyone 531 actually using it for capacity planning? If not we should remove. 533 The client MAY request a particular lifetime for the allocation by 534 including it in the LIFETIME attribute in the request. 536 The client MUST include a REQUESTED-TRANSPORT attribute. In this 537 specification, the REQUESTED-TRANSPORT will always be UDP. This 538 attribute is included to allow for future extensions to TURN. 540 The client MAY include a REQUESTED-PORT-PROPS or REQUESTED-IP 541 attribute in the request to obtain specific types of transport 542 addresses. Whether these are needed depends on the application using 543 the TURN server. As an example, the Real Time Transport Protocol 544 (RTP) [RFC3550] requires that RTP and RTCP ports be an adjacent pair, 545 even and odd respectively, for compatibility with a previous version 546 of that specification. The REQUESTED-PORT-PROPS attribute allows the 547 client to ask the relay for those properties. 549 Processing of the response follows the general procedures of 550 [I-D.ietf-behave-rfc3489bis]. A successful response will include 551 both a RELAY-ADDRESS and an XOR-MAPPED-ADDRESS attribute, providing 552 both a relayed transport address and a reflexive transport address, 553 respectively, to the client. The value of the LIFETIME attribute in 554 the response indicates the amount of time after which the server will 555 expire the allocation, if not refreshed with a Refresh request. The 556 server will allow the user to send and receive at least the amount of 557 data indicated in the BANDWIDTH attribute per allocation. (At its 558 discretion the server can optionally discard UDP data above this 559 threshold.) 561 If the response is an error response and contains a 442, 443 or 444 562 error code, the client knows that its requested properties could not 563 be met. The client MAY retry with different properties, with the 564 same properties (in a hope that something has changed on the server), 565 or give up, depending on the needs of the application. However, if 566 the client retries, it SHOULD wait 500ms, and if the request fails 567 again, wait 1 second, then 2 seconds, and so on, exponentially 568 backing off. 570 6.1.2. Refresh Requests 572 Before 3/4 of the lifetime of the allocation has passed (the lifetime 573 of the allocation is conveyed in the LIFETIME attribute of the 574 Allocate Response), the client SHOULD refresh the allocation with a 575 Refresh transaction if it wishes to keep the allocation. 577 To perform a refresh, the client generates a Refresh Request. The 578 client MUST use the same username, realm and password for the Refresh 579 request as it used in its initial Allocate Request. The Refresh 580 request MAY contain a proposed LIFETIME attribute. The client MAY 581 include a BANDWIDTH attribute if it wishes to request more or less 582 bandwidth than in the original request. If absent, it indicates no 583 change in the requested bandwidth from the Allocate request. The 584 client MUST NOT include a REQUESTED-IP, REQUESTED-TRANSPORT, or 585 REQUESTED-PORT-PROPS attribute in the Refresh request. 587 In a successful response, the LIFETIME attribute indicates the amount 588 of additional time (the number of seconds after the response is 589 received) that the allocation will live without being refreshed. A 590 successful response will also contain a BANDWIDTH attribute, 591 indicating the bandwidth the server is allowing for this allocation. 592 Note that an error response does not imply that the allocation has 593 expired, just that the refresh has failed. 595 If a client no longer needs an allocation, it SHOULD perform an 596 explicit deallocation. If the client wishes to explicitly remove the 597 allocation because it no longer needs it, it sends a Refresh request, 598 but sets the LIFETIME attribute to zero. This will cause the server 599 to remove the allocation, and all associated permissions and channel 600 numbers. For connection-oriented transports such as TCP, the client 601 can also remove the allocation (and all associated bindings) by 602 closing the relevant connection with the TURN server. 604 6.2. Server Behavior 606 The server first processes the request according to the base protocol 607 procedures in [I-D.ietf-behave-rfc3489bis], extended with the 608 procedures for the long-term credential mechanism. 610 6.2.1. Initial Allocate Requests 612 When the server receives an Allocate request, the server attempts to 613 allocate a relayed transport address. It first looks for the 614 BANDWIDTH attribute in the request. If present, the server 615 determines whether or not it has sufficient capacity to handle a 616 binding that will generate the requested bandwidth. 618 If it does, the server attempts to allocate a transport address for 619 the client. The Allocate Request can contain several additional 620 attributes that allow the client to request specific characteristics 621 of the transport address. 623 6.2.1.1. REQUESTED-TRANSPORT 625 First, the server checks for the REQUESTED-TRANSPORT attribute. This 626 indicates the transport protocol requested by the client. This 627 specification defines a value for UDP only, but support for TCP 628 allocations is planned in [I-D.ietf-behave-turn-tcp]. 630 As a consequence of the REQUESTED-TRANSPORT attribute, it is 631 possible for a client to connect to the server over TCP or TLS 632 over TCP and request a UDP transport address. In this case, the 633 server will relay data between the transports. 635 If the requested transport is supported, the server allocates a port 636 using the requested transport protocol. If the REQUESTED-TRANSPORT 637 attribute contains a value of the transport protocol unknown to the 638 server, or known to the server but not supported by the server in the 639 context of this request, the server MUST reject the request and 640 include a 442 (Unsupported Transport Protocol) in the response. If 641 the request did not contain a REQUESTED-TRANSPORT attribute, the 642 server MUST use the same transport protocol as the request arrived 643 on. 645 6.2.1.2. REQUESTED-IP 647 Next, the server checks for the REQUESTED-IP attribute. If present, 648 it indicates a specific IP address from which the client would like 649 its transport address allocated. (The client could do this if it 650 requesting the second address in a specific port pair). If this IP 651 address is not a valid one for allocations on the server, the server 652 MUST reject the request and include a 443 (Invalid IP Address) error 653 code in the response, or else redirect the request to a server that 654 is known to support this IP address. If the IP address is one that 655 is valid for allocations (presumably, the server is configured to 656 know the set of IP addresses from which it performs allocations), the 657 server MUST provide an allocation from that IP address. If the 658 attribute is not present, the selection of an IP address is at the 659 discretion of the server. 661 6.2.1.3. REQUESTED-PORT-PROPS 663 Finally, the server checks for the REQUESTED-PORT-PROPS attribute. 664 If present, it indicates specific port properties desired by the 665 client. This attribute is split into two portions: one portion for 666 port behavior and the other for requested port alignment (whether the 667 allocated port is odd, even, reserved as a pair, or at the discretion 668 of the server). 670 If the port behavior requested is for a Specific Port, the server 671 MUST attempt to allocate that specific port for the client. If the 672 specific port is not available (in use or reserved), the server MUST 673 reject the request with a 444 (Invalid Port) response. For example, 674 the STUN server could reject a request for a Specific Port because 675 the port is temporarily reserved as part of an adjacent pair of 676 ports, or because the requested port is a well-known port (1-1023). 678 If the client requests "even" port alignment, the server MUST attempt 679 to allocate an even port for the client. If an even port cannot be 680 obtained, the server MUST reject the request with a 444 (Invalid 681 Port) response or redirect to an alternate server. If the client 682 requests odd port alignment, the server MUST attempt to allocate an 683 odd port for the client. If an odd port cannot be obtained, the 684 server MUST reject the request with a 444 (Invalid Port) response or 685 redirect to an alternate server. Finally, the "Even port with hold 686 of the next higher port" alignment is similar to requesting an even 687 port. It is a request for an even port, and MUST be rejected by the 688 server if an even port cannot be provided, or redirected to an 689 alternate server. However, it is also a hint from the client that 690 the client will request the next higher port with a separate Allocate 691 request. As such, it is a request for the server to allocate an even 692 port whose next higher port is also available, and furthermore, a 693 request for the server to not allocate that one higher port to any 694 other request except for one that asks for that port explicitly. The 695 server can honor this request for adjacency at its discretion. The 696 only constraint is that the allocated port has to be even. 698 Port alignment requests exist for compatibility with 699 implementations of RTP which predate RFC 3550. These 700 implementations use the port numbering conventions in (now 701 obsolete) RFC 1889. 703 6.2.1.4. Creating the Allocation 705 If any of the requested or desired constraints cannot be met, whether 706 it be bandwidth, transport protocol, IP address or port, instead of 707 rejecting the request, the server can alternately redirect the client 708 to a different server that may be able to fulfill the request. This 709 is accomplished using the 300 error response and ALTERNATE-SERVER 710 attribute. If the server does not redirect and cannot service the 711 request because the server has reached capacity, it sends a 507 712 (Insufficient Capacity) response. The server can also reject the 713 request with a 486 (Allocation Quota Reached) if the user or client 714 is not authorized to request additional allocations. 716 The server SHOULD only allocate ports in the range 1024-65535. This 717 is one of several ways to prohibit relayed transport addresses from 718 being used to attempt to run standard services. 720 Once a port is allocated, the server associates the allocation with 721 the 5-tuple used to communicate between the client and the server. 722 For TCP, this amounts to associating the TCP connection from the TURN 723 client with the allocated transport address. 725 The new allocation MUST also be associated with the username, 726 password and realm used to authenticate the request. These 727 credentials are used in all subsequent requests to ensure that only 728 the same client can use or modify the allocation it was given. 730 In addition, the allocation created by the server is associated with 731 a set of permissions. Each permission is a specific IP address 732 identifying an external client. Initially, this list is null. 734 If the LIFETIME attribute was present in the request, and the value 735 is larger than the maximum duration the server is willing to use for 736 the lifetime of the allocation, the server MAY lower it to that 737 maximum. However, the server MUST NOT increase the duration 738 requested in the LIFETIME attribute. If there was no LIFETIME 739 attribute, the server may choose a duration at its discretion. Ten 740 minutes is RECOMMENDED. In either case, the resulting duration is 741 added to the current time, and a timer, called the allocation 742 expiration timer, is set to fire at or after that time. 743 Section 7.2.3 discusses behavior when the timer fires. Note that the 744 LIFETIME attribute an Allocate request can be zero, though this is 745 effectively a no-op, since it will create and destroy the allocation 746 in one transaction. 748 6.2.1.5. Sending the Allocate Response 750 Once the port has been obtained and the allocation expiration timer 751 has been started, the server generates an Allocate Response using the 752 general procedures defined in [I-D.ietf-behave-rfc3489bis], including 753 the ones for long term authentication. The transport address 754 allocated to the client MUST be included in the RELAY-ADDRESS 755 attribute in the response. In addition, this response MUST contain 756 the XOR-MAPPED-ADDRESS attribute. This allows the client to 757 determine its reflexive transport address in addition to a relayed 758 transport address, from the same Allocate request. 760 The server MUST add a LIFETIME attribute to the Allocate Response. 761 This attribute contains the duration, in seconds, of the allocation 762 expiration timer associated with this allocation. 764 The server MUST add a BANDWIDTH attribute to the Allocate Response. 765 This MUST be equal to the attribute from the request, if one was 766 present. Otherwise, it indicates a per-allocation limit that the 767 server is placing on the bandwidth usage on each binding. Such 768 limits are needed to prevent against denial-of-service attacks (See 769 Section 11). 771 6.2.2. Refresh Requests 773 A Refresh request is processed using the general server and long term 774 authentication procedures in [I-D.ietf-behave-rfc3489bis]. It is 775 used to refresh and extend an allocation, or to cause an immediate 776 deallocation. It is processed as follows. 778 First, the request MUST be authenticated using the same shared secret 779 as the one associated with the allocation. If the request was 780 authenticated but not with such a matching credential, the server 781 MUST generate a Refresh Error Response with a 401 response. 783 If the Refresh request contains a BANDWIDTH attribute, the server 784 checks that it can relay the requested volume of traffic. 786 Finally, a Refresh Request will set a new allocation expiration timer 787 for the allocation, effectively canceling the previous allocation 788 expiration timer. As with an Allocate request, the server can offer 789 a shorter allocation lifetime, but never a longer one. 791 A success Refresh response MUST contain a LIFETIME attribute and a 792 BANDWIDTH attribute. 794 7. Sending and Receiving Data 796 As described in Section 4, TURN allows a client to send and receive 797 data without utilizing TURN Send and Data indications, by sending and 798 receiving them on channels. Before sending client-to-peer or peer- 799 to-client data for a new peer, a TURN client or server needs to 800 assign a channel number that corresponds to that remote peer. Once a 801 channel number is assigned, it remains assigned through the duration 802 of the allocation. It cannot be unassigned or reassigned to a 803 different peer. 805 7.1. Client Behavior 807 7.1.1. Sending 809 When the client wants to forward data to a peer, it checks if it has 810 assigned a channel number for communications with this peer (as 811 identified by its IP address and port) over this allocation: 813 o If one has not been assigned, the client assigns one of its own 814 choosing. This channel number MUST be one that is currently 815 unassigned by the client for this allocation. It MUST be between 816 1 and 65534. It is RECOMMENDED that the client choose one of the 817 unassigned numbers randomly, rather than sequentially. The state 818 of the channel is set to unconfirmed. 820 o If one has been assigned, that channel MUST be selected. 822 Next, the client checks if the channel number has been confirmed by 823 the server. If the channel number has been confirmed, the client 824 simply sends the data to the TURN server with the appropriate channel 825 number in the TURN framing. 827 If the channel number has not been confirmed, the client creates a 828 Send indication. It places the selected channel number in a CHANNEL- 829 NUMBER attribute, the peer IP address and port in a PEER-ADDRESS 830 attribute, and puts the data to be sent in a DATA attribute. (If the 831 client just wishes to create a permission, it can omit the DATA 832 attribute.) If the Send indication is sent over a reliable transport 833 (ex: TCP), the client marks that the channel number as confirmed. 834 When the client receives a ChannelConfirmation Indication, and the 835 channel number, IP address and port match the channel number assigned 836 to that peer, the client marks that the channel number is confirmed. 838 Since Send is an Indication, it generates no response. The client 839 must rely on application layer mechanisms to determine if the data 840 was received by the peer. A ChannelConfirmation Indication just 841 means that some Send indication was received by the TURN server. It 842 does not mean that a specific Send indication was received by the 843 peer. 845 Note that Send Indications are not authenticated and do not 846 contain a MESSAGE-INTEGRITY attribute. Just like non-relayed data 847 sent over UDP or TCP, the authenticity and integrity of this data 848 can only be assured using security mechanisms at higher layers. 850 7.1.2. Receiving 852 When the client receives a Data indication, it: 854 o records the channel number used by the server (from the CHANNEL- 855 NUMBER attribute) and associates it with the IP address and port 856 in the PEER-ADDRESS attribute, which identify the peer that sent 857 the data. The resulting mapping from channel number to transport 858 address MUST be stored by the client for the duration of the 859 allocation. 861 o delivers the contents of the DATA attribute to the client 862 application as if it was received from the peer's IP address and 863 port. 865 o If the Data indication was received over UDP, the client MUST 866 confirm the channel used by the server, by sending a 867 ChannelConfirmation Indication to the server. This indication 868 MUST contain the same PEER-ADDRESS and CHANNEL-NUMBER attributes 869 included in the Data indication. This indication is sent to the 870 server on channel 0 using the 5-tuple associated with this 871 allocation. Note that, due to round trip delays, a client may 872 receive several Data indications with the same channel number for 873 the same remote peer. It MUST process each as defined here, 874 resulting in several ChannelConfirmation indications. 876 When the client receives unencapsulated data, it checks the received 877 channel number. If the client has a mapping associated with the 878 server channel number it delivers the data to the client application 879 as if it was received directly from that peer. Otherwise, it 880 silently discards the data. 882 7.2. Server Behavior 884 7.2.1. Receiving Data from the Client 886 When the server receives a Data indication from the client, it: 888 o records the channel number used by the client (from the CHANNEL- 889 NUMBER attribute) and associates it with the IP address and port 890 in the PEER-ADDRESS attribute, which identify the peer to which 891 the data is to be sent. The resulting mapping from channel number 892 to peer transport address MUST be stored by the server for the 893 duration of the allocation. 895 o sends the contents of the DATA attribute in a UDP datagram, 896 sending it to the PEER-ADDRESS and sending from the allocated 897 transport address. 899 o if one doesn't exist, creates a permission for the IP address from 900 the PEER-ADDRESS (the port is ignored), and attaches the 901 permission to the allocation 903 o checks if a timer has been set for this permission. If none has 904 been started, the server starts one. It is RECOMMENDED that it 905 have a value of sixty seconds. If the timer is already running, 906 it MUST be reset. 908 o If the Send indication was received over UDP, the server MUST 909 confirm the channel used by the client, by sending a 910 ChannelConfirmation Indication to the client. This indication 911 MUST contain the same PEER-ADDRESS and CHANNEL-NUMBER attributes 912 included in the Send indication. This indication is sent to the 913 client on channel 0 using the 5-tuple associated with this 914 allocation. Note that, due to round trip delays, a server may 915 receive several Send indications with the same channel number for 916 the same remote peer. It MUST process each as defined here, 917 resulting in several ChannelConfirmation indications. 919 When the server receives unencapsulated data, it checks the received 920 channel number: 922 o If the server has a mapping associated with the client channel 923 number it: 925 * sends a UDP datagram to the peer using the transport address 926 from the mapping, and sends from the allocated transport 927 address. 929 * checks if a permission activity timer is running for the 930 destination IP address of the peer. If one is not running, the 931 server starts one. It is RECOMMENDED that it have a value of 932 sixty seconds. If the timer is already running, it MUST be 933 reset. 935 o If the server has no mapping, it silently discards the data. 937 7.2.2. Receiving Data from Peers 939 If a server receives a UDP packet on an allocated UDP transport 940 address, it checks the permissions associated with that allocation. 941 If the source IP address of the UDP packet matches one of the 942 permissions (the source port is not used), the UDP packet is 943 accepted. Otherwise, it is discarded. If the packet is accepted, it 944 is forwarded to the client as described below. 946 The server checks if it has assigned a channel number for 947 communications from this peer (as identified by its IP address and 948 port) over this allocation: 950 o If one has not been assigned, the client assigns one of its own 951 choosing. This channel number MUST be one that is currently 952 unassigned by the server for this allocation. It MUST be between 953 1 and 65534. It is RECOMMENDED that the server choose one of the 954 unassigned numbers randomly, rather than sequentially. The state 955 of the channel is set to unconfirmed. 957 o If one has been assigned, that channel MUST be selected. 959 Note that data from peers does not reset the permission activity 960 timer. 962 Next, the server checks if the channel number has been confirmed by 963 the client. If the channel number has been confirmed, the server 964 simply sends the data to the client with the appropriate channel 965 number in the TURN framing. 967 If the channel number has not been confirmed, the server creates a 968 Data indication. It places the selected channel number in a CHANNEL- 969 NUMBER attribute, the peer IP address and port in a PEER-ADDRESS 970 attribute, and puts the data to be sent in a DATA attribute. If the 971 Data indication is sent over a reliable transport (ex: TCP), the 972 server marks that the channel number as confirmed. When the server 973 receives a ChannelConfirmation Indication, and the channel number, IP 974 address and port match the channel number assigned to that peer, the 975 server marks that the channel number is confirmed. 977 Since Data is an Indication, it generates no response. The server 978 does not provide reliability for the data. When sending over a 979 reliable transport to the client, if the server is unable to send the 980 data received from the peer (for example, because the TCP connection 981 cannot accept any more messages right now), it can silently discards 982 UDP data received from the peer. 984 Note that Send Indications are not authenticated and do not 985 contain a MESSAGE-INTEGRITY attribute. Just like non-relayed data 986 sent over UDP or TCP, the authenticity and integrity of this data 987 can only be assured using security mechanisms at higher layers. 989 7.2.3. Allocation Activity Timer and Permission Timeout 991 When the allocation activity timer expires, the server MUST destroy 992 the allocation. This involves freeing the allocated transport 993 address, deleting permissions and channel numbers, and removing other 994 state associated with the allocation. 996 When a permission times out, the TURN server MUST NOT forward a 997 packet from that TURN peer to the TURN client. 999 8. New Attributes 1001 This STUN extension defines the following new attributes: 1003 0x000C: CHANNEL-NUMBER 1004 0x000D: LIFETIME 1005 0x0010: BANDWIDTH 1006 0x0012: PEER-ADDRESS 1007 0x0013: DATA 1008 0x0016: RELAY-ADDRESS 1009 0x0018: REQUESTED-PORT-PROPS 1010 0x0019: REQUESTED-TRANSPORT 1011 0x0022: REQUESTED-IP 1013 8.1. CHANNEL-NUMBER 1015 The channel number attribute represents the channel number assigned 1016 by the sender, that corresponds with the peer specified in the PEER- 1017 ADDRESS attribute. It is a 16-bit unsigned integer, plus two octets 1018 of padding which MUST be set to zero. 1020 0 1 2 3 1021 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1022 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1023 | Channel Number | Reserved = 0 | 1024 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1026 8.2. LIFETIME 1028 The lifetime attribute represents the duration for which the server 1029 will maintain an allocation in the absence of a refresh. It is a 32 1030 bit unsigned integral value representing the number of seconds 1031 remaining until expiration. 1033 8.3. BANDWIDTH 1035 The bandwidth attribute represents the peak bandwidth, measured in 1036 kilobits per second, that the client expects to use on the allocation 1037 in each direction. 1039 8.4. PEER-ADDRESS 1041 The PEER-ADDRESS specifies the address and port of the peer as seen 1042 from the TURN server. It is encoded in the same way as XOR-MAPPED- 1043 ADDRESS. 1045 8.5. DATA 1047 The DATA attribute is present in most Send Indications and Data 1048 Indications. It contains raw payload data that is to be sent (in the 1049 case of a Send Request) or was received (in the case of a Data 1050 Indication). 1052 8.6. RELAY-ADDRESS 1054 The RELAY-ADDRESS is present in Allocate responses. It specifies the 1055 address and port that the server allocated to the client. It is 1056 encoded in the same way as XOR-MAPPED-ADDRESS. 1058 8.7. REQUESTED-PORT-PROPS 1060 This attribute allows the client to request certain properties for 1061 the port that is allocated by the server. The attribute can be used 1062 with any transport protocol that has the notion of a 16 bit port 1063 space (including TCP and UDP). The attribute is 32 bits long. Its 1064 format is: 1066 0 1 2 3 1067 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 1068 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1069 | Reserved = 0 | A | Specific Port Number | 1070 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1072 The two bits labeled A in the diagram above are for requested port 1073 alignment and have the following meaning: 1075 00 no specific port alignment 1076 01 odd port number 1077 10 even port number 1078 11 even port number; reserve next higher port 1080 If the value of the A field is 00 (no specific port alignment), then 1081 the Specific Port Number field can either be 0 or some non-zero port 1082 number. If the Specific Port Number field is 0, then the client is 1083 not putting any restrictions on the port number it would like 1084 allocated. If the Specific Port Number is some non-zero port number, 1085 then the client is requesting that the server allocate the specified 1086 port. 1088 If the value of the A field is 01 (odd port number), then the 1089 Specific Port Number field must be zero, and the client is requesting 1090 the server allocate an odd-numbered port. 1092 If the value of the A field is 10 (even port number), then the 1093 Specific Port number field must be zero, and the client is requesting 1094 the server allocate an even-numbered port. 1096 If the value of the A field is 11 (even port number; reserve next 1097 higher port), then the Specific Port Number field must be zero, and 1098 the client is requesting the server allocate an even-numbered port. 1099 In addition, the client is requesting the server reserve the next 1100 higher port (i.e., N+1 if the server allocates port N), and should 1101 only allocate the N+1 port number if it is explicit requested (with a 1102 subsequent request specifying that exact port number) 1104 In all cases, if a port with the requested properties cannot be 1105 allocated, the server responds with a error response with an error 1106 code of 444 (Invalid Port). 1108 8.8. REQUESTED-TRANSPORT 1110 This attribute is used by the client to request a specific transport 1111 protocol for the allocated transport address. It is a 32 bit 1112 unsigned integer. Its values are: 1114 0x0000 0000: UDP 1115 0x0000 0001: Reserved for TCP 1117 If an Allocate request is sent over TCP and requests a UDP 1118 allocation, or an Allocate request is sent over TLS over TCP and 1119 requests a UDP allocation, the server will relay data between the two 1120 transports. 1122 Extensions to TURN can define additional transport protocols in an 1123 IETF-consensus RFC. 1125 8.9. REQUESTED-IP 1127 The REQUESTED-IP attribute is used by the client to request that a 1128 specific IP address be allocated to it. This attribute is needed 1129 since it is anticipated that TURN servers will be multi-homed so as 1130 to be able to allocate more than 64k transport addresses. As a 1131 consequence, a client needing a second transport address on the same 1132 interface as a previous one can make that request. 1134 The format of this attribute is identical to XOR-MAPPED-ADDRESS. 1135 However, the port component of the attribute is ignored by the 1136 server. If a client wishes to request a specific IP address and 1137 port, it uses both the REQUESTED-IP and REQUESTED-PORT-PROPS 1138 attributes. 1140 9. New Error Response Codes 1142 This document defines the following new Error response codes: 1144 437 (Allocation Mismatch): A request was received by the server that 1145 requires an allocation to be in place, but there is none, or a 1146 request was received which requires no allocation, but there is 1147 one. 1149 442 (Unsupported Transport Protocol): The Allocate request asked for 1150 a transport protocol to be allocated that is not supported by the 1151 server. If the server is aware of another server that supports 1152 the requested protocol, it SHOULD include the other server's 1153 address in an ALTERNATE-SERVER attribute in the error response. 1155 443 (Invalid IP Address): The Allocate request asked for a transport 1156 address to be allocated from a specific IP address that is not 1157 valid on the server. 1159 444 (Invalid Port): The Allocate request asked for a port to be 1160 allocated that is not available on the server. 1162 486 (Allocation Quota Reached): The user or client is not authorized 1163 to request additional allocations. 1165 507 (Insufficient Capacity): The server cannot allocate a new port 1166 for this client as it has exhausted its relay capacity. 1168 10. Client Discovery of TURN Servers 1170 The STUN extensions introduced by TURN differ from the binding 1171 requests defined in [I-D.ietf-behave-rfc3489bis] in that they are 1172 sent with additional framing and demand substantial resources from 1173 the TURN server. In addition, it seems likely that administrators 1174 might want to block connections from clients to the TURN server for 1175 relaying separately from connections for the purposes of binding 1176 discovery. As a consequence, TURN runs on a separate port from STUN. 1177 The client discovers the address and port of the TURN server using 1178 the same DNS procedures defined in [I-D.ietf-behave-rfc3489bis], but 1179 using an SRV service name of "turn" (or "turns" for TURN over TLS) 1180 instead of just "stun". 1182 For example, to find TURN servers in the example.com domain, the TURN 1183 client performs a lookup for '_turn._udp.example.com', 1184 '_turn._tcp.example.com', and '_turns._tcp.example.com' if the STUN 1185 client wants to communicate with the TURN server using UDP, TCP, or 1186 TLS over TCP, respectively. 1188 11. Security Considerations 1190 TURN servers allocate bandwidth and port resources to clients, in 1191 contrast to the Binding method defined in 1192 [I-D.ietf-behave-rfc3489bis]. Therefore, a TURN server requires 1193 authentication and authorization of STUN requests. This 1194 authentication is provided by mechanisms defined in the STUN 1195 specification itself, in particular digest authentication. 1197 Because TURN servers allocate resources, they can be susceptible to 1198 denial-of-service attacks. All Allocate transactions are 1199 authenticated, so that an unknown attacker cannot launch an attack. 1200 An authenticated attacker can generate multiple Allocate Requests, 1201 however. To prevent a single malicious user from allocating all of 1202 the resources on the server, it is RECOMMENDED that a server 1203 implement a modest per user limit on the amount of bandwidth that can 1204 be allocated. Such a mechanism does not prevent a large number of 1205 malicious users from each requesting a small number of allocations. 1206 Attacks such as these are possible using botnets, and are difficult 1207 to detect and prevent. Implementors of TURN should keep up with best 1208 practices around detection of anomalous botnet attacks. 1210 A client will use the transport address learned from the RELAY- 1211 ADDRESS attribute of the Allocate Response to tell other users how to 1212 reach them. Therefore, a client needs to be certain that this 1213 address is valid, and will actually route to them. Such validation 1214 occurs through the message integrity checks provided in the Allocate 1215 response. They can guarantee the authenticity and integrity of the 1216 allocated addresses. Note that TURN is not susceptible to the 1217 attacks described in Section 12.2.3, 12.2.4, 12.2.5 or 12.2.6 of 1218 [I-D.ietf-behave-rfc3489bis] [[TODO: Update section number references 1219 to 3489bis]]. These attacks are based on the fact that a STUN server 1220 mirrors the source IP address, which cannot be authenticated. STUN 1221 does not use the source address of the Allocate Request in providing 1222 the RELAY-ADDRESS, and therefore, those attacks do not apply. 1224 TURN cannot be used by clients for subverting firewall policies. 1225 TURN has fairly limited applicability, requiring a user to explicitly 1226 authorize permission to receive data from a peer, one IP address at a 1227 time. Thus, it does not provide a general technique for 1228 externalizing sockets. Rather, it has similar security properties to 1229 the placement of an address-restricted NAT in the network, allowing 1230 messaging in from a peer only if the internal client has sent a 1231 packet out towards the IP address of that peer. This limitation 1232 means that TURN cannot be used to run web servers, email servers, SIP 1233 servers, or other network servers that service a large number of 1234 clients. Rather, it facilitates rendezvous of NATted clients that 1235 use some other protocol, such as SIP, to communicate IP addresses and 1236 ports for communications. 1238 Confidentiality of the transport addresses learned through Allocate 1239 transactions does not appear to be that important. If required, it 1240 can be provided by running TURN over TLS. 1242 TURN does not and cannot guarantee that UDP data is delivered in 1243 sequence or to the correct address. As most TURN clients will only 1244 communicate with a single peer, the use of a single channel number 1245 will be very common. Consider an enterprise where Alice and Bob are 1246 involved in separate calls through the enterprise NAT to their 1247 corporate TURN server. If the corporate NAT reboots, it is possible 1248 that Bob will obtain the exact NAT binding originally used by Alice. 1249 If Alice and Bob were using identical channel numbers, Bob will 1250 receive unencapsulated data intended for Alice and will send data 1251 accidentally to Alice's peer. This is not a problem with TURN. This 1252 is precisely what would happen if there was no TURN server and Bob 1253 and Alice instead provided a (STUN) reflexive transport address to 1254 their peers. If detecting this misdelivery is a problem, the client 1255 and its peer need to use message integrity on their data. 1257 One TURN-specific DoS attack bears extra discussion. An attacker who 1258 can corrupt, drop, or cause the loss of a Send or Data indication 1259 sent over UDP, and then forge a Channel Confirmation indication for 1260 the corresponding channel number, can cause a TURN client (server) to 1261 start sending unencapsulated data that the server (client) will 1262 discard. Since indications are not integrity protected, this attack 1263 is not prevented by cryptographic means. However, any attacker who 1264 can generate this level of network disruption could simply prevent a 1265 large fraction of the data from arriving at its destination, and 1266 therefore protecting against this attack does not seem important. 1267 The ChannelConfirmation forging attack is not possible when the 1268 client to server communication is over TCP or TLS over TCP. 1270 Relay servers are useful even for users not behind a NAT. They can 1271 provide a way for truly anonymous communications. A user can cause a 1272 call to have its media routed through a TURN server, so that the 1273 user's IP addresses are never revealed. 1275 Any relay addresses learned through an Allocate request will not 1276 operate properly with IPSec Authentication Header (AH) [RFC4302] in 1277 transport or tunnel mode. However, tunnel-mode IPSec ESP [RFC4303] 1278 should still operate. 1280 12. IANA Considerations 1282 This specification defines several new STUN methods, STUN attributes, 1283 and STUN response codes. This section directs IANA to add these new 1284 protocol elements to the IANA registry of STUN protocol elements. 1286 12.1. New STUN Methods 1288 Request/Response Transactions 1289 0x003 : Allocate 1290 0x004 : Refresh 1292 Indications 1293 0x006 : Send 1294 0x007 : Data 1295 0x009 : Channel Confirmation 1297 12.2. New STUN Attributes 1299 0x000C: CHANNEL-NUMBER 1300 0x000D: LIFETIME 1301 0x0010: BANDWIDTH 1302 0x0012: PEER-ADDRESS 1303 0x0013: DATA 1304 0x0016: RELAY-ADDRESS 1305 0x0018: REQUESTED-PORT-PROPS 1306 0x0019: REQUESTED-TRANSPORT 1307 0x0022: REQUESTED-IP 1309 12.3. New STUN Response Codes 1311 437 Allocation Mismatch 1312 442 Unsupported Transport Protocol 1313 443 Invalid IP Address 1314 444 Invalid Port 1315 486 Allocation Quota Reached 1316 507 Insufficient Capacity 1318 13. IAB Considerations 1320 The IAB has studied the problem of "Unilateral Self Address Fixing", 1321 which is the general process by which a client attempts to determine 1322 its address in another realm on the other side of a NAT through a 1323 collaborative protocol reflection mechanism RFC 3424 [RFC3424]. The 1324 TURN extension is an example of a protocol that performs this type of 1325 function. The IAB has mandated that any protocols developed for this 1326 purpose document a specific set of considerations. 1328 TURN is an extension of the STUN protocol. As such, the specific 1329 usages of STUN that use the TURN extensions need to specifically 1330 address these considerations. Currently the only STUN usage that 1331 uses TURN is ICE [I-D.ietf-mmusic-ice]. 1333 14. Example 1335 In this example, a TURN client is behind a NAT. This TURN client is 1336 running SIP. The client has a private address of 10.0.1.1. The TURN 1337 server is on the public side of the NAT, and is listening for TURN 1338 requests on 192.0.2.3:8776. The public side of the NAT has an IP 1339 address of 192.0.2.1. The client is attempting to send a SIP INVITE 1340 to a peer, and wishes to allocate an IP address and port for 1341 inclusion in the SDP of the INVITE. Normally, TURN would be used in 1342 conjunction with ICE when applied to SIP. However, to keep the 1343 example simple, TURN is shown without ICE. 1345 The client communicates with a SIP user agent on the public network. 1346 This user agent uses a 192.0.2.17:12734 for receipt of its RTP 1347 packets. 1349 10.0.1.1 192.0.2.1 192.0.2.3 192.0.2.17 1350 Client NAT TURN Server Peer 1351 | | | | 1352 |(1) Allocate |(2) Allocate | | 1353 |S=10.0.1.1:4334 |S=192.0.2.1:63346 | | 1354 |D=192.0.2.3:8776 |D=192.0.2.3:8776 | | 1355 |------------------>|------------------>| | 1356 | | | | 1357 |(4) Error |(3) Error | | 1358 |S=192.0.2.3:8776 |S=192.0.2.3:8776 | | 1359 |D=10.0.1.1:4334 |D=192.0.2.1:63346 | | 1360 |<------------------|<------------------| | 1361 | | | | 1362 |(5) Allocate |(6) Allocate | | 1363 |S=10.0.1.1:4334 |S=192.0.2.1:63346 | | 1364 |D=192.0.2.3:8776 |D=192.0.2.3:8776 | | 1365 |------------------>|------------------>| | 1366 | | | | 1367 | | (allocates port 32766) | 1368 | | | | 1369 | | | | 1370 |(8) Response |(7) Response | | 1371 |RA=192.0.2.3:32766 |RA=192.0.2.3:32766 | | 1372 |MA=192.0.2.1:63346 |MA=192.0.2.1:63346 | | 1373 |S=192.0.2.3:8776 |S=192.0.2.3:8776 | | 1374 |D=10.0.1.1:4334 |D=192.0.2.1:63346 | | 1375 |<------------------|<------------------| | 1376 | | | | 1377 |(9) SIP INVITE | | | 1378 |SDP=192.0.2.3:32766| | | 1379 |---------------------------------------------------------->| 1380 | | | | 1381 |(10) SIP 200 OK | | | 1382 |SDP=192.0.2.17:12734 | | 1383 |<----------------------------------------------------------| 1384 | | | | 1385 | | |(11) RTP | 1386 | | |S=192.0.2.17:12734 | 1387 | | |D=192.0.2.3:32766 | 1388 | | |<------------------| 1389 | | | | 1390 | | (no permission; packet dropped) | 1391 | | | | 1392 |(12) SIP ACK | | | 1393 |---------------------------------------------------------->| 1394 | | | | 1395 |(13) Send Indic. |(14) Send Indic. | | 1396 |TURN Channel=0 |TURN Channel=0 | | 1397 |STUN DATA=RTP |STUN DATA=RTP | | 1398 |CHANNEL-NUMER=77 |CHANNEL-NUMBER=77 | | 1399 |PA=192.0.2.17:12734|PA=192.0.2.17:12734| | 1400 |S=10.0.1.1:4334 |S=192.0.2.1:63346 | | 1401 |D=192.0.2.3:8776 |D=192.0.2.3:8776 | | 1402 |------------------>|------------------>| | 1403 | | | | 1404 | | permission created | 1405 | | | | 1406 | | |(15) RTP | 1407 | | |S=192.0.2.3:32766 | 1408 | | |D=192.0.2.17:12734 | 1409 | | |------------------>| 1410 | | | | 1411 |(17) ChannelConf |(16) ChannelConf | | 1412 |TURN Channel=0 |TURN Channel=0 | | 1413 |CHANNEL-NUMBER=77 |CHANNEL-NUMBER=77 | | 1414 |PA=192.0.2.17:12734|PA=192.0.2.17:12734| | 1415 |S=192.0.2.3:8776 |S=192.0.2.3:8776 | | 1416 |D=10.0.1.1:4334 |D=192.0.2.1:63346 | | 1417 |<------------------|<------------------| | 1418 | | | | 1419 |(18) TURN Framed |(19) TURN Framed | | 1420 |TURN Channel=77 |TURN Channel=77 |(20) RTP | 1421 |S=10.0.1.1:4334 |S=192.0.2.1:63346 |S=192.0.2.3:32766 | 1422 |D=192.0.2.3:8776 |D=192.0.2.3:8776 |D=192.0.2.17:12734 | 1423 |------------------>|------------------>|------------------>| 1424 | | | | 1425 |(23) Data Indic. |(22) Data Indic. | | 1426 |TURN Channel=0 |TURN Channel=0 | | 1427 |CHANNEL-NUMBER=33 |CHANNEL-NUMBER=33 |(21) RTP | 1428 |S=192.0.2.3:8776 |S=192.0.2.3:8776 |S=192.0.2.17:12734 | 1429 |D=10.0.1.1:4334 |D=192.0.2.1:63346 |D=192.0.2.3:32766 | 1430 |<------------------|<------------------|<------------------| 1431 | | | | 1432 |(24) ChannelConf |(25) ChannelConf | | 1433 |TURN Channel=0 |TURN Channel=0 | | 1434 |CHANNEL-NUMBER=33 |CHANNEL-NUMBER=33 | | 1435 |S=10.0.0.1:4334 |S=192.0.2.3:8776 | | 1436 |D=192.0.2.3:8776 |D=192.0.2.3:8776 | | 1437 |------------------>|------------------>| | 1438 | | | | 1439 |(28) TURN Framed |(27) TURN Framed | | 1440 |TURN Channel=33 |TURN Channel=33 |(26) RTP | 1441 |S=192.0.2.3:8776 |S=192.0.2.3:8776 |S=192.0.2.17:12734 | 1442 |D=10.0.1.1:4334 |D=192.0.2.1:63346 |D=192.0.2.3:32766 | 1443 |<------------------|<------------------|<------------------| 1444 | | | | 1446 Figure 12 1448 The message flow is shown in Figure 12. In step 1-2, the client 1449 allocates a UDP port from the local operating system on its private 1450 interface, obtaining 4334. It then attempts to obtain a port for RTP 1451 traffic. RTCP processing is not shown in the example. 1453 In step 1, the client sends an Allocate Request (1) with a source 1454 address (denoted by S) of 10.0.1.1:4334 and a destination (denoted by 1455 D) of 192.0.2.3:8776. This passes through the NAT (2), which 1456 allocates a new UDP port (63346) on the NAT's public interface 1457 (192.0.2.1), and creates an internal mapping between the internal 1458 address 10.0.1.1:4334 and that external address 192.0.2.1:63346. The 1459 NAT sends this request to the TURN server (3). The TURN server 1460 challenges the request, requesting credentials by sending a STUN 1461 error and including the NONCE and REALM attributes. Message 3 is 1462 relayed, by the NAT, to the TURN client (4). The client sends a new 1463 request (from the same UDP port), including its credentials (5, 6). 1464 The TURN server authenticates the request. The TURN server allocates 1465 a new UDP port on one of its interfaces, 192.0.2.3:32766. The TURN 1466 server puts 192.0.2.3:32766 into the RELAY-ADDRESS (denoted by RA) 1467 attribute of the response, and puts the source IP address and UDP 1468 port of the request (as seen by the TURN server) into the XOR-MAPPED- 1469 ADDRESS attribute (denoted by MA). In step 7, this message is sent 1470 back to the TURN client and relayed by the NAT in step 8. 1472 The client now proceeds to perform a basic SIP call setup. In 1473 message 9, the TURN client includes the TURN server's address (which 1474 it learned in message 8) in the SDP of its INVITE (e.g., using syntax 1475 described in[I-D.ietf-mmusic-ice]). The called party responds with 1476 its SDP in a provisional response (18x) or a final response (200 Ok). 1477 The called party's SDP includes its IP address and UDP port, 1478 192.0.2.17:12734. Immediately after sending its 200 Ok, the called 1479 party sends an RTP packet to the TURN server's IP address (11). This 1480 RTP packet is dropped by the TURN server, because the TURN server has 1481 not been given permission to relay that data. Incoming packets are 1482 dropped until a permission is created. The SIP exchange completes 1483 with an SIP 200 Ok message (12). 1485 Steps 13-20 show the client performing a channel allocation. The 1486 TURN client needs to send an RTP packet. Since no channels and no 1487 permissions have been created, the TURN client sends the RTP packet 1488 inside of a Send Indication, using channel number 0, with the 1489 CHANNEL-NUMBER attribute set to the channel number the TURN client 1490 wants to use for subsequent communication with this TURN peer (77 is 1491 shown in the example). The TURN peer's IP address and UDP port 1492 (which were learned from the SDP answer received in step 10) are 1493 placed in the PEER-ADDRESS attribute (denoted by PA). In message 13, 1494 the TURN client sends this Send Indication, and it is relayed by the 1495 NAT to the TURN server (14). Upon receipt of that message, the TURN 1496 server creates a permission, which allows subsequent traffic from 1497 that same peer address to be relayed to that TURN client's IP address 1498 and UDP port. The TURN server sends the contents of the Send 1499 Indication's DATA attribute towards the PEER-ADDRESS (15); this will 1500 typically be an RTP packet. Note that the source address and port of 1501 message 15 is the TURN server's address, 192.0.2.3:32766, which is 1502 the allocated transport address communicated to the TURN client in 1503 messages 7 and 8. 1505 In step 16, the TURN server sends a channel confirmation message to 1506 the TURN client. Once the TURN client receives this message, it can 1507 forgo using the Send Indication for that channel. Instead, it can 1508 utilize the channel number in the TURN framing header. Steps 18 and 1509 19 show the TURN client sending a message to TURN server using the 1510 TURN framing header, with channel=1. Step 20 shows the TURN server 1511 removing the TURN framing and sending the RTP packet to the TURN 1512 peer. 1514 Steps 21-28 show an RTP packet from the TURN peer, which causes a 1515 channel allocation by the TURN server. In packet 21, an RTP packet 1516 is sent by the TURN peer to the TURN server. There is an existing 1517 permission (created in step 14), so the TURN server accepts this 1518 incoming RTP packet. The TURN server knows the TURN client to send 1519 this packet to, but does not yet have a channel assigned for traffic 1520 in this direction. The TURN server chooses a channel number (33 in 1521 the example), and sends a Data Indication to the TURN client (message 1522 22). The NAT relays this to the TURN client (message 23). The TURN 1523 client sends an Channel Confirmation message (24) which is relayed by 1524 the NAT (25). When the TURN server receives the Channel 1525 Confirmation, it no longer needs to use a Send Indication for traffic 1526 from that remote peer; instead, it can use TURN framing with its 1527 chosen channel number (33). The next RTP packet that arrives from 1528 that peer (26) is sent by the TURN server using TURN framing 1529 indicating the channel number (message 27) and relayed by the NAT to 1530 the TURN client (28). 1532 15. Changes since version -04 1534 This section lists the major changes between thiis document and 1535 draft-ietf-behave-turn-04: 1537 o Removed the ability to allocate addresses for TCP relaying. This 1538 is now covered in a separate document. However, communication 1539 between the client and the server can still run over TCP or TLS/ 1540 TCP. This resulted in the removal of the Connect method and the 1541 TIMER-VAL and CONNECT-STAT attributes. 1543 o Added the concept of channels. All communication between the 1544 client and the server flows on a channel. Channels are numbered 1545 0..65535. Channel 0 is used for TURN messages, while the 1546 remaining channels are used for sending unencapsulated data to/ 1547 from a remote peer. This concept adds a new Channel Confirmation 1548 method and a new CHANNEL-NUMBER attribute. The new attribute is 1549 also used in the Send and Data methods. 1551 o The framing mechanism formally used just for stream-oriented 1552 transports is now also used for UDP, and the former Type and 1553 Reserved fields in the header have been replaced by a Channel 1554 Number field. The length field is zero when running over UDP. 1556 o TURN now runs on its own port, rather than using the STUN port. 1557 The use of channels requires this. 1559 o Removed the SetActiveDestination concept. This has been replaced 1560 by the concept of channels. 1562 o Changed the allocation refresh mechanism. The new mechanism uses 1563 a new Refresh method, rather than repeating the Allocation 1564 transaction. 1566 o Changed the syntax of SRV requests for secure transport. The new 1567 syntax is "_turns._tcp" rather than the old "_turn._tls". This 1568 change mirrors the corresponding change in STUN SRV syntax. 1570 o Renamed the old REMOTE-ADDRESS attribute to PEER-ADDRESS, and 1571 changed it to use the XOR-MAPPED-ADDRESS format. 1573 o Changed the RELAY-ADDRESS attribute to use the XOR-MAPPED-ADDRESS 1574 format (instead of the MAPPED-ADDRESS format)). 1576 o Renamed the 437 error code from "No Binding" to "Allocation 1577 Mismatch". 1579 o Added a discussion of what happens if a client's public binding on 1580 its outermost NAT changes. 1582 o The document now consistently uses the term "peer" as the name of 1583 a remote endpoint with which the client wishes to communicate. 1585 o Rewrote much of the document to describe the new concepts. At the 1586 same time, tried to make the presentation clearer and less 1587 repetitive. 1589 16. Acknowledgements 1591 The authors would like to thank Marc Petit-Huguenin for his comments 1592 and suggestions. 1594 17. References 1596 17.1. Normative References 1598 [I-D.ietf-behave-rfc3489bis] 1599 Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, 1600 "Session Traversal Utilities for (NAT) (STUN)", 1601 draft-ietf-behave-rfc3489bis-12 (work in progress), 1602 November 2007. 1604 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1605 Requirement Levels", BCP 14, RFC 2119, March 1997. 1607 17.2. Informative References 1609 [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. 1610 Jacobson, "RTP: A Transport Protocol for Real-Time 1611 Applications", STD 64, RFC 3550, July 2003. 1613 [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model 1614 with Session Description Protocol (SDP)", RFC 3264, 1615 June 2002. 1617 [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, 1618 December 2005. 1620 [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", 1621 RFC 4303, December 2005. 1623 [RFC3424] Daigle, L. and IAB, "IAB Considerations for UNilateral 1624 Self-Address Fixing (UNSAF) Across Network Address 1625 Translation", RFC 3424, November 2002. 1627 [I-D.ietf-mmusic-ice] 1628 Rosenberg, J., "Interactive Connectivity Establishment 1629 (ICE): A Protocol for Network Address Translator (NAT) 1630 Traversal for Offer/Answer Protocols", 1631 draft-ietf-mmusic-ice-19 (work in progress), October 2007. 1633 [RFC4787] Audet, F. and C. Jennings, "Network Address Translation 1634 (NAT) Behavioral Requirements for Unicast UDP", BCP 127, 1635 RFC 4787, January 2007. 1637 [I-D.ietf-behave-turn-tcp] 1638 Rosenberg, J. and R. Mahy, "Traversal Using Relays around 1639 NAT (TURN) Extensions for TCP Allocations", 1640 draft-ietf-behave-turn-tcp-00 (work in progress), 1641 November 2007. 1643 Authors' Addresses 1645 Jonathan Rosenberg 1646 Cisco Systems, Inc. 1647 Edison, NJ 1648 US 1650 Email: jdrosen@cisco.com 1651 URI: http://www.jdrosen.net 1653 Rohan Mahy 1654 Plantronics, Inc. 1656 Email: rohan@ekabal.com 1658 Philip Matthews 1659 Avaya, Inc. 1660 1135 Innovation Drive 1661 Ottawa, Ontario K2K 3G7 1662 Canada 1664 Phone: +1 613 592-4343 x223 1665 Fax: 1666 Email: philip_matthews@magma.ca 1667 URI: 1669 Dan Wing 1670 Cisco Systems, Inc. 1671 170 West Tasman Drive 1672 San Jose, CA 95134 1673 USA 1675 Phone: 1676 Fax: 1677 Email: dwing@cisco.com 1678 URI: 1680 Full Copyright Statement 1682 Copyright (C) The IETF Trust (2007). 1684 This document is subject to the rights, licenses and restrictions 1685 contained in BCP 78, and except as set forth therein, the authors 1686 retain all their rights. 1688 This document and the information contained herein are provided on an 1689 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS 1690 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND 1691 THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS 1692 OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF 1693 THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 1694 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1696 Intellectual Property 1698 The IETF takes no position regarding the validity or scope of any 1699 Intellectual Property Rights or other rights that might be claimed to 1700 pertain to the implementation or use of the technology described in 1701 this document or the extent to which any license under such rights 1702 might or might not be available; nor does it represent that it has 1703 made any independent effort to identify any such rights. Information 1704 on the procedures with respect to rights in RFC documents can be 1705 found in BCP 78 and BCP 79. 1707 Copies of IPR disclosures made to the IETF Secretariat and any 1708 assurances of licenses to be made available, or the result of an 1709 attempt made to obtain a general license or permission for the use of 1710 such proprietary rights by implementers or users of this 1711 specification can be obtained from the IETF on-line IPR repository at 1712 http://www.ietf.org/ipr. 1714 The IETF invites any interested party to bring to its attention any 1715 copyrights, patents or patent applications, or other proprietary 1716 rights that may cover technology that may be required to implement 1717 this standard. Please address the information to the IETF at 1718 ietf-ipr@ietf.org. 1720 Acknowledgment 1722 Funding for the RFC Editor function is provided by the IETF 1723 Administrative Support Activity (IASA).