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.floyd-dccp-ccid4]. | [RFC4341][RFC4342][I-D.ietf-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 50 | 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. 61 change blocks. | ||||
191 lines changed or deleted | 344 lines changed or added | |||
This html diff was produced by rfcdiff 1.34. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |