| < draft-ietf-tsvwg-udp-guidelines-03.txt | draft-ietf-tsvwg-udp-guidelines-04.txt > | |||
|---|---|---|---|---|
| Transport Area Working Group L. Eggert | Transport Area Working Group L. Eggert | |||
| Internet-Draft Nokia | Internet-Draft Nokia | |||
| Intended status: Best Current G. Fairhurst | Intended status: Best Current G. Fairhurst | |||
| Practice University of Aberdeen | Practice University of Aberdeen | |||
| Expires: March 22, 2008 September 19, 2007 | Expires: May 22, 2008 November 19, 2007 | |||
| UDP Usage Guidelines for Application Designers | UDP Usage Guidelines for Application Designers | |||
| draft-ietf-tsvwg-udp-guidelines-03 | draft-ietf-tsvwg-udp-guidelines-04 | |||
| Status of this Memo | Status of this Memo | |||
| By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
| applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
| have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
| aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| skipping to change at page 1, line 35 ¶ | skipping to change at page 1, line 35 ¶ | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on March 22, 2008. | This Internet-Draft will expire on May 22, 2008. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2007). | |||
| Abstract | Abstract | |||
| The User Datagram Protocol (UDP) provides a minimal, message-passing | The User Datagram Protocol (UDP) provides a minimal, message-passing | |||
| transport that has no inherent congestion control mechanisms. | transport that has no inherent congestion control mechanisms. | |||
| Because congestion control is critical to the stable operation of the | Because congestion control is critical to the stable operation of the | |||
| skipping to change at page 2, line 15 ¶ | skipping to change at page 2, line 15 ¶ | |||
| Congestion control guidelines are a primary focus, but the document | Congestion control guidelines are a primary focus, but the document | |||
| also provides guidance on other topics, including message sizes, | also provides guidance on other topics, including message sizes, | |||
| reliability, checksums and middlebox traversal. | reliability, checksums and middlebox traversal. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. UDP Usage Guidelines . . . . . . . . . . . . . . . . . . . . . 4 | 3. UDP Usage Guidelines . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3.1. Congestion Control Guidelines . . . . . . . . . . . . . . 5 | 3.1. Congestion Control Guidelines . . . . . . . . . . . . . . 5 | |||
| 3.2. Message Size Guidelines . . . . . . . . . . . . . . . . . 8 | 3.2. Message Size Guidelines . . . . . . . . . . . . . . . . . 10 | |||
| 3.3. Reliability Guidelines . . . . . . . . . . . . . . . . . . 9 | 3.3. Reliability Guidelines . . . . . . . . . . . . . . . . . . 10 | |||
| 3.4. Checksum Guidelines . . . . . . . . . . . . . . . . . . . 9 | 3.4. Checksum Guidelines . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.5. Middlebox Traversal Guidelines . . . . . . . . . . . . . . 11 | 3.5. Middlebox Traversal Guidelines . . . . . . . . . . . . . . 13 | |||
| 3.6. Programming Guidelines . . . . . . . . . . . . . . . . . . 12 | 3.6. Programming Guidelines . . . . . . . . . . . . . . . . . . 14 | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | 3.7. ICMP Guidelines . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5. Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | 5. Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 15 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . . 16 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . . 17 | 8.1. Normative References . . . . . . . . . . . . . . . . . . . 19 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 20 | 8.2. Informative References . . . . . . . . . . . . . . . . . . 20 | |||
| Intellectual Property and Copyright Statements . . . . . . . . . . 21 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| Intellectual Property and Copyright Statements . . . . . . . . . . 25 | ||||
| 1. Introduction | 1. Introduction | |||
| The User Datagram Protocol (UDP) [RFC0768] provides a minimal, | The User Datagram Protocol (UDP) [RFC0768] provides a minimal, | |||
| unreliable, best-effort, message-passing transport to applications | unreliable, best-effort, message-passing transport to applications | |||
| and upper-layer protocols (both simply called "applications" in the | and upper-layer protocols (both simply called "applications" in the | |||
| remainder of this document). Compared to other transport protocols, | remainder of this document). Compared to other transport protocols, | |||
| UDP and its UDP-Lite variant [RFC3828] are unique in that they do not | UDP and its UDP-Lite variant [RFC3828] are unique in that they do not | |||
| establish end-to-end connections between communicating end systems. | establish end-to-end connections between communicating end systems. | |||
| UDP communication consequently does not incur connection | UDP communication consequently does not incur connection | |||
| establishment and teardown overheads and there is no associated end | establishment and teardown overheads and there is minimal associated | |||
| system state. Because of these characteristics, UDP can offer a very | end system state. Because of these characteristics, UDP can offer a | |||
| efficient communication transport to some applications. | very efficient communication transport to some applications. | |||
| A second unique characteristic of UDP is that it provides no inherent | A second unique characteristic of UDP is that it provides no inherent | |||
| congestion control mechanisms. On many platforms, applications can | congestion control mechanisms. On many platforms, applications can | |||
| send UDP messages at the line rate of the link interface, which is | send UDP messages at the line rate of the link interface, which is | |||
| often much greater than the available path capacity, and doing so | often much greater than the available path capacity, and doing so | |||
| contributes to congestion along the path. [RFC2914] describes the | contributes to congestion along the path. [RFC2914] describes the | |||
| best current practice for congestion control in the Internet. It | best current practice for congestion control in the Internet. It | |||
| identifies two major reasons why congestion control mechanisms are | identifies two major reasons why congestion control mechanisms are | |||
| critical for the stable operation of the Internet: | critical for the stable operation of the Internet: | |||
| skipping to change at page 3, line 51 ¶ | skipping to change at page 3, line 51 ¶ | |||
| avoidance mechanisms." This is an important requirement, even for | avoidance mechanisms." This is an important requirement, even for | |||
| applications that do not use UDP for streaming. For example, an | applications that do not use UDP for streaming. For example, an | |||
| application that generates five 1500-byte UDP messages in one second | application that generates five 1500-byte UDP messages in one second | |||
| can already exceed the capacity of a 56 Kb/s path. For applications | can already exceed the capacity of a 56 Kb/s path. For applications | |||
| that can operate at higher, potentially unbounded data rates, | that can operate at higher, potentially unbounded data rates, | |||
| congestion control becomes vital to prevent congestion collapse and | congestion control becomes vital to prevent congestion collapse and | |||
| establish some degree of fairness. Section 3 describes a number of | establish some degree of fairness. Section 3 describes a number of | |||
| simple guidelines for the designers of such applications. | simple guidelines for the designers of such applications. | |||
| A UDP message is carried in a single IP packet and is hence limited | A UDP message is carried in a single IP packet and is hence limited | |||
| to a maximum payload of 65,487 bytes. The transmission of large IP | to a maximum payload of 65,507 bytes for IPv4 and 65,487 bytes for | |||
| packets usually requires IP fragmentation, which decreases | IPv6. The transmission of large IP packets usually requires IP | |||
| fragmentation. At least for IPv4, fragmentation decreases | ||||
| communication reliability and efficiency and should be avoided. One | communication reliability and efficiency and should be avoided. One | |||
| reason for this decrease in reliability is that many NATs and | reason for this decrease in reliability is that many NATs and | |||
| firewalls do not forward IP fragments; other reasons are documented | firewalls do not forward IPv4 fragments; other reasons are documented | |||
| in [RFC4963]. Some of the guidelines in Section 3 describe how | in [RFC4963]. Some of the guidelines in Section 3 describe how | |||
| applications should determine appropriate message sizes. | applications should determine appropriate message sizes. | |||
| This document provides guidelines to designers of applications that | This document provides guidelines to designers of applications that | |||
| use UDP for unicast transmission. A special class of applications | use UDP for unicast transmission. A special class of applications | |||
| uses UDP for IP multicast transmissions. Congestion control, flow | uses UDP for IP multicast transmissions. Congestion control, flow | |||
| control or reliability for multicast transmissions is more difficult | control or reliability for multicast transmissions is more difficult | |||
| to establish than for unicast transmissions, because a single sender | to establish than for unicast transmissions, because a single sender | |||
| may transmit to multiple receivers across potentially very | may transmit to multiple receivers across potentially very | |||
| heterogeneous paths at the same time. Designing multicast | heterogeneous paths at the same time. Designing multicast | |||
| skipping to change at page 4, line 48 ¶ | skipping to change at page 4, line 49 ¶ | |||
| operate safely under very different path conditions. Typically, this | operate safely under very different path conditions. Typically, this | |||
| requires conservatively probing the Internet path to establish a | requires conservatively probing the Internet path to establish a | |||
| transmission behavior that it can sustain and that is reasonably fair | transmission behavior that it can sustain and that is reasonably fair | |||
| to other traffic sharing the path. | to other traffic sharing the path. | |||
| These mechanisms are difficult to implement correctly. For most | These mechanisms are difficult to implement correctly. For most | |||
| applications, the use of one of the existing IETF transport protocols | applications, the use of one of the existing IETF transport protocols | |||
| is the simplest method of acquiring the required mechanisms. | is the simplest method of acquiring the required mechanisms. | |||
| Consequently, the RECOMMENDED alternative to the UDP usage described | Consequently, the RECOMMENDED alternative to the UDP usage described | |||
| in the remainder of this section is the use of an IETF transport | in the remainder of this section is the use of an IETF transport | |||
| protocol such as TCP [RFC0793], SCTP [RFC2960] or DCCP [RFC4340] with | protocol such as TCP [RFC0793], SCTP [RFC4960] and SCTP-PR [RFC3758], | |||
| its different congestion control types | or DCCP [RFC4340] with its different congestion control types | |||
| [RFC4341][RFC4342][I-D.ietf-dccp-ccid4]. | ||||
| [RFC4341][RFC4342][I-D.floyd-dccp-ccid4]. | ||||
| If used correctly, these more fully-featured transport protocols are | If used correctly, these more fully-featured transport protocols are | |||
| not as "heavyweight" as often claimed. For example, TCP's "Nagle" | not as "heavyweight" as often claimed. For example, TCP's "Nagle" | |||
| algorithm [RFC0896] can be disabled, improving communication latency | algorithm [RFC0896] can be disabled, improving communication latency | |||
| at the expense of more frequent - but still congestion-controlled - | at the expense of more frequent - but still congestion-controlled - | |||
| packet transmissions. Another example is the TCP SYN Cookie | packet transmissions. Another example is the TCP SYN Cookie | |||
| mechanism [RFC4987], which is available on many platforms. TCP with | mechanism [RFC4987], which is available on many platforms. TCP with | |||
| SYN Cookies does not require a server to maintain per-connection | SYN Cookies does not require a server to maintain per-connection | |||
| state until the connection is established. TCP also requires the end | state until the connection is established. TCP also requires the end | |||
| that closes a connection to maintain the TIME-WAIT state that | that closes a connection to maintain the TIME-WAIT state that | |||
| skipping to change at page 5, line 51 ¶ | skipping to change at page 5, line 51 ¶ | |||
| UDP-transmitting applications. Section 3.1.1 discusses congestion | UDP-transmitting applications. Section 3.1.1 discusses congestion | |||
| control options for applications that perform bulk transfers over | control options for applications that perform bulk transfers over | |||
| UDP. Such applications can employ schemes that sample the path over | UDP. Such applications can employ schemes that sample the path over | |||
| several subsequent RTTs during which data is exchanged, in order to | several subsequent RTTs during which data is exchanged, in order to | |||
| determine a sending rate that the path at its current load can | determine a sending rate that the path at its current load can | |||
| support. Other applications only exchange a few UDP messages with a | support. Other applications only exchange a few UDP messages with a | |||
| destination. Section 3.1.2 discusses congestion control options for | destination. Section 3.1.2 discusses congestion control options for | |||
| such "low data-volume" applications. Because they typically do not | such "low data-volume" applications. Because they typically do not | |||
| transmit enough data to iteratively sample the path to determine a | transmit enough data to iteratively sample the path to determine a | |||
| safe sending rate, they need to employ different kinds of congestion | safe sending rate, they need to employ different kinds of congestion | |||
| control mechanisms. | control mechanisms. Finally, Section 3.1.3 discusses congestion | |||
| control considerations when UDP is used as a tunneling protocol. | ||||
| It is important to note that congestion control should not be viewed | It is important to note that congestion control should not be viewed | |||
| as an add-on to a finished application. Many of the mechanisms | as an add-on to a finished application. Many of the mechanisms | |||
| discussed in the guidelines below require application support to | discussed in the guidelines below require application support to | |||
| operate correctly. Application designers need to consider congestion | operate correctly. Application designers need to consider congestion | |||
| control throughout the design of their application, similar to how | control throughout the design of their application, similar to how | |||
| they consider security aspects throughout the design process. | they consider security aspects throughout the design process. | |||
| Finally, in the past, the IETF has investigated integrated congestion | Finally, in the past, the IETF has investigated integrated congestion | |||
| control mechanisms that act on the traffic aggregate between two | control mechanisms that act on the traffic aggregate between two | |||
| skipping to change at page 7, line 8 ¶ | skipping to change at page 7, line 10 ¶ | |||
| achieve an average throughput, measured on a reasonable timescale, | achieve an average throughput, measured on a reasonable timescale, | |||
| that is not less than that of the UDP flow. The comparison to TCP | that is not less than that of the UDP flow. The comparison to TCP | |||
| cannot be specified exactly, but is intended as an "order-of- | cannot be specified exactly, but is intended as an "order-of- | |||
| magnitude" comparison in timescale and throughput. | magnitude" comparison in timescale and throughput. | |||
| Finally, some bulk transfer applications chose not to implement any | Finally, some bulk transfer applications chose not to implement any | |||
| congestion control mechanism and instead rely on transmitting across | congestion control mechanism and instead rely on transmitting across | |||
| reserved path capacity. This might be an acceptable choice for a | reserved path capacity. This might be an acceptable choice for a | |||
| subset of restricted networking environments, but is by no means a | subset of restricted networking environments, but is by no means a | |||
| safe practice for operation in the Internet. When the UDP traffic of | safe practice for operation in the Internet. When the UDP traffic of | |||
| such applications leaks out on unprovisioned Internet paths, if can | such applications leaks out on unprovisioned Internet paths, it can | |||
| significantly degrade the performance of other traffic sharing the | significantly degrade the performance of other traffic sharing the | |||
| path and even result in congestion collapse. Applications that | path and even result in congestion collapse. Applications that | |||
| support an uncontrolled or unadaptive transmission behavior SHOULD | support an uncontrolled or unadaptive transmission behavior SHOULD | |||
| NOT do so by default and SHOULD instead require users to explicitly | NOT do so by default and SHOULD instead require users to explicitly | |||
| enable this mode of operation. | enable this mode of operation. | |||
| 3.1.2. Low Data-Volume Applications | 3.1.2. Low Data-Volume Applications | |||
| When applications that exchange only a small number of messages with | When applications that exchange only a small number of messages with | |||
| a destination at any time implement TFRC or one of the other | a destination at any time implement TFRC or one of the other | |||
| skipping to change at page 7, line 47 ¶ | skipping to change at page 7, line 49 ¶ | |||
| applications. SIP [RFC3261] and GIST [I-D.ietf-nsis-ntlp] use an | applications. SIP [RFC3261] and GIST [I-D.ietf-nsis-ntlp] use an | |||
| initial value of 500 ms, and initial timeouts that are shorter than | initial value of 500 ms, and initial timeouts that are shorter than | |||
| this are likely problematic in many cases. It is also important to | this are likely problematic in many cases. It is also important to | |||
| note that the initial timeout is not the maximum possible timeout - | note that the initial timeout is not the maximum possible timeout - | |||
| the RECOMMENDED algorithm in [RFC2988] yields timeout values after a | the RECOMMENDED algorithm in [RFC2988] yields timeout values after a | |||
| series of losses that are much longer than the initial value. | series of losses that are much longer than the initial value. | |||
| Some applications cannot maintain a reliable RTT estimate for a | Some applications cannot maintain a reliable RTT estimate for a | |||
| destination. The first case is applications that exchange too few | destination. The first case is applications that exchange too few | |||
| messages with a peer to establish a statistically accurate RTT | messages with a peer to establish a statistically accurate RTT | |||
| estimate. Such applications MAY use a fixed transmission interval | estimate. Such applications MAY use a pre-determined transmission | |||
| that is exponentially backed-off during loss. TCP uses an initial | interval that is exponentially backed-off when packets are lost. TCP | |||
| value of 3 seconds [RFC2988], which is also RECOMMENDED as an initial | uses an initial value of 3 seconds [RFC2988], which is also | |||
| value for UDP applications. SIP [RFC3261] and GIST | RECOMMENDED as an initial value for UDP applications. SIP [RFC3261] | |||
| [I-D.ietf-nsis-ntlp] use an interval of 500 ms, and shorter values | and GIST [I-D.ietf-nsis-ntlp] use an interval of 500 ms, and shorter | |||
| are likely problematic in many cases. As in the previous case, note | values are likely problematic in many cases. As in the previous | |||
| that the initial timeout is not the maximum possible timeout. | case, note that the initial timeout is not the maximum possible | |||
| timeout. | ||||
| A second class of applications cannot maintain an RTT estimate for a | A second class of applications cannot maintain an RTT estimate for a | |||
| destination, because the destination does not send return traffic. | destination, because the destination does not send return traffic. | |||
| Such applications SHOULD NOT send more than one UDP message every 3 | Such applications SHOULD NOT send more than one UDP message every 3 | |||
| seconds, and SHOULD use an even less aggressive rate when possible. | seconds, and SHOULD use an even less aggressive rate when possible. | |||
| The 3-second interval was chosen based on TCP's retransmission | The 3-second interval was chosen based on TCP's retransmission | |||
| timeout when the RTT is unknown [RFC2988], and shorter values are | timeout when the RTT is unknown [RFC2988], and shorter values are | |||
| likely problematic in many cases. Note that the initial timeout | likely problematic in many cases. Note that the initial timeout | |||
| interval must be more conservative than in the two previous cases, | interval must be more conservative than in the two previous cases, | |||
| because the lack of return traffic prevents the detection of packet | because the lack of return traffic prevents the detection of packet | |||
| skipping to change at page 8, line 28 ¶ | skipping to change at page 8, line 30 ¶ | |||
| Applications that communicate bidirectionally SHOULD employ | Applications that communicate bidirectionally SHOULD employ | |||
| congestion control for both directions of the communication. For | congestion control for both directions of the communication. For | |||
| example, for a client-server, request-response-style application, | example, for a client-server, request-response-style application, | |||
| clients SHOULD congestion control their request transmission to a | clients SHOULD congestion control their request transmission to a | |||
| server, and the server SHOULD congestion-control its responses to the | server, and the server SHOULD congestion-control its responses to the | |||
| clients. Congestion in the forward and reverse direction is | clients. Congestion in the forward and reverse direction is | |||
| uncorrelated and an application SHOULD independently detect and | uncorrelated and an application SHOULD independently detect and | |||
| respond to congestion along both directions. | respond to congestion along both directions. | |||
| 3.1.3. UDP Tunnels | ||||
| One increasingly popular use of UDP is as a tunneling protocol, where | ||||
| a tunnel endpoint encapsulates the packets of another protocol inside | ||||
| UDP messages and transmits them to another tunnel endpoint, which | ||||
| decapsulates the UDP messages and forwards the original packets | ||||
| contained in the payload. Tunnels establish virtual links that | ||||
| appear to directly connect locations that are distant in the physical | ||||
| Internet topology, and can be used to create virtual (private) | ||||
| networks. Using UDP as a tunneling protocol is attractive when the | ||||
| payload protocol is not supported by middleboxes that may exist along | ||||
| the path, because many middleboxes support UDP transmissions. | ||||
| Well-implemented tunnels are generally invisible to the endpoints | ||||
| that happen to transmit over a path that includes tunneled links. On | ||||
| the other hand, to the routers along the path of a UDP tunnel, i.e., | ||||
| the routers between the two tunnel endpoints, the traffic that a UDP | ||||
| tunnel generates is a regular UDP flow, and the encapsulator and | ||||
| decapsulator appear as regular UDP-sending and -receiving | ||||
| applications. Because other flows can share the path with one or | ||||
| more UDP tunnels, congestion control needs to be considered. | ||||
| Two factors determine whether a UDP tunnel needs to employ specific | ||||
| congestion control mechanisms. First, whether the tunneling scheme | ||||
| generates UDP traffic at a volume that corresponds to the volume of | ||||
| payload traffic carried within the tunnel. Second, whether the | ||||
| payload traffic is IP-based. This results in these possible cases: | ||||
| 1. Tunnel generates UDP traffic at a volume that corresponds to the | ||||
| volume of payload traffic, and the payload traffic is IP-based. | ||||
| This is arguably the most common case for Internet tunnels. In | ||||
| this case, the UDP tunnel SHOULD NOT employ its own congestion | ||||
| control mechanism, because congestion losses of tunneled traffic | ||||
| will already trigger an appropriate congestion response at the | ||||
| original senders of the tunneled traffic. | ||||
| Note that this guideline is built on the assumption that most IP- | ||||
| based communication is congestion-controlled. If a UDP tunnel is | ||||
| used for IP-based traffic that is known to not be congestion- | ||||
| controlled, the next set of guidelines applies: | ||||
| 2. Tunnel generates UDP traffic at a volume that corresponds to the | ||||
| volume of payload traffic, and the payload traffic is not known | ||||
| to be IP-based (or is known to be IP-based, but not congestion- | ||||
| controlled). | ||||
| This is the case, for example, when link-layer protocols are | ||||
| encapsulated within UDP. Because it is not known that congestion | ||||
| losses of tunneled non-IP traffic will trigger an appropriate | ||||
| congestion response at the senders, the UDP tunnel SHOULD employ | ||||
| an appropriate congestion control mechanism. Because tunnels are | ||||
| usually bulk-transfer applications as far as the intermediate | ||||
| routers are concerned, the guidelines in Section 3.1.1 apply. | ||||
| 3. Tunnel generates UDP traffic at a volume that does not correspond | ||||
| to the volume of payload traffic, independent of whether the | ||||
| payload traffic is IP-based or not. | ||||
| Examples of this class include UDP tunnels that send at a | ||||
| constant rate, increase their transmission rates under loss, for | ||||
| example, due to increasing redundancy when forward-error- | ||||
| correction is used, or are otherwise constrained in their | ||||
| transmission behavior. These specialized uses of UDP for | ||||
| tunneling go beyond the scope of the general guidelines given in | ||||
| this document. The implementer of such specialized tunnels | ||||
| SHOULD carefully consider congestion control in the design of | ||||
| their tunneling mechanism. | ||||
| Designing tunneling mechanism requires significantly more expertise | ||||
| than needed for many other UDP applications, because tunnels | ||||
| virtualize lower-layer components of the Internet, and the | ||||
| virtualized components need to correctly interact with the | ||||
| infrastructure at that layer. This document only touches upon the | ||||
| congestion control considerations for implementing UDP tunnels; a | ||||
| discussion of other required tunneling behavior is out of scope. | ||||
| 3.2. Message Size Guidelines | 3.2. Message Size Guidelines | |||
| Because IP fragmentation lowers the efficiency and reliability of | Because IPv4 fragmentation lowers the efficiency and reliability of | |||
| Internet communication [RFC4963], an application SHOULD NOT send UDP | Internet communication [RFC4963], an application SHOULD NOT send UDP | |||
| messages that result in IP packets that exceed the MTU of the path to | messages that result in IPv4 packets that exceed the MTU of the path | |||
| the destination. Consequently, an application SHOULD either use the | to the destination. Consequently, an application SHOULD either use | |||
| path MTU information provided by the IP layer or implement path MTU | the path MTU information provided by the IP layer or implement path | |||
| discovery itself [RFC1191][RFC1981][RFC4821] to determine whether the | MTU discovery itself [RFC1191][RFC1981][RFC4821] to determine whether | |||
| path to a destination will support its desired message size without | the path to a destination will support its desired message size | |||
| fragmentation. | without fragmentation. | |||
| Applications that choose to not adapt their transmit message size | Applications that choose to not adapt their transmit message size | |||
| SHOULD NOT send UDP messages that exceed the minimum PMTU. The | SHOULD NOT send UDP messages that would result in IP datagrams that | |||
| minimum PMTU depends on the IP version used for transmission, and is | exceed the effective PMTU. In the absence of actual knowledge of the | |||
| the lesser of 576 bytes and the first-hop MTU for IPv4 [RFC1122] and | minimum MTU along the path, the effective PMTU depends upon the IP | |||
| 1280 bytes for IPv6 [RFC2460]. To determine an appropriate UDP | version used for transmission. It is the smaller of 576 bytes and | |||
| payload size, applications must subtract IP header and option lengths | the first-hop MTU for IPv4 [RFC1122] and 1280 bytes for IPv6 | |||
| as well as the length of the UDP header from the PMTU size. | [RFC2460]. The effective PMTU for a directly connected destination | |||
| Transmission of minimum-sized messages is inefficient over paths that | (with no routers on the path) is the configured interface MTU, which | |||
| support a larger PMTU, which is a second reason to implement PMTU | could be less than the maximum link payload size. Transmission of | |||
| discovery. | minimum-sized messages is inefficient over paths that support a | |||
| larger PMTU, which is a second reason to implement PMTU discovery. | ||||
| Applications that do not send messages that exceed the minimum PMTU | To determine an appropriate UDP payload size, applications MUST | |||
| subtract the size of the IP header (which includes any IPv4 optional | ||||
| headers or IPv6 extension headers) as well as the length of the UDP | ||||
| header (8 bytes) from the PMTU size. This size, known as the MMS_S, | ||||
| can be obtained from the TCP/IP stack [RFC1122]. | ||||
| Applications that do not send messages that exceed the effective PMTU | ||||
| of IPv4 or IPv6 need not implement any of the above mechanisms. Note | of IPv4 or IPv6 need not implement any of the above mechanisms. Note | |||
| that the presence of tunnels can cause fragmentation even when | that the presence of tunnels can cause fragmentation even when | |||
| applications send messages that do not exceed the minimum PMTU, so | applications send messages that do not exceed the effective PMTU, so | |||
| implementing PMTU discovery will still be beneficial in some cases. | implementing PMTU discovery will still be beneficial in some cases. | |||
| 3.3. Reliability Guidelines | 3.3. Reliability Guidelines | |||
| Application designers are generally aware that UDP does not provide | Application designers are generally aware that UDP does not provide | |||
| any reliability. Often, this is a main reason to consider UDP as a | any reliability, e.g., it does not retransmit any lost packets. | |||
| transport. Applications that do require reliable message delivery | Often, this is a main reason to consider UDP as a transport. | |||
| SHOULD implement an appropriate mechanism themselves. | Applications that do require reliable message delivery MUST implement | |||
| an appropriate mechanism themselves. | ||||
| UDP also does not protect against message duplication, i.e., an | UDP also does not protect against message duplication, i.e., an | |||
| application may receive multiple copies of the same message. | application may receive multiple copies of the same message. | |||
| Application designers SHOULD verify that their application handles | Application designers SHOULD verify that their application handles | |||
| message duplication gracefully, and may consequently need to | message duplication gracefully, and may consequently need to | |||
| implement mechanisms to detect duplicates. Even if message reception | implement mechanisms to detect duplicates. Even if message reception | |||
| triggers idempotent operations, applications may want to suppress | triggers idempotent operations, applications may want to suppress | |||
| duplicate messages to reduce load. | duplicate messages to reduce load. | |||
| Finally, the Internet can significantly delay some packets with | In addition, the Internet can significantly delay some packets with | |||
| respect to others, e.g., due to routing transients, intermittent | respect to others, e.g., due to routing transients, intermittent | |||
| connectivity, or mobility. This can cause message reordering, where | connectivity, or mobility. This can cause message reordering, where | |||
| UDP messages arrive at the receiver in an order different from the | UDP messages arrive at the receiver in an order different from the | |||
| transmission order. Applications that require ordered delivery | transmission order. Applications that require ordered delivery MUST | |||
| SHOULD reestablish message ordering themselves. Furthermore, it is | reestablish message ordering themselves. | |||
| important to note that delay spikes can be very large. This can | ||||
| cause reordered packets to arrive many seconds after they were sent. | Finally, it is important to note that delay spikes can be very large. | |||
| The Internet protocol suite defines the Maximum Segment Lifetime | This can cause reordered packets to arrive many seconds after they | |||
| (MSL) as 2 minutes [RFC0793]. This is the maximum delay a packet | were sent. The Internet protocol suite defines the Maximum Segment | |||
| should experience. Applications SHOULD be robust to the reception of | Lifetime (MSL) for TCP segments as 2 minutes [RFC0793]; this value | |||
| delayed or duplicate packets that are received within this two minute | applies to all IP datagrams, and hence also to UDP. The MSL is the | |||
| interval. | maximum delay a packet should experience. Applications SHOULD be | |||
| robust to the reception of delayed or duplicate packets that are | ||||
| received within this two-minute interval. | ||||
| Applications that require reliable and ordered message delivery | ||||
| SHOULD choose an IETF standard transport protocol that provides these | ||||
| features. If this is not possible, it will need to implement a set | ||||
| of appropriate mechanisms itself. | ||||
| 3.4. Checksum Guidelines | 3.4. Checksum Guidelines | |||
| The UDP header includes an optional, 16-bit ones' complement checksum | The UDP header includes an optional, 16-bit ones-complement checksum | |||
| that provides an integrity check. The UDP checksum provides | that provides an integrity check. This results in a relatively weak | |||
| assurance that the payload was not corrupted in transit. It also | protection from a coding point of view [RFC3819] and application | |||
| verifies that the packet was delivered to the intended destination, | developers SHOULD implement additional checks where data integrity is | |||
| because it covers the IP addresses, port numbers and protocol number, | important, e.g., through a Cyclic Redundancy Check (CRC) included | |||
| and it verifies that the packet is not truncated or padded, because | with the data to verify the integrity of an entire object/file sent | |||
| it covers the size field. It therefore protects an application | over UDP service. | |||
| against receiving corrupted payload data in place of, or in addition | ||||
| to, the data that was sent. | ||||
| Applications SHOULD enable UDP checksums, although [RFC0793] permits | The UDP checksum provides assurance that the payload was not | |||
| corrupted in transit. It also allows the receiver to verify that it | ||||
| was the intended destination of the packet, because it covers the IP | ||||
| addresses, port numbers and protocol number, and it verifies that the | ||||
| packet is not truncated or padded, because it covers the size field. | ||||
| It therefore protects an application against receiving corrupted | ||||
| payload data in place of, or in addition to, the data that was sent. | ||||
| Applications SHOULD enable UDP checksums, although [RFC0768] permits | ||||
| the option to disable their use. Applications that choose to disable | the option to disable their use. Applications that choose to disable | |||
| UDP checksums when transmitting over IPv4 therefore MUST NOT make | UDP checksums when transmitting over IPv4 therefore MUST NOT make | |||
| assumptions regarding the correctness of received data and MUST | assumptions regarding the correctness of received data and MUST | |||
| behave correctly when a message is received that was originally sent | behave correctly when a message is received that was originally sent | |||
| to a different destination or is otherwise corrupted. The use of the | to a different destination or is otherwise corrupted. The use of the | |||
| UDP checksum is MANDATORY when applications transmit UDP over IPv6 | UDP checksum is MANDATORY when applications transmit UDP over IPv6 | |||
| [RFC2460] and applications consequently MUST NOT disable their use. | [RFC2460]. | |||
| (The IPv6 header does not have a separate checksum field to protect | ||||
| the IP addressing information.) | ||||
| The UDP checksum provides relatively weak protection from a coding | ||||
| point of view [RFC3819] and, where data integrity is important, | ||||
| application developers SHOULD provide additional checks, e.g., | ||||
| through a Cyclic Redundancy Check (CRC) included with the data to | ||||
| verify the integrity of an entire object/file sent over UDP service. | ||||
| 3.4.1. UDP-Lite | 3.4.1. UDP-Lite | |||
| A special class of applications can derive benefit from having | A special class of applications can derive benefit from having | |||
| partially damaged payloads delivered, rather than discarded, when | partially damaged payloads delivered, rather than discarded, when | |||
| using paths that include error-prone links. Such applications can | using paths that include error-prone links. Such applications can | |||
| tolerate payload corruption and MAY choose to use the Lightweight | tolerate payload corruption and MAY choose to use the Lightweight | |||
| User Datagram Protocol (UDP-Lite) [RFC3828] variant of UDP instead of | User Datagram Protocol (UDP-Lite) [RFC3828] variant of UDP instead of | |||
| basic UDP. Applications that choose to use UDP-Lite instead of UDP | basic UDP. Applications that choose to use UDP-Lite instead of UDP | |||
| MUST still follow the congestion control and other guidelines | MUST still follow the congestion control and other guidelines | |||
| described for use with UDP in Section 3.1. | described for use with UDP in Section 3. | |||
| UDP-Lite changes the semantics of the UDP "payload length" field to | UDP-Lite changes the semantics of the UDP "payload length" field to | |||
| that of a "checksum coverage length" field. Otherwise, UDP-Lite is | that of a "checksum coverage length" field. Otherwise, UDP-Lite is | |||
| semantically identical to UDP. The interface of UDP-Lite differs | semantically identical to UDP. The interface of UDP-Lite differs | |||
| from that of UDP by the addition of a single (socket) option that | from that of UDP by the addition of a single (socket) option that | |||
| communicates a checksum coverage length value: at the sender, this | communicates a checksum coverage length value: at the sender, this | |||
| specifies the intended checksum coverage, with the remaining | specifies the intended checksum coverage, with the remaining | |||
| unprotected part of the payload called the "error insensitive part". | unprotected part of the payload called the "error insensitive part". | |||
| If required, an application may dynamically modify this length value, | If required, an application may dynamically modify this length value, | |||
| e.g., to offer greater protection to some messages. UDP-Lite always | e.g., to offer greater protection to some messages. UDP-Lite always | |||
| skipping to change at page 12, line 7 ¶ | skipping to change at page 13, line 51 ¶ | |||
| Many applications that use UDP for communication operate across | Many applications that use UDP for communication operate across | |||
| middleboxes without needing to employ additional mechanisms. One | middleboxes without needing to employ additional mechanisms. One | |||
| example is the DNS, which has a strict request-response communication | example is the DNS, which has a strict request-response communication | |||
| pattern that typically completes within seconds. | pattern that typically completes within seconds. | |||
| Other applications may experience communication failures when | Other applications may experience communication failures when | |||
| middleboxes destroy the per-flow state associated with an application | middleboxes destroy the per-flow state associated with an application | |||
| session during periods when the application does not exchange any UDP | session during periods when the application does not exchange any UDP | |||
| traffic. Applications SHOULD be able to gracefully handle such | traffic. Applications SHOULD be able to gracefully handle such | |||
| communication failures and implement mechanisms to re-establish their | communication failures and implement mechanisms to re-establish | |||
| UDP sessions. | application-layer sessions and state. | |||
| For some applications, such as media transmissions, this re- | For some applications, such as media transmissions, this re- | |||
| synchronization is highly undesirable, because it can cause user- | synchronization is highly undesirable, because it can cause user- | |||
| perceivable playback artifacts. Such specialized applications MAY | perceivable playback artifacts. Such specialized applications MAY | |||
| send periodic keep-alive messages to attempt to refresh middlebox | send periodic keep-alive messages to attempt to refresh middlebox | |||
| state. It is important to note that keep-alive messages are NOT | state. It is important to note that keep-alive messages are NOT | |||
| RECOMMENDED for general use - they are unnecessary for many | RECOMMENDED for general use - they are unnecessary for many | |||
| applications and can consume significant amounts of system and | applications and can consume significant amounts of system and | |||
| network resources. | network resources. | |||
| skipping to change at page 13, line 19 ¶ | skipping to change at page 15, line 15 ¶ | |||
| UDP messages may be directly sent and received, without any | UDP messages may be directly sent and received, without any | |||
| connection setup. Using the sockets API, applications can receive | connection setup. Using the sockets API, applications can receive | |||
| packets from more than one IP source address on a single UDP socket. | packets from more than one IP source address on a single UDP socket. | |||
| Some servers use this to exchange data with more than one remote host | Some servers use this to exchange data with more than one remote host | |||
| through a single UDP socket at the same time. When applications need | through a single UDP socket at the same time. When applications need | |||
| to ensure that they receive packets from a particular source address, | to ensure that they receive packets from a particular source address, | |||
| they MUST implement corresponding checks at the application layer or | they MUST implement corresponding checks at the application layer or | |||
| explicitly request that the operating system filter the received | explicitly request that the operating system filter the received | |||
| packets. | packets. | |||
| If a client/server application executes on a host with more than one | ||||
| IP interface, the application MUST ensure that it sends any UDP | ||||
| responses in reply to arriving UDP datagrams with an IP source | ||||
| address that matches the IP destination address of the datagram that | ||||
| carried the request. | ||||
| A UDP receiver can receive a valid UDP datagram with a zero-length | ||||
| payload. Note that this is different from a return value of zero | ||||
| from a read() socket call, which for TCP indicates the end of the | ||||
| connection. | ||||
| Many operating systems also allow a UDP socket to be connected, i.e., | Many operating systems also allow a UDP socket to be connected, i.e., | |||
| allow to bind a UDP socket to a specific pair of addresses and ports. | to bind a UDP socket to a specific pair of addresses and ports. This | |||
| This is similar to the corresponding TCP sockets API functionality. | is similar to the corresponding TCP sockets API functionality. | |||
| However, for UDP, this is only a local operation that serves to | However, for UDP, this is only a local operation that serves to | |||
| simplify the local send/receive functions and to filter the traffic | simplify the local send/receive functions and to filter the traffic | |||
| for the specified addresses and ports. Binding a UDP socket does not | for the specified addresses and ports. Binding a UDP socket does not | |||
| establish a connection - UDP does not notify the remote end when a | establish a connection - UDP does not notify the remote end when a | |||
| local UDP socket is bound. | local UDP socket is bound. Binding a socket also allows configuring | |||
| options that affect the UDP or IP layers, for example, use of the UDP | ||||
| checksum or IP source routing. On some stacks, a bound socket also | ||||
| allows an application to be notified when ICMP error messages are | ||||
| received for its transmissions [RFC1122]. | ||||
| UDP provides no flow-control. This is another reason why UDP-based | UDP provides no flow-control. This is another reason why UDP-based | |||
| applications need to be robust in the presence of packet loss. This | applications need to be robust in the presence of packet loss. This | |||
| loss can also occur within the sending host, when an application | loss can also occur within the sending host, when an application | |||
| sends data faster than the line rate of the outbound network | sends data faster than the line rate of the outbound network | |||
| interface. It can also occur on the destination, where receive calls | interface. It can also occur on the destination, where receive calls | |||
| fail to return data when the application issues them too frequently | fail to return data when the application issues them too frequently | |||
| (i.e., when no new data has arrived) or not frequently enough (i.e., | (i.e., when no new data has arrived) or not frequently enough (i.e., | |||
| such that the receive buffer overflows). Robust flow control | such that the receive buffer overflows). Robust flow control | |||
| mechanisms are difficult to implement, which is why applications that | mechanisms are difficult to implement, which is why applications that | |||
| skipping to change at page 14, line 5 ¶ | skipping to change at page 16, line 14 ¶ | |||
| state. This prevents delayed packets from the closed connection | state. This prevents delayed packets from the closed connection | |||
| instance from being mistakenly associated with a later connection | instance from being mistakenly associated with a later connection | |||
| instance that happens to reuse the same IP address and port pairs. | instance that happens to reuse the same IP address and port pairs. | |||
| The UDP protocol does not implement such a mechanism. Therefore, | The UDP protocol does not implement such a mechanism. Therefore, | |||
| UDP-based applications need to robust to this case. One application | UDP-based applications need to robust to this case. One application | |||
| may close a socket or terminate, followed in time by another | may close a socket or terminate, followed in time by another | |||
| application receiving on the same port. This later application may | application receiving on the same port. This later application may | |||
| then receive packets intended for the first application that were | then receive packets intended for the first application that were | |||
| delayed in the network. | delayed in the network. | |||
| 3.7. ICMP Guidelines | ||||
| Applications can utilize ICMP error messages that the UDP layer | ||||
| passes up for a variety of purposes [RFC1122]. Applications SHOULD | ||||
| validate the information in the ICMP message payload, e.g., that the | ||||
| reported error corresponds to a UDP datagram that the application | ||||
| actually sent. | ||||
| Any application response to ICMP error messages SHOULD be robust to | ||||
| temporary routing failures, i.e., transient ICMP "unreachable" | ||||
| messages should not normally cause a communication abort. | ||||
| Applications are RECOMMENDED to appropriately respond to ICMP | ||||
| messages generated in response to transmitted traffic. A correct | ||||
| response often requires context, such as local state about | ||||
| communication instances to each destination, that although readily | ||||
| available in connection-orientated transport protocols is not always | ||||
| maintained by UDP-based applications. | ||||
| 4. Security Considerations | 4. Security Considerations | |||
| UDP does not provide communications security. Applications that need | UDP does not provide communications security. Applications that need | |||
| to protect their communications against eavesdropping, tampering, or | to protect their communications against eavesdropping, tampering, or | |||
| message forgery SHOULD employ end-to-end security services provided | message forgery SHOULD employ end-to-end security services provided | |||
| by other IETF protocols. | by other IETF protocols. | |||
| One option of securing UDP communications is with IPsec [RFC4301], | One option of securing UDP communications is with IPsec [RFC4301], | |||
| which provides authentication [RFC4302] and encryption [RFC4303] for | which can provide authentication for flows of IP packets through the | |||
| flows of IP packets. Applications use the Internet Key Exchange | Authentication Header (AH) [RFC4302] and encryption and/or | |||
| (IKE) [RFC4306] to configure IPsec for their sessions. Depending on | authentication through the Encapsulating Security Payload (ESP) | |||
| how IPsec is configured for a flow, it can authenticate or encrypt | [RFC4303]. Applications use the Internet Key Exchange (IKE) | |||
| the UDP headers as well as UDP payloads. In order to be able to use | [RFC4306] to configure IPsec for their sessions. Depending on how | |||
| IPsec, an application must execute on an operating system that | IPsec is configured for a flow, it can authenticate or encrypt the | |||
| implements the IPsec protocol suite. | UDP headers as well as UDP payloads. If an application only requires | |||
| authentication, ESP with no encryption but with authentication is | ||||
| often a better option than AH, because ESP can operate across | ||||
| middleboxes. In order to be able to use IPsec, an application must | ||||
| execute on an operating system that implements the IPsec protocol | ||||
| suite. | ||||
| Not all operating systems support IPsec. A second option of securing | Although it is possible to use IPsec to secure UDP communications, | |||
| UDP communications is through Datagram Transport Layer Security | not all operating systems support IPsec or allow applications to | |||
| (DTLS) [RFC4347]. DTLS provides communication privacy by encrypting | easily configure it for their flows. A second option of securing UDP | |||
| UDP payloads. It does not protect the UDP headers. Applications can | communications is through Datagram Transport Layer Security (DTLS) | |||
| [RFC4347]. DTLS provides communication privacy by encrypting UDP | ||||
| payloads. It does not protect the UDP headers. Applications can | ||||
| implement DTLS without relying on support from the operating system. | implement DTLS without relying on support from the operating system. | |||
| Many other options of authenticating or encrypting UDP payloads | Many other options of authenticating or encrypting UDP payloads | |||
| exist, including other IETF standards, such as S/MIME [RFC3851] or | exist, including other IETF standards, such as S/MIME [RFC3851] or | |||
| PGP [RFC2440], as well as many non-IETF protocols. Like congestion | PGP [RFC4880], security frameworks such as GSS-API [RFC1964], SASL | |||
| control mechanisms, security mechanisms are difficult to design and | [RFC4422] and EAP [RFC3748], as well as many non-IETF protocols. Out | |||
| implement correctly. It is hence RECOMMENDED that applications | of these, S/MIME and PGP are likely to better suit less immediate and | |||
| employ well-known standard security mechanisms such as IPsec or DTLS, | less ephemeral communications than typically the case for UDP | |||
| rather than inventing their own. | applications, because they generally require public-key operations | |||
| for each message. | ||||
| Like congestion control mechanisms, security mechanisms are difficult | ||||
| to design and implement correctly. It is hence RECOMMENDED that | ||||
| applications employ well-known standard security mechanisms such as | ||||
| DTLS or IPsec, rather than inventing their own. | ||||
| In terms of congestion control, [RFC2309] and [RFC2914] discuss the | In terms of congestion control, [RFC2309] and [RFC2914] discuss the | |||
| dangers of congestion-unresponsive flows to the Internet. This | dangers of congestion-unresponsive flows to the Internet. This | |||
| document provides guidelines to designers of UDP-based applications | document provides guidelines to designers of UDP-based applications | |||
| to congestion-control their transmissions. As such, it does not | to congestion-control their transmissions, and does not raise any | |||
| raise any additional security concerns. | additional security concerns. | |||
| 5. Summary | 5. Summary | |||
| This section summarizes the guidelines made in Section 3 and | This section summarizes the guidelines made in Section 3 and | |||
| Section 4 in a tabular format in Table 1 for easy referencing. | Section 4 in a tabular format in Table 1 for easy referencing. | |||
| +---------+---------------------------------------------------------+ | +---------------------------------------------------------+---------+ | |||
| | Section | Recommendation | | | Recommendation | Section | | |||
| +---------+---------------------------------------------------------+ | +---------------------------------------------------------+---------+ | |||
| | 3 | MUST accommodate wide range of Internet path conditions | | | MUST accommodate wide range of Internet path conditions | 3 | | |||
| | | SHOULD use a full-featured transport (TCP, SCTP, DCCP) | | | SHOULD use a full-featured transport (TCP, SCTP, DCCP) | | | |||
| | | | | | | | | |||
| | 3.1 | SHOULD control rate of transmission | | | SHOULD control rate of transmission | 3.1 | | |||
| | | SHOULD perform congestion control over all traffic | | | SHOULD perform congestion control over all traffic | | | |||
| | | | | | | | | |||
| | 3.1.1 | for bulk transfers, | | | for bulk transfers, | 3.1.1 | | |||
| | | SHOULD consider implementing TFRC | | | SHOULD consider implementing TFRC | | | |||
| | | else, SHOULD otherwise use bandwidth similar to TCP | | | else, SHOULD otherwise use bandwidth similar to TCP | | | |||
| | | | | | | | | |||
| | 3.1.2 | for non-bulk transfers, | | | for non-bulk transfers, | 3.1.2 | | |||
| | | SHOULD measure RTT and transmit 1 message/RTT | | | SHOULD measure RTT and transmit 1 message/RTT | | | |||
| | | else, SHOULD send at most 1 message every 3 seconds | | | else, SHOULD send at most 1 message every 3 seconds | | | |||
| | | | | | | | | |||
| | 3.2 | SHOULD NOT send messages that exceed the PMTU, i.e., | | | SHOULD NOT send messages that exceed the PMTU, i.e., | 3.2 | | |||
| | | SHOULD discover PMTU or send messages < minimum PMTU | | | SHOULD discover PMTU or send messages < minimum PMTU | | | |||
| | | | | | | | | |||
| | 3.3 | SHOULD handle message loss, duplication, reordering | | | SHOULD handle message loss, duplication, reordering | 3.3 | | |||
| | | | | | | | | |||
| | 3.4 | SHOULD enable UDP checksum | | | SHOULD enable UDP checksum | 3.4 | | |||
| | 3.4.1 | else, MAY use UDP-Lite with suitable checksum coverage | | | else, MAY use UDP-Lite with suitable checksum coverage | 3.4.1 | | |||
| | | | | | | | | |||
| | 3.5 | SHOULD NOT always send middlebox keep-alives | | | SHOULD NOT always send middlebox keep-alives | 3.5 | | |||
| | | MAY use keep-alives when needed (min. interval 15 sec) | | | MAY use keep-alives when needed (min. interval 15 sec) | | | |||
| | | | | | | | | |||
| | 3.6 | MUST check IP source address | | | MUST check IP source address | 3.6 | | |||
| | | | | | | | | |||
| | 4 | SHOULD use standard IETF security protocols when needed | | | SHOULD use standard IETF security protocols when needed | 4 | | |||
| +---------+---------------------------------------------------------+ | +---------------------------------------------------------+---------+ | |||
| Table 1: Summary of recommendations. | Table 1: Summary of recommendations. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| This document raises no IANA considerations. | This document raises no IANA considerations. | |||
| 7. Acknowledgments | 7. Acknowledgments | |||
| Thanks to Paul Aitken, Mark Allman, Wesley Eddy, Sally Floyd, Philip | Thanks to Paul Aitken, Mark Allman, Francois Audet, Stewart Bryant, | |||
| Matthews, Joerg Ott, Colin Perkins, Pasi Sarolahti, Joe Touch and | Remi Denis-Courmont, Wesley Eddy, Sally Floyd, Jeffrey Hutzelman, | |||
| Magnus Westerlund for their comments on this document. | Tero Kivinen, Philip Matthews, Joerg Ott, Colin Perkins, Carlos | |||
| Pignataro, Pasi Sarolahti, Joe Touch and Magnus Westerlund for their | ||||
| comments on this document. | ||||
| The middlebox traversal guidelines in Section 3.5 incorporate ideas | The middlebox traversal guidelines in Section 3.5 incorporate ideas | |||
| from Section 5 of [I-D.ford-behave-app] by Bryan Ford, Pyda Srisuresh | from Section 5 of [I-D.ford-behave-app] by Bryan Ford, Pyda Srisuresh | |||
| and Dan Kegel. | and Dan Kegel. | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [POSIX] IEEE Std. 1003.1-2001, "Standard for Information | ||||
| Technology - Portable Operating System Interface (POSIX)", | ||||
| Open Group Technical Standard: Base Specifications Issue | ||||
| 6, ISO/IEC 9945:2002, December 2001. | ||||
| [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
| August 1980. | August 1980. | |||
| [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
| RFC 793, September 1981. | RFC 793, September 1981. | |||
| [RFC1122] Braden, R., "Requirements for Internet Hosts - | ||||
| Communication Layers", STD 3, RFC 1122, October 1989. | ||||
| [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | |||
| November 1990. | November 1990. | |||
| [RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery | [RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery | |||
| for IP version 6", RFC 1981, August 1996. | for IP version 6", RFC 1981, August 1996. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | ||||
| (IPv6) Specification", RFC 2460, December 1998. | ||||
| [RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, | [RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, | |||
| RFC 2914, September 2000. | RFC 2914, September 2000. | |||
| [RFC2960] Stewart, R., Xie, Q., Morneault, K., Sharp, C., | ||||
| Schwarzbauer, H., Taylor, T., Rytina, I., Kalla, M., | ||||
| Zhang, L., and V. Paxson, "Stream Control Transmission | ||||
| Protocol", RFC 2960, October 2000. | ||||
| [RFC2988] Paxson, V. and M. Allman, "Computing TCP's Retransmission | [RFC2988] Paxson, V. and M. Allman, "Computing TCP's Retransmission | |||
| Timer", RFC 2988, November 2000. | Timer", RFC 2988, November 2000. | |||
| [RFC3448] Handley, M., Floyd, S., Padhye, J., and J. Widmer, "TCP | [RFC3448] Handley, M., Floyd, S., Padhye, J., and J. Widmer, "TCP | |||
| Friendly Rate Control (TFRC): Protocol Specification", | Friendly Rate Control (TFRC): Protocol Specification", | |||
| RFC 3448, January 2003. | RFC 3448, January 2003. | |||
| [RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., | ||||
| Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. | ||||
| Wood, "Advice for Internet Subnetwork Designers", BCP 89, | ||||
| RFC 3819, July 2004. | ||||
| [RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., and | [RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., and | |||
| G. Fairhurst, "The Lightweight User Datagram Protocol | G. Fairhurst, "The Lightweight User Datagram Protocol | |||
| (UDP-Lite)", RFC 3828, July 2004. | (UDP-Lite)", RFC 3828, July 2004. | |||
| [RFC4301] Kent, S. and K. Seo, "Security Architecture for the | [RFC4787] Audet, F. and C. Jennings, "Network Address Translation | |||
| Internet Protocol", RFC 4301, December 2005. | (NAT) Behavioral Requirements for Unicast UDP", BCP 127, | |||
| RFC 4787, January 2007. | ||||
| [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | ||||
| December 2005. | ||||
| [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | ||||
| RFC 4303, December 2005. | ||||
| [RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", | ||||
| RFC 4306, December 2005. | ||||
| [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram | ||||
| Congestion Control Protocol (DCCP)", RFC 4340, March 2006. | ||||
| [RFC4347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | ||||
| Security", RFC 4347, April 2006. | ||||
| [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | |||
| Discovery", RFC 4821, March 2007. | Discovery", RFC 4821, March 2007. | |||
| 8.2. Informative References | 8.2. Informative References | |||
| [FABER] Faber, T., Touch, J., and W. Yue, "The TIME-WAIT State in | [FABER] Faber, T., Touch, J., and W. Yue, "The TIME-WAIT State in | |||
| TCP and Its Effect on Busy Servers", Proc. IEEE Infocom, | TCP and Its Effect on Busy Servers", Proc. IEEE Infocom, | |||
| March 1999. | March 1999. | |||
| [I-D.floyd-dccp-ccid4] | ||||
| Floyd, S. and E. Kohler, "Profile for Datagram Congestion | ||||
| Control Protocol (DCCP) Congestion ID 4: TCP-Friendly | ||||
| Rate Control for Small Packets (TFRC-SP)", | ||||
| draft-floyd-dccp-ccid4-01 (work in progress), July 2007. | ||||
| [I-D.ford-behave-app] | [I-D.ford-behave-app] | |||
| Ford, B., "Application Design Guidelines for Traversal | Ford, B., "Application Design Guidelines for Traversal | |||
| through Network Address Translators", | through Network Address Translators", | |||
| draft-ford-behave-app-05 (work in progress), March 2007. | draft-ford-behave-app-05 (work in progress), March 2007. | |||
| [I-D.ietf-dccp-ccid4] | ||||
| Floyd, S. and E. Kohler, "Profile for Datagram Congestion | ||||
| Control Protocol (DCCP) Congestion ID 4: TCP-Friendly | ||||
| Rate Control for Small Packets (TFRC-SP)", | ||||
| draft-ietf-dccp-ccid4-00 (work in progress), October 2007. | ||||
| [I-D.ietf-dccp-rfc3448bis] | [I-D.ietf-dccp-rfc3448bis] | |||
| Handley, M., "TCP Friendly Rate Control (TFRC): Protocol | Handley, M., "TCP Friendly Rate Control (TFRC): Protocol | |||
| Specification", draft-ietf-dccp-rfc3448bis-02 (work in | Specification", draft-ietf-dccp-rfc3448bis-02 (work in | |||
| progress), July 2007. | progress), July 2007. | |||
| [I-D.ietf-mmusic-ice] | [I-D.ietf-mmusic-ice] | |||
| Rosenberg, J., "Interactive Connectivity Establishment | Rosenberg, J., "Interactive Connectivity Establishment | |||
| (ICE): A Protocol for Network Address Translator (NAT) | (ICE): A Protocol for Network Address Translator (NAT) | |||
| Traversal for Offer/Answer Protocols", | Traversal for Offer/Answer Protocols", | |||
| draft-ietf-mmusic-ice-18 (work in progress), | draft-ietf-mmusic-ice-19 (work in progress), October 2007. | |||
| September 2007. | ||||
| [I-D.ietf-nsis-nslp-natfw] | [I-D.ietf-nsis-nslp-natfw] | |||
| Stiemerling, M., "NAT/Firewall NSIS Signaling Layer | Stiemerling, M., "NAT/Firewall NSIS Signaling Layer | |||
| Protocol (NSLP)", draft-ietf-nsis-nslp-natfw-15 (work in | Protocol (NSLP)", draft-ietf-nsis-nslp-natfw-15 (work in | |||
| progress), July 2007. | progress), July 2007. | |||
| [I-D.ietf-nsis-ntlp] | [I-D.ietf-nsis-ntlp] | |||
| Schulzrinne, H. and R. Hancock, "GIST: General Internet | Schulzrinne, H. and R. Hancock, "GIST: General Internet | |||
| Signalling Transport", draft-ietf-nsis-ntlp-14 (work in | Signalling Transport", draft-ietf-nsis-ntlp-14 (work in | |||
| progress), July 2007. | progress), July 2007. | |||
| [I-D.wing-behave-nat-control-stun-usage] | [I-D.wing-behave-nat-control-stun-usage] | |||
| Wing, D., "Discovering, Querying, and Controlling | Wing, D., Rosenberg, J., and H. Tschofenig, "Discovering, | |||
| Firewalls and NATs using STUN", | Querying, and Controlling Firewalls and NATs", | |||
| draft-wing-behave-nat-control-stun-usage-03 (work in | draft-wing-behave-nat-control-stun-usage-05 (work in | |||
| progress), July 2007. | progress), October 2007. | |||
| [POSIX] IEEE Std. 1003.1-2001, "Standard for Information | ||||
| Technology - Portable Operating System Interface (POSIX)", | ||||
| Open Group Technical Standard: Base Specifications Issue | ||||
| 6, ISO/IEC 9945:2002, December 2001. | ||||
| [RFC0896] Nagle, J., "Congestion control in IP/TCP internetworks", | [RFC0896] Nagle, J., "Congestion control in IP/TCP internetworks", | |||
| RFC 896, January 1984. | RFC 896, January 1984. | |||
| [RFC1122] Braden, R., "Requirements for Internet Hosts - | ||||
| Communication Layers", STD 3, RFC 1122, October 1989. | ||||
| [RFC1536] Kumar, A., Postel, J., Neuman, C., Danzig, P., and S. | [RFC1536] Kumar, A., Postel, J., Neuman, C., Danzig, P., and S. | |||
| Miller, "Common DNS Implementation Errors and Suggested | Miller, "Common DNS Implementation Errors and Suggested | |||
| Fixes", RFC 1536, October 1993. | Fixes", RFC 1536, October 1993. | |||
| [RFC1964] Linn, J., "The Kerberos Version 5 GSS-API Mechanism", | ||||
| RFC 1964, June 1996. | ||||
| [RFC2309] Braden, B., Clark, D., Crowcroft, J., Davie, B., Deering, | [RFC2309] Braden, B., Clark, D., Crowcroft, J., Davie, B., Deering, | |||
| S., Estrin, D., Floyd, S., Jacobson, V., Minshall, G., | S., Estrin, D., Floyd, S., Jacobson, V., Minshall, G., | |||
| Partridge, C., Peterson, L., Ramakrishnan, K., Shenker, | Partridge, C., Peterson, L., Ramakrishnan, K., Shenker, | |||
| S., Wroclawski, J., and L. Zhang, "Recommendations on | S., Wroclawski, J., and L. Zhang, "Recommendations on | |||
| Queue Management and Congestion Avoidance in the | Queue Management and Congestion Avoidance in the | |||
| Internet", RFC 2309, April 1998. | Internet", RFC 2309, April 1998. | |||
| [RFC2440] Callas, J., Donnerhacke, L., Finney, H., and R. Thayer, | ||||
| "OpenPGP Message Format", RFC 2440, November 1998. | ||||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | ||||
| (IPv6) Specification", RFC 2460, December 1998. | ||||
| [RFC3048] Whetten, B., Vicisano, L., Kermode, R., Handley, M., | [RFC3048] Whetten, B., Vicisano, L., Kermode, R., Handley, M., | |||
| Floyd, S., and M. Luby, "Reliable Multicast Transport | Floyd, S., and M. Luby, "Reliable Multicast Transport | |||
| Building Blocks for One-to-Many Bulk-Data Transfer", | Building Blocks for One-to-Many Bulk-Data Transfer", | |||
| RFC 3048, January 2001. | RFC 3048, January 2001. | |||
| [RFC3124] Balakrishnan, H. and S. Seshan, "The Congestion Manager", | [RFC3124] Balakrishnan, H. and S. Seshan, "The Congestion Manager", | |||
| RFC 3124, June 2001. | RFC 3124, June 2001. | |||
| [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
| A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
| skipping to change at page 19, line 32 ¶ | skipping to change at page 22, line 8 ¶ | |||
| Jacobson, "RTP: A Transport Protocol for Real-Time | Jacobson, "RTP: A Transport Protocol for Real-Time | |||
| Applications", STD 64, RFC 3550, July 2003. | Applications", STD 64, RFC 3550, July 2003. | |||
| [RFC3551] Schulzrinne, H. and S. Casner, "RTP Profile for Audio and | [RFC3551] Schulzrinne, H. and S. Casner, "RTP Profile for Audio and | |||
| Video Conferences with Minimal Control", STD 65, RFC 3551, | Video Conferences with Minimal Control", STD 65, RFC 3551, | |||
| July 2003. | July 2003. | |||
| [RFC3738] Luby, M. and V. Goyal, "Wave and Equation Based Rate | [RFC3738] Luby, M. and V. Goyal, "Wave and Equation Based Rate | |||
| Control (WEBRC) Building Block", RFC 3738, April 2004. | Control (WEBRC) Building Block", RFC 3738, April 2004. | |||
| [RFC3748] Aboba, B., Blunk, L., Vollbrecht, J., Carlson, J., and H. | ||||
| Levkowetz, "Extensible Authentication Protocol (EAP)", | ||||
| RFC 3748, June 2004. | ||||
| [RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. | ||||
| Conrad, "Stream Control Transmission Protocol (SCTP) | ||||
| Partial Reliability Extension", RFC 3758, May 2004. | ||||
| [RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., | ||||
| Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. | ||||
| Wood, "Advice for Internet Subnetwork Designers", BCP 89, | ||||
| RFC 3819, July 2004. | ||||
| [RFC3851] Ramsdell, B., "Secure/Multipurpose Internet Mail | [RFC3851] Ramsdell, B., "Secure/Multipurpose Internet Mail | |||
| Extensions (S/MIME) Version 3.1 Message Specification", | Extensions (S/MIME) Version 3.1 Message Specification", | |||
| RFC 3851, July 2004. | RFC 3851, July 2004. | |||
| [RFC4301] Kent, S. and K. Seo, "Security Architecture for the | ||||
| Internet Protocol", RFC 4301, December 2005. | ||||
| [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | ||||
| December 2005. | ||||
| [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | ||||
| RFC 4303, December 2005. | ||||
| [RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", | ||||
| RFC 4306, December 2005. | ||||
| [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram | ||||
| Congestion Control Protocol (DCCP)", RFC 4340, March 2006. | ||||
| [RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram Congestion | [RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram Congestion | |||
| Control Protocol (DCCP) Congestion Control ID 2: TCP-like | Control Protocol (DCCP) Congestion Control ID 2: TCP-like | |||
| Congestion Control", RFC 4341, March 2006. | Congestion Control", RFC 4341, March 2006. | |||
| [RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for | [RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for | |||
| Datagram Congestion Control Protocol (DCCP) Congestion | Datagram Congestion Control Protocol (DCCP) Congestion | |||
| Control ID 3: TCP-Friendly Rate Control (TFRC)", RFC 4342, | Control ID 3: TCP-Friendly Rate Control (TFRC)", RFC 4342, | |||
| March 2006. | March 2006. | |||
| [RFC4347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | ||||
| Security", RFC 4347, April 2006. | ||||
| [RFC4422] Melnikov, A. and K. Zeilenga, "Simple Authentication and | ||||
| Security Layer (SASL)", RFC 4422, June 2006. | ||||
| [RFC4654] Widmer, J. and M. Handley, "TCP-Friendly Multicast | [RFC4654] Widmer, J. and M. Handley, "TCP-Friendly Multicast | |||
| Congestion Control (TFMCC): Protocol Specification", | Congestion Control (TFMCC): Protocol Specification", | |||
| RFC 4654, August 2006. | RFC 4654, August 2006. | |||
| [RFC4787] Audet, F. and C. Jennings, "Network Address Translation | [RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R. | |||
| (NAT) Behavioral Requirements for Unicast UDP", BCP 127, | Thayer, "OpenPGP Message Format", RFC 4880, November 2007. | |||
| RFC 4787, January 2007. | ||||
| [RFC4960] Stewart, R., "Stream Control Transmission Protocol", | ||||
| RFC 4960, September 2007. | ||||
| [RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4 Reassembly | [RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4 Reassembly | |||
| Errors at High Data Rates", RFC 4963, July 2007. | Errors at High Data Rates", RFC 4963, July 2007. | |||
| [RFC4987] Eddy, W., "TCP SYN Flooding Attacks and Common | [RFC4987] Eddy, W., "TCP SYN Flooding Attacks and Common | |||
| Mitigations", RFC 4987, August 2007. | Mitigations", RFC 4987, August 2007. | |||
| [STEVENS] Stevens, W., Fenner, B., and A. Rudoff, "UNIX Network | [STEVENS] Stevens, W., Fenner, B., and A. Rudoff, "UNIX Network | |||
| Programming, The sockets Networking API", Addison-Wesley, | Programming, The sockets Networking API", Addison-Wesley, | |||
| 2004. | 2004. | |||
| End of changes. 52 change blocks. | ||||
| 201 lines changed or deleted | 353 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||