summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc5405.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc5405.txt')
-rw-r--r--doc/rfc/rfc5405.txt1515
1 files changed, 1515 insertions, 0 deletions
diff --git a/doc/rfc/rfc5405.txt b/doc/rfc/rfc5405.txt
new file mode 100644
index 0000000..78fe2f2
--- /dev/null
+++ b/doc/rfc/rfc5405.txt
@@ -0,0 +1,1515 @@
+
+
+
+
+
+
+Network Working Group L. Eggert
+Request for Comments: 5405 Nokia
+BCP: 145 G. Fairhurst
+Category: Best Current Practice University of Aberdeen
+ November 2008
+
+
+ Unicast UDP Usage Guidelines for Application Designers
+
+Status of This Memo
+
+ This document specifies an Internet Best Current Practices for the
+ Internet Community, and requests discussion and suggestions for
+ improvements. Distribution of this memo is unlimited.
+
+Copyright Notice
+
+ Copyright (c) 2008 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents (http://trustee.ietf.org/
+ license-info) in effect on the date of publication of this document.
+ Please review these documents carefully, as they describe your rights
+ and restrictions with respect to this document.
+
+Abstract
+
+ The User Datagram Protocol (UDP) provides a minimal message-passing
+ transport that has no inherent congestion control mechanisms.
+ Because congestion control is critical to the stable operation of the
+ Internet, applications and upper-layer protocols that choose to use
+ UDP as an Internet transport must employ mechanisms to prevent
+ congestion collapse and to establish some degree of fairness with
+ concurrent traffic. This document provides guidelines on the use of
+ UDP for the designers of unicast applications and upper-layer
+ protocols. Congestion control guidelines are a primary focus, but
+ the document also provides guidance on other topics, including
+ message sizes, reliability, checksums, and middlebox traversal.
+
+
+
+
+
+
+
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 1]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5
+ 3. UDP Usage Guidelines . . . . . . . . . . . . . . . . . . . . . 5
+ 3.1. Congestion Control Guidelines . . . . . . . . . . . . . . 6
+ 3.2. Message Size Guidelines . . . . . . . . . . . . . . . . . 11
+ 3.3. Reliability Guidelines . . . . . . . . . . . . . . . . . . 12
+ 3.4. Checksum Guidelines . . . . . . . . . . . . . . . . . . . 13
+ 3.5. Middlebox Traversal Guidelines . . . . . . . . . . . . . . 15
+ 3.6. Programming Guidelines . . . . . . . . . . . . . . . . . . 17
+ 3.7. ICMP Guidelines . . . . . . . . . . . . . . . . . . . . . 18
+ 4. Security Considerations . . . . . . . . . . . . . . . . . . . 19
+ 5. Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
+ 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 22
+ 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 22
+ 7.1. Normative References . . . . . . . . . . . . . . . . . . . 22
+ 7.2. Informative References . . . . . . . . . . . . . . . . . . 23
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 2]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+1. Introduction
+
+ The User Datagram Protocol (UDP) [RFC0768] provides a minimal,
+ unreliable, best-effort, message-passing transport to applications
+ and upper-layer protocols (both simply called "applications" in the
+ remainder of this document). Compared to other transport protocols,
+ UDP and its UDP-Lite variant [RFC3828] are unique in that they do not
+ establish end-to-end connections between communicating end systems.
+ UDP communication consequently does not incur connection
+ establishment and teardown overheads, and there is minimal associated
+ end system state. Because of these characteristics, UDP can offer a
+ very efficient communication transport to some applications.
+
+ A second unique characteristic of UDP is that it provides no inherent
+ congestion control mechanisms. On many platforms, applications can
+ send UDP datagrams at the line rate of the link interface, which is
+ often much greater than the available path capacity, and doing so
+ contributes to congestion along the path. [RFC2914] describes the
+ best current practice for congestion control in the Internet. It
+ identifies two major reasons why congestion control mechanisms are
+ critical for the stable operation of the Internet:
+
+ 1. The prevention of congestion collapse, i.e., a state where an
+ increase in network load results in a decrease in useful work
+ done by the network.
+
+ 2. The establishment of a degree of fairness, i.e., allowing
+ multiple flows to share the capacity of a path reasonably
+ equitably.
+
+ Because UDP itself provides no congestion control mechanisms, it is
+ up to the applications that use UDP for Internet communication to
+ employ suitable mechanisms to prevent congestion collapse and
+ establish a degree of fairness. [RFC2309] discusses the dangers of
+ congestion-unresponsive flows and states that "all UDP-based
+ streaming applications should incorporate effective congestion
+ avoidance mechanisms". This is an important requirement, even for
+ applications that do not use UDP for streaming. In addition,
+ congestion-controlled transmission is of benefit to an application
+ itself, because it can reduce self-induced packet loss, minimize
+ retransmissions, and hence reduce delays. Congestion control is
+ essential even at relatively slow transmission rates. For example,
+ an application that generates five 1500-byte UDP datagrams in one
+ second can already exceed the capacity of a 56 Kb/s path. For
+ applications that can operate at higher, potentially unbounded data
+ rates, congestion control becomes vital to prevent congestion
+ collapse and establish some degree of fairness. Section 3 describes
+ a number of simple guidelines for the designers of such applications.
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 3]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ A UDP datagram is carried in a single IP packet and is hence limited
+ to a maximum payload of 65,507 bytes for IPv4 and 65,527 bytes for
+ IPv6. The transmission of large IP packets usually requires IP
+ fragmentation. Fragmentation decreases communication reliability and
+ efficiency and should be avoided. IPv6 allows the option of
+ transmitting large packets ("jumbograms") without fragmentation when
+ all link layers along the path support this [RFC2675]. Some of the
+ guidelines in Section 3 describe how applications should determine
+ appropriate message sizes. Other sections of this document provide
+ guidance on reliability, checksums, and middlebox traversal.
+
+ This document provides guidelines and recommendations. Although most
+ unicast UDP applications are expected to follow these guidelines,
+ there do exist valid reasons why a specific application may decide
+ not to follow a given guideline. In such cases, it is RECOMMENDED
+ that the application designers document the rationale for their
+ design choice in the technical specification of their application or
+ protocol.
+
+ This document provides guidelines to designers of applications that
+ use UDP for unicast transmission, which is the most common case.
+ Specialized classes of applications use UDP for IP multicast
+ [RFC1112], broadcast [RFC0919], or anycast [RFC1546] transmissions.
+ The design of such specialized applications requires expertise that
+ goes beyond the simple, unicast-specific guidelines given in this
+ document. Multicast and broadcast senders may transmit to multiple
+ receivers across potentially very heterogeneous paths at the same
+ time, which significantly complicates congestion control, flow
+ control, and reliability mechanisms. The IETF has defined a reliable
+ multicast framework [RFC3048] and several building blocks to aid the
+ designers of multicast applications, such as [RFC3738] or [RFC4654].
+ Anycast senders must be aware that successive messages sent to the
+ same anycast IP address may be delivered to different anycast nodes,
+ i.e., arrive at different locations in the topology. It is not
+ intended that the guidelines in this document apply to multicast,
+ broadcast, or anycast applications that use UDP.
+
+ Finally, although this document specifically refers to unicast
+ applications that use UDP, the spirit of some of its guidelines also
+ applies to other message-passing applications and protocols
+ (specifically on the topics of congestion control, message sizes, and
+ reliability). Examples include signaling or control applications
+ that choose to run directly over IP by registering their own IP
+ protocol number with IANA. This document may provide useful
+ background reading to the designers of such applications and
+ protocols.
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 4]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+2. Terminology
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in BCP 14, RFC 2119
+ [RFC2119].
+
+3. UDP Usage Guidelines
+
+ Internet paths can have widely varying characteristics, including
+ transmission delays, available bandwidths, congestion levels,
+ reordering probabilities, supported message sizes, or loss rates.
+ Furthermore, the same Internet path can have very different
+ conditions over time. Consequently, applications that may be used on
+ the Internet MUST NOT make assumptions about specific path
+ characteristics. They MUST instead use mechanisms that let them
+ operate safely under very different path conditions. Typically, this
+ requires conservatively probing the current conditions of the
+ Internet path they communicate over to establish a transmission
+ behavior that it can sustain and that is reasonably fair to other
+ traffic sharing the path.
+
+ These mechanisms are difficult to implement correctly. For most
+ applications, the use of one of the existing IETF transport protocols
+ is the simplest method of acquiring the required mechanisms.
+ Consequently, the RECOMMENDED alternative to the UDP usage described
+ in the remainder of this section is the use of an IETF transport
+ protocol such as TCP [RFC0793], Stream Control Transmission Protocol
+ (SCTP) [RFC4960], and SCTP Partial Reliability Extension (SCTP-PR)
+ [RFC3758], or Datagram Congestion Control Protocol (DCCP) [RFC4340]
+ with its different congestion control types
+ [RFC4341][RFC4342][CCID4].
+
+ If used correctly, these more fully-featured transport protocols are
+ not as "heavyweight" as often claimed. For example, the TCP
+ algorithms have been continuously improved over decades, and have
+ reached a level of efficiency and correctness that custom
+ application-layer mechanisms will struggle to easily duplicate. In
+ addition, many TCP implementations allow connections to be tuned by
+ an application to its purposes. For example, TCP's "Nagle" algorithm
+ [RFC0896] can be disabled, improving communication latency at the
+ expense of more frequent -- but still congestion-controlled -- packet
+ transmissions. Another example is the TCP SYN cookie mechanism
+ [RFC4987], which is available on many platforms. TCP with SYN
+ cookies does not require a server to maintain per-connection state
+ until the connection is established. TCP also requires the end that
+ closes a connection to maintain the TIME-WAIT state that prevents
+ delayed segments from one connection instance from interfering with a
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 5]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ later one. Applications that are aware of and designed for this
+ behavior can shift maintenance of the TIME-WAIT state to conserve
+ resources by controlling which end closes a TCP connection [FABER].
+ Finally, TCP's built-in capacity-probing and awareness of the maximum
+ transmission unit supported by the path (PMTU) results in efficient
+ data transmission that quickly compensates for the initial connection
+ setup delay, in the case of transfers that exchange more than a few
+ segments.
+
+3.1. Congestion Control Guidelines
+
+ If an application or upper-layer protocol chooses not to use a
+ congestion-controlled transport protocol, it SHOULD control the rate
+ at which it sends UDP datagrams to a destination host, in order to
+ fulfill the requirements of [RFC2914]. It is important to stress
+ that an application SHOULD perform congestion control over all UDP
+ traffic it sends to a destination, independently from how it
+ generates this traffic. For example, an application that forks
+ multiple worker processes or otherwise uses multiple sockets to
+ generate UDP datagrams SHOULD perform congestion control over the
+ aggregate traffic.
+
+ Several approaches to perform congestion control are discussed in the
+ remainder of this section. Not all approaches discussed below are
+ appropriate for all UDP-transmitting applications. Section 3.1.1
+ discusses congestion control options for applications that perform
+ bulk transfers over UDP. Such applications can employ schemes that
+ sample the path over several subsequent RTTs during which data is
+ exchanged, in order to determine a sending rate that the path at its
+ current load can support. Other applications only exchange a few UDP
+ datagrams with a destination. Section 3.1.2 discusses congestion
+ control options for such "low data-volume" applications. Because
+ they typically do not transmit enough data to iteratively sample the
+ path to determine a safe sending rate, they need to employ different
+ kinds of congestion control mechanisms. 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
+ as an add-on to a finished application. Many of the mechanisms
+ discussed in the guidelines below require application support to
+ operate correctly. Application designers need to consider congestion
+ control throughout the design of their application, similar to how
+ they consider security aspects throughout the design process.
+
+ In the past, the IETF has also investigated integrated congestion
+ control mechanisms that act on the traffic aggregate between two
+ hosts, i.e., a framework such as the Congestion Manager [RFC3124],
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 6]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ where active sessions may share current congestion information in a
+ way that is independent of the transport protocol. Such mechanisms
+ have currently failed to see deployment, but would otherwise simplify
+ the design of congestion control mechanisms for UDP sessions, so that
+ they fulfill the requirements in [RFC2914].
+
+3.1.1. Bulk Transfer Applications
+
+ Applications that perform bulk transmission of data to a peer over
+ UDP, i.e., applications that exchange more than a small number of UDP
+ datagrams per RTT, SHOULD implement TCP-Friendly Rate Control (TFRC)
+ [RFC5348], window-based, TCP-like congestion control, or otherwise
+ ensure that the application complies with the congestion control
+ principles.
+
+ TFRC has been designed to provide both congestion control and
+ fairness in a way that is compatible with the IETF's other transport
+ protocols. If an application implements TFRC, it need not follow the
+ remaining guidelines in Section 3.1.1, because TFRC already addresses
+ them, but SHOULD still follow the remaining guidelines in the
+ subsequent subsections of Section 3.
+
+ Bulk transfer applications that choose not to implement TFRC or TCP-
+ like windowing SHOULD implement a congestion control scheme that
+ results in bandwidth use that competes fairly with TCP within an
+ order of magnitude. Section 2 of [RFC3551] suggests that
+ applications SHOULD monitor the packet loss rate to ensure that it is
+ within acceptable parameters. Packet loss is considered acceptable
+ if a TCP flow across the same network path under the same network
+ conditions would achieve an average throughput, measured on a
+ reasonable timescale, 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-magnitude" comparison in timescale and throughput.
+
+ Finally, some bulk transfer applications may choose not to implement
+ any congestion control mechanism and instead rely on transmitting
+ across reserved path capacity. This might be an acceptable choice
+ for a subset of restricted networking environments, but is by no
+ means a safe practice for operation in the Internet. When the UDP
+ traffic of such applications leaks out on unprovisioned Internet
+ paths, it can significantly degrade the performance of other traffic
+ sharing the path and even result in congestion collapse.
+ Applications that support an uncontrolled or unadaptive transmission
+ behavior SHOULD NOT do so by default and SHOULD instead require users
+ to explicitly enable this mode of operation.
+
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 7]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+3.1.2. Low Data-Volume Applications
+
+ When applications that at any time exchange only a small number of
+ UDP datagrams with a destination implement TFRC or one of the other
+ congestion control schemes in Section 3.1.1, the network sees little
+ benefit, because those mechanisms perform congestion control in a way
+ that is only effective for longer transmissions.
+
+ Applications that at any time exchange only a small number of UDP
+ datagrams with a destination SHOULD still control their transmission
+ behavior by not sending on average more than one UDP datagram per
+ round-trip time (RTT) to a destination. Similar to the
+ recommendation in [RFC1536], an application SHOULD maintain an
+ estimate of the RTT for any destination with which it communicates.
+ Applications SHOULD implement the algorithm specified in [RFC2988] to
+ compute a smoothed RTT (SRTT) estimate. They SHOULD also detect
+ packet loss and exponentially back-off their retransmission timer
+ when a loss event occurs. When implementing this scheme,
+ applications need to choose a sensible initial value for the RTT.
+ This value SHOULD generally be as conservative as possible for the
+ given application. TCP uses an initial value of 3 seconds [RFC2988],
+ which is also RECOMMENDED as an initial value for UDP applications.
+ SIP [RFC3261] and GIST [GIST] use an initial value of 500 ms, and
+ initial timeouts that are shorter than this are likely problematic in
+ many cases. It is also important to note that the initial timeout is
+ not the maximum possible timeout -- the RECOMMENDED algorithm in
+ [RFC2988] yields timeout values after a series of losses that are
+ much longer than the initial value.
+
+ Some applications cannot maintain a reliable RTT estimate for a
+ destination. The first case is that of applications that exchange
+ too few UDP datagrams with a peer to establish a statistically
+ accurate RTT estimate. Such applications MAY use a predetermined
+ transmission interval that is exponentially backed-off when packets
+ are lost. TCP uses an initial value of 3 seconds [RFC2988], which is
+ also RECOMMENDED as an initial value for UDP applications. SIP
+ [RFC3261] and GIST [GIST] use an interval of 500 ms, and shorter
+ values are likely problematic in many cases. As in the previous
+ case, note that the initial timeout is not the maximum possible
+ timeout.
+
+ A second class of applications cannot maintain an RTT estimate for a
+ destination, because the destination does not send return traffic.
+ Such applications SHOULD NOT send more than one UDP datagram every 3
+ seconds, and SHOULD use an even less aggressive rate when possible.
+ The 3-second interval was chosen based on TCP's retransmission
+ timeout when the RTT is unknown [RFC2988], and shorter values are
+ likely problematic in many cases. Note that the sending rate in this
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 8]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ case must be more conservative than in the two previous cases,
+ because the lack of return traffic prevents the detection of packet
+ loss, i.e., congestion events, and the application therefore cannot
+ perform exponential back-off to reduce load.
+
+ Applications that communicate bidirectionally SHOULD employ
+ congestion control for both directions of the communication. For
+ example, for a client-server, request-response-style application,
+ clients SHOULD congestion-control their request transmission to a
+ server, and the server SHOULD congestion-control its responses to the
+ clients. Congestion in the forward and reverse direction is
+ uncorrelated, and an application SHOULD either independently detect
+ and respond to congestion along both directions, or limit new and
+ retransmitted requests based on acknowledged responses across the
+ entire round-trip path.
+
+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 datagrams and transmits them to another tunnel endpoint, which
+ decapsulates the UDP datagrams 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 transmission using UDP.
+
+ 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 payload traffic
+ is IP-based; second, whether the tunneling scheme generates UDP
+ traffic at a volume that corresponds to the volume of payload traffic
+ carried within the tunnel.
+
+ IP-based traffic is generally assumed to be congestion-controlled,
+ i.e., it is assumed that the transport protocols generating IP-based
+ traffic at the sender already employ mechanisms that are sufficient
+ to address congestion on the path. Consequently, a tunnel carrying
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 9]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ IP-based traffic should already interact appropriately with other
+ traffic sharing the path, and specific congestion control mechanisms
+ for the tunnel are not necessary.
+
+ However, if the IP traffic in the tunnel is known to not be
+ congestion-controlled, additional measures are RECOMMENDED in order
+ to limit the impact of the tunneled traffic on other traffic sharing
+ the path.
+
+ The following guidelines define these possible cases in more detail:
+
+ 1. A tunnel generates UDP traffic at a volume that corresponds to
+ the volume of payload traffic, and the payload traffic is IP-
+ based and congestion-controlled.
+
+ 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. A 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 can be the case, for example, when some link-layer protocols
+ are encapsulated within UDP (but not all link-layer protocols;
+ some are congestion-controlled). 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. A 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 congestion-controlled.
+
+ 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
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 10]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ 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 a 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
+
+ IP fragmentation lowers the efficiency and reliability of Internet
+ communication. The loss of a single fragment results in the loss of
+ an entire fragmented packet, because even if all other fragments are
+ received correctly, the original packet cannot be reassembled and
+ delivered. This fundamental issue with fragmentation exists for both
+ IPv4 and IPv6. In addition, some network address translators (NATs)
+ and firewalls drop IP fragments. The network address translation
+ performed by a NAT only operates on complete IP packets, and some
+ firewall policies also require inspection of complete IP packets.
+ Even with these being the case, some NATs and firewalls simply do not
+ implement the necessary reassembly functionality, and instead choose
+ to drop all fragments. Finally, [RFC4963] documents other issues
+ specific to IPv4 fragmentation.
+
+ Due to these issues, an application SHOULD NOT send UDP datagrams
+ that result in IP packets that exceed the MTU of the path to the
+ destination. Consequently, an application SHOULD either use the path
+ MTU information provided by the IP layer or implement path MTU
+ discovery itself [RFC1191][RFC1981][RFC4821] to determine whether the
+ path to a destination will support its desired message size without
+ fragmentation.
+
+ Applications that do not follow this recommendation to do PMTU
+ discovery SHOULD still avoid sending UDP datagrams that would result
+ in IP packets that exceed the path MTU. Because the actual path MTU
+ is unknown, such applications SHOULD fall back to sending messages
+ that are shorter than the default effective MTU for sending (EMTU_S
+ in [RFC1122]). For IPv4, EMTU_S is the smaller of 576 bytes and the
+ first-hop MTU [RFC1122]. For IPv6, EMTU_S is 1280 bytes [RFC2460].
+ The effective PMTU for a directly connected destination (with no
+ routers on the path) is the configured interface MTU, which could be
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 11]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ less than the maximum link payload size. Transmission of minimum-
+ sized UDP datagrams is inefficient over paths that support a larger
+ PMTU, which is a second reason to implement PMTU discovery.
+
+ 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
+ that the presence of tunnels can cause an additional reduction of the
+ effective PMTU, so implementing PMTU discovery may be beneficial.
+
+ Applications that fragment an application-layer message into multiple
+ UDP datagrams SHOULD perform this fragmentation so that each datagram
+ can be received independently, and be independently retransmitted in
+ the case where an application implements its own reliability
+ mechanisms.
+
+3.3. Reliability Guidelines
+
+ Application designers are generally aware that UDP does not provide
+ any reliability, e.g., it does not retransmit any lost packets.
+ Often, this is a main reason to consider UDP as a transport.
+ Applications that do require reliable message delivery MUST implement
+ an appropriate mechanism themselves.
+
+ UDP also does not protect against datagram duplication, i.e., an
+ application may receive multiple copies of the same UDP datagram.
+ Application designers SHOULD verify that their application handles
+ datagram duplication gracefully, and may consequently need to
+ implement mechanisms to detect duplicates. Even if UDP datagram
+ reception triggers idempotent operations, applications may want to
+ suppress duplicate datagrams to reduce load.
+
+ In addition, the Internet can significantly delay some packets with
+ respect to others, e.g., due to routing transients, intermittent
+ connectivity, or mobility. This can cause reordering, where UDP
+ datagrams arrive at the receiver in an order different from the
+ transmission order. Applications that require ordered delivery MUST
+ reestablish datagram ordering themselves.
+
+ Finally, it is important to note that delay spikes can be very large.
+ This can cause reordered packets to arrive many seconds after they
+ were sent. [RFC0793] defines the maximum delay a TCP segment should
+ experience -- the Maximum Segment Lifetime (MSL) -- as 2 minutes. No
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 12]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ other RFC defines an MSL for other transport protocols or IP itself.
+ This document clarifies that the MSL value to be used for UDP SHOULD
+ be the same 2 minutes as for TCP. Applications SHOULD be robust to
+ the reception of delayed or duplicate packets that are received
+ within this 2-minute interval.
+
+ An application that requires 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
+
+ The UDP header includes an optional, 16-bit one's complement checksum
+ that provides an integrity check. This results in a relatively weak
+ protection in terms of coding theory [RFC3819], and application
+ developers SHOULD implement additional checks where data integrity is
+ important, e.g., through a Cyclic Redundancy Check (CRC) included
+ with the data to verify the integrity of an entire object/file sent
+ over the UDP service.
+
+ The UDP checksum provides a statistical guarantee 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. This check is not strong from a coding or cryptographic
+ perspective, and is not designed to detect physical-layer errors or
+ malicious modification of the datagram [RFC3819].
+
+ Applications SHOULD enable UDP checksums, although [RFC0768] permits
+ the option to disable their use. Applications that choose to disable
+ UDP checksums when transmitting over IPv4 therefore MUST NOT make
+ assumptions regarding the correctness of received data and MUST
+ behave correctly when a UDP datagram is received that was originally
+ sent to a different destination or is otherwise corrupted. The use
+ of the UDP checksum is REQUIRED when applications transmit UDP over
+ IPv6 [RFC2460].
+
+3.4.1. UDP-Lite
+
+ A special class of applications can derive benefit from having
+ partially-damaged payloads delivered, rather than discarded, when
+ using paths that include error-prone links. Such applications can
+ tolerate payload corruption and MAY choose to use the Lightweight
+ User Datagram Protocol (UDP-Lite) [RFC3828] variant of UDP instead of
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 13]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ basic UDP. Applications that choose to use UDP-Lite instead of UDP
+ should still follow the congestion control and other guidelines
+ described for use with UDP in Section 3.
+
+ UDP-Lite changes the semantics of the UDP "payload length" field to
+ that of a "checksum coverage length" field. Otherwise, UDP-Lite is
+ semantically identical to UDP. The interface of UDP-Lite differs
+ from that of UDP by the addition of a single (socket) option that
+ communicates a checksum coverage length value: at the sender, this
+ specifies the intended checksum coverage, with the remaining
+ unprotected part of the payload called the "error-insensitive part".
+ By default, the UDP-Lite checksum coverage extends across the entire
+ datagram. If required, an application may dynamically modify this
+ length value, e.g., to offer greater protection to some messages.
+ UDP-Lite always verifies that a packet was delivered to the intended
+ destination, i.e., always verifies the header fields. Errors in the
+ insensitive part will not cause a UDP datagram to be discarded by the
+ destination. Applications using UDP-Lite therefore MUST NOT make
+ assumptions regarding the correctness of the data received in the
+ insensitive part of the UDP-Lite payload.
+
+ The sending application SHOULD select the minimum checksum coverage
+ to include all sensitive protocol headers. For example, applications
+ that use the Real-Time Protocol (RTP) [RFC3550] will likely want to
+ protect the RTP header against corruption. Applications, where
+ appropriate, MUST also introduce their own appropriate validity
+ checks for protocol information carried in the insensitive part of
+ the UDP-Lite payload (e.g., internal CRCs).
+
+ The receiver must set a minimum coverage threshold for incoming
+ packets that is not smaller than the smallest coverage used by the
+ sender [RFC3828]. The receiver SHOULD select a threshold that is
+ sufficiently large to block packets with an inappropriately short
+ coverage field. This may be a fixed value, or may be negotiated by
+ an application. UDP-Lite does not provide mechanisms to negotiate
+ the checksum coverage between the sender and receiver.
+
+ Applications may still experience packet loss, rather than
+ corruption, when using UDP-Lite. The enhancements offered by UDP-
+ Lite rely upon a link being able to intercept the UDP-Lite header to
+ correctly identify the partial coverage required. When tunnels
+ and/or encryption are used, this can result in UDP-Lite datagrams
+ being treated the same as UDP datagrams, i.e., result in packet loss.
+ Use of IP fragmentation can also prevent special treatment for UDP-
+ Lite datagrams, and this is another reason why applications SHOULD
+ avoid IP fragmentation (Section 3.2).
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 14]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+3.5. Middlebox Traversal Guidelines
+
+ Network address translators (NATs) and firewalls are examples of
+ intermediary devices ("middleboxes") that can exist along an end-to-
+ end path. A middlebox typically performs a function that requires it
+ to maintain per-flow state. For connection-oriented protocols, such
+ as TCP, middleboxes snoop and parse the connection-management traffic
+ and create and destroy per-flow state accordingly. For a
+ connectionless protocol such as UDP, this approach is not possible.
+ Consequently, middleboxes may create per-flow state when they see a
+ packet that indicates a new flow, and destroy the state after some
+ period of time during which no packets belonging to the same flow
+ have arrived.
+
+ Depending on the specific function that the middlebox performs, this
+ behavior can introduce a time-dependency that restricts the kinds of
+ UDP traffic exchanges that will be successful across the middlebox.
+ For example, NATs and firewalls typically define the partial path on
+ one side of them to be interior to the domain they serve, whereas the
+ partial path on their other side is defined to be exterior to that
+ domain. Per-flow state is typically created when the first packet
+ crosses from the interior to the exterior, and while the state is
+ present, NATs and firewalls will forward return traffic. Return
+ traffic that arrives after the per-flow state has timed out is
+ dropped, as is other traffic that arrives from the exterior.
+
+ Many applications that use UDP for communication operate across
+ middleboxes without needing to employ additional mechanisms. One
+ example is the Domain Name System (DNS), which has a strict request-
+ response communication pattern that typically completes within
+ seconds.
+
+ Other applications may experience communication failures when
+ middleboxes destroy the per-flow state associated with an application
+ session during periods when the application does not exchange any UDP
+ traffic. Applications SHOULD be able to gracefully handle such
+ communication failures and implement mechanisms to re-establish
+ application-layer sessions and state.
+
+ For some applications, such as media transmissions, this re-
+ synchronization is highly undesirable, because it can cause user-
+ perceivable playback artifacts. Such specialized applications MAY
+ send periodic keep-alive messages to attempt to refresh middlebox
+ state. It is important to note that keep-alive messages are NOT
+ RECOMMENDED for general use -- they are unnecessary for many
+ applications and can consume significant amounts of system and
+ network resources.
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 15]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ An application that needs to employ keep-alives to deliver useful
+ service over UDP in the presence of middleboxes SHOULD NOT transmit
+ them more frequently than once every 15 seconds and SHOULD use longer
+ intervals when possible. No common timeout has been specified for
+ per-flow UDP state for arbitrary middleboxes. NATs require a state
+ timeout of 2 minutes or longer [RFC4787]. However, empirical
+ evidence suggests that a significant fraction of currently deployed
+ middleboxes unfortunately use shorter timeouts. The timeout of 15
+ seconds originates with the Interactive Connectivity Establishment
+ (ICE) protocol [ICE]. When applications are deployed in more
+ controlled network environments, the deployers SHOULD investigate
+ whether the target environment allows applications to use longer
+ intervals, or whether it offers mechanisms to explicitly control
+ middlebox state timeout durations, for example, using Middlebox
+ Communications (MIDCOM) [RFC3303], Next Steps in Signaling (NSIS)
+ [NSLP], or Universal Plug and Play (UPnP) [UPnP]. It is RECOMMENDED
+ that applications apply slight random variations ("jitter") to the
+ timing of keep-alive transmissions, to reduce the potential for
+ persistent synchronization between keep-alive transmissions from
+ different hosts.
+
+ Sending keep-alives is not a substitute for implementing robust
+ connection handling. Like all UDP datagrams, keep-alives can be
+ delayed or dropped, causing middlebox state to time out. In
+ addition, the congestion control guidelines in Section 3.1 cover all
+ UDP transmissions by an application, including the transmission of
+ middlebox keep-alives. Congestion control may thus lead to delays or
+ temporary suspension of keep-alive transmission.
+
+ Keep-alive messages are NOT RECOMMENDED for general use. They are
+ unnecessary for many applications and may consume significant
+ resources. For example, on battery-powered devices, if an
+ application needs to maintain connectivity for long periods with
+ little traffic, the frequency at which keep-alives are sent can
+ become the determining factor that governs power consumption,
+ depending on the underlying network technology. Because many
+ middleboxes are designed to require keep-alives for TCP connections
+ at a frequency that is much lower than that needed for UDP, this
+ difference alone can often be sufficient to prefer TCP over UDP for
+ these deployments. On the other hand, there is anecdotal evidence
+ that suggests that direct communication through middleboxes, e.g., by
+ using ICE [ICE], does succeed less often with TCP than with UDP. The
+ tradeoffs between different transport protocols -- especially when it
+ comes to middlebox traversal -- deserve careful analysis.
+
+
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 16]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+3.6. Programming Guidelines
+
+ The de facto standard application programming interface (API) for
+ TCP/IP applications is the "sockets" interface [POSIX]. Some
+ platforms also offer applications the ability to directly assemble
+ and transmit IP packets through "raw sockets" or similar facilities.
+ This is a second, more cumbersome method of using UDP. The
+ guidelines in this document cover all such methods through which an
+ application may use UDP. Because the sockets API is by far the most
+ common method, the remainder of this section discusses it in more
+ detail.
+
+ Although the sockets API was developed for UNIX in the early 1980s, a
+ wide variety of non-UNIX operating systems also implement this. The
+ sockets API supports both IPv4 and IPv6 [RFC3493]. The UDP sockets
+ API differs from that for TCP in several key ways. Because
+ application programmers are typically more familiar with the TCP
+ sockets API, the remainder of this section discusses these
+ differences. [STEVENS] provides usage examples of the UDP sockets
+ API.
+
+ UDP datagrams may be directly sent and received, without any
+ connection setup. Using the sockets API, applications can receive
+ 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
+ through a single UDP socket at the same time. Many applications need
+ to ensure that they receive packets from a particular source address;
+ these applications MUST implement corresponding checks at the
+ application layer or explicitly request that the operating system
+ filter the received packets.
+
+ If a client/server application executes on a host with more than one
+ IP interface, the application SHOULD send any UDP responses with an
+ IP source address that matches the IP destination address of the UDP
+ datagram that carried the request (see [RFC1122], Section 4.1.3.5).
+ Many middleboxes expect this transmission behavior and drop replies
+ that are sent from a different IP address, as explained in
+ Section 3.5.
+
+ 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.,
+ to bind a UDP socket to a specific pair of addresses and ports. This
+ is similar to the corresponding TCP sockets API functionality.
+ However, for UDP, this is only a local operation that serves to
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 17]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ simplify the local send/receive functions and to filter the traffic
+ for the specified addresses and ports. Binding a UDP socket does not
+ establish a connection -- UDP does not notify the remote end when a
+ 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 the IP Timestamp option. 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
+ applications need to be robust in the presence of packet loss. This
+ loss can also occur within the sending host, when an application
+ sends data faster than the line rate of the outbound network
+ interface. It can also occur on the destination, where receive calls
+ fail to return all the data that was sent when the application issues
+ them too infrequently (i.e., such that the receive buffer overflows).
+ Robust flow control mechanisms are difficult to implement, which is
+ why applications that need this functionality SHOULD consider using a
+ full-featured transport protocol.
+
+ When an application closes a TCP, SCTP or DCCP socket, the transport
+ protocol on the receiving host is required to maintain TIME-WAIT
+ state. This prevents delayed packets from the closed connection
+ instance from being mistakenly associated with a later connection
+ instance that happens to reuse the same IP address and port pairs.
+ The UDP protocol does not implement such a mechanism. Therefore,
+ UDP-based applications need to be robust in this case. One
+ application may close a socket or terminate, followed in time by
+ another application receiving on the same port. This later
+ application may then receive packets intended for the first
+ application that were delayed in the network.
+
+ The Internet can provide service differentiation to applications
+ based on IP-layer packet markings [RFC2475]. This facility can be
+ used for UDP traffic. Different operating systems provide different
+ interfaces for marking packets to applications. Differentiated
+ services require support from the network, and application deployers
+ need to discuss the provisioning of this functionality with their
+ network operator.
+
+3.7. ICMP Guidelines
+
+ Applications can utilize information about ICMP error messages that
+ the UDP layer passes up for a variety of purposes [RFC1122].
+ Applications SHOULD validate that the information in the ICMP message
+ payload, e.g., a reported error condition, corresponds to a UDP
+ datagram that the application actually sent. Note that not all APIs
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 18]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ have the necessary functions to support this validation, and some
+ APIs already perform this validation internally before passing ICMP
+ information to the application.
+
+ 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 SHOULD appropriately process 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-oriented
+ transport protocols is not always maintained by UDP-based
+ applications.
+
+4. Security Considerations
+
+ UDP does not provide communications security. Applications that need
+ to protect their communications against eavesdropping, tampering, or
+ message forgery SHOULD employ end-to-end security services provided
+ by other IETF protocols. Applications that respond to short requests
+ with potentially large responses are vulnerable to amplification
+ attacks, and SHOULD authenticate the sender before responding. The
+ source IP address of a request is not a useful authenticator, because
+ it can be spoofed.
+
+ One option of securing UDP communications is with IPsec [RFC4301],
+ which can provide authentication for flows of IP packets through the
+ Authentication Header (AH) [RFC4302] and encryption and/or
+ authentication through the Encapsulating Security Payload (ESP)
+ [RFC4303]. Applications use the Internet Key Exchange (IKE)
+ [RFC4306] to configure IPsec for their sessions. Depending on how
+ IPsec is configured for a flow, it can authenticate or encrypt the
+ 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. An application that uses IPsec requires the support of
+ an operating system that implements the IPsec protocol suite.
+
+ Although it is possible to use IPsec to secure UDP communications,
+ not all operating systems support IPsec or allow applications to
+ easily configure it for their flows. A second option of securing UDP
+ 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.
+
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 19]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ Many other options for authenticating or encrypting UDP payloads
+ exist. For example, the GSS-API security framework [RFC2743] or
+ Cryptographic Message Syntax (CMS) [RFC3852] could be used to protect
+ UDP payloads. The IETF standard for securing RTP [RFC3550]
+ communication sessions over UDP is the Secure Real-time Transport
+ Protocol (SRTP) [RFC3711]. In some applications, a better solution
+ is to protect larger stand-alone objects, such as files or messages,
+ instead of individual UDP payloads. In these situations, CMS
+ [RFC3852], S/MIME [RFC3851] or OpenPGP [RFC4880] could be used. In
+ addition, there are many non-IETF protocols in this area.
+
+ 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.
+
+ The Generalized TTL Security Mechanism (GTSM) [RFC5082] may be used
+ with UDP applications (especially when the intended endpoint is on
+ the same link as the sender). This is a lightweight mechanism that
+ allows a receiver to filter unwanted packets.
+
+ In terms of congestion control, [RFC2309] and [RFC2914] discuss the
+ dangers of congestion-unresponsive flows to the Internet. This
+ document provides guidelines to designers of UDP-based applications
+ to congestion-control their transmissions, and does not raise any
+ additional security concerns.
+
+5. Summary
+
+ This section summarizes the guidelines made in Sections 3 and 4 in a
+ tabular format (Table 1) for easy referencing.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 20]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ +---------------------------------------------------------+---------+
+ | Recommendation | Section |
+ +---------------------------------------------------------+---------+
+ | MUST tolerate a wide range of Internet path conditions | 3 |
+ | SHOULD use a full-featured transport (TCP, SCTP, DCCP) | |
+ | | |
+ | SHOULD control rate of transmission | 3.1 |
+ | SHOULD perform congestion control over all traffic | |
+ | | |
+ | for bulk transfers, | 3.1.1 |
+ | SHOULD consider implementing TFRC | |
+ | else, SHOULD in other ways use bandwidth similar to TCP | |
+ | | |
+ | for non-bulk transfers, | 3.1.2 |
+ | SHOULD measure RTT and transmit max. 1 datagram/RTT | |
+ | else, SHOULD send at most 1 datagram every 3 seconds | |
+ | SHOULD back-off retransmission timers following loss | |
+ | | |
+ | for tunnels carrying IP Traffic, | 3.1.3 |
+ | SHOULD NOT perform congestion control | |
+ | | |
+ | for non-IP tunnels or rate not determined by traffic, | 3.1.3 |
+ | SHOULD perform congestion control | |
+ | | |
+ | SHOULD NOT send datagrams that exceed the PMTU, i.e., | 3.2 |
+ | SHOULD discover PMTU or send datagrams < minimum PMTU | |
+ | | |
+ | SHOULD handle datagram loss, duplication, reordering | 3.3 |
+ | SHOULD be robust to delivery delays up to 2 minutes | |
+ | | |
+ | SHOULD enable IPv4 UDP checksum | 3.4 |
+ | MUST enable IPv6 UDP checksum | |
+ | else, MAY use UDP-Lite with suitable checksum coverage | 3.4.1 |
+ | | |
+ | SHOULD NOT always send middlebox keep-alives | 3.5 |
+ | MAY use keep-alives when needed (min. interval 15 sec) | |
+ | | |
+ | MUST check IP source address | 3.6 |
+ | and, for client/server applications | |
+ | SHOULD send responses from src address matching request | |
+ | | |
+ | SHOULD use standard IETF security protocols when needed | 4 |
+ +---------------------------------------------------------+---------+
+
+ Table 1: Summary of recommendations
+
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 21]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+6. Acknowledgments
+
+ Thanks to Paul Aitken, Mark Allman, Francois Audet, Iljitsch van
+ Beijnum, Stewart Bryant, Remi Denis-Courmont, Lisa Dusseault, Wesley
+ Eddy, Pasi Eronen, Sally Floyd, Robert Hancock, Jeffrey Hutzelman,
+ Cullen Jennings, Tero Kivinen, Peter Koch, Jukka Manner, Philip
+ Matthews, Joerg Ott, Colin Perkins, Tom Petch, Carlos Pignataro, Pasi
+ Sarolahti, Pascal Thubert, Joe Touch, Dave Ward, and Magnus
+ Westerlund for their comments on this document.
+
+ The middlebox traversal guidelines in Section 3.5 incorporate ideas
+ from Section 5 of [BEHAVE-APP] by Bryan Ford, Pyda Srisuresh, and Dan
+ Kegel.
+
+ Lars Eggert is partly funded by [TRILOGY], a research project
+ supported by the European Commission under its Seventh Framework
+ Program. Gorry Fairhurst was partly funded by the EC SatNEx project.
+
+7. References
+
+7.1. Normative References
+
+ [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
+ August 1980.
+
+ [RFC0793] Postel, J., "Transmission Control Protocol", STD 7,
+ 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, November 1990.
+
+ [RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU
+ Discovery for IP version 6", RFC 1981, August 1996.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ 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,
+ RFC 2914, September 2000.
+
+ [RFC2988] Paxson, V. and M. Allman, "Computing TCP's
+ Retransmission Timer", RFC 2988, November 2000.
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 22]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ [RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E.,
+ and G. Fairhurst, "The Lightweight User Datagram
+ Protocol (UDP-Lite)", RFC 3828, July 2004.
+
+ [RFC4787] Audet, F. and C. Jennings, "Network Address Translation
+ (NAT) Behavioral Requirements for Unicast UDP",
+ BCP 127, RFC 4787, January 2007.
+
+ [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path
+ MTU Discovery", RFC 4821, March 2007.
+
+ [RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP
+ Friendly Rate Control (TFRC): Protocol Specification",
+ RFC 5348, September 2008.
+
+7.2. Informative References
+
+ [BEHAVE-APP] Ford, B., "Application Design Guidelines for Traversal
+ through Network Address Translators", Work in Progress,
+ March 2007.
+
+ [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)",
+ Work in Progress, February 2008.
+
+ [FABER] Faber, T., Touch, J., and W. Yue, "The TIME-WAIT State
+ in TCP and Its Effect on Busy Servers", Proc. IEEE
+ Infocom, March 1999.
+
+ [GIST] Schulzrinne, H. and R. Hancock, "GIST: General Internet
+ Signalling Transport", Work in Progress, July 2008.
+
+ [ICE] Rosenberg, J., "Interactive Connectivity Establishment
+ (ICE): A Protocol for Network Address Translator (NAT)
+ Traversal for Offer/Answer Protocols", Work
+ in Progress, October 2007.
+
+ [NSLP] Stiemerling, M., Tschofenig, H., Aoun, C., and E.
+ Davies, "NAT/Firewall NSIS Signaling Layer Protocol
+ (NSLP)", Work in Progress, September 2008.
+
+ [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.
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 23]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ [RFC0896] Nagle, J., "Congestion control in IP/TCP
+ internetworks", RFC 896, January 1984.
+
+ [RFC0919] Mogul, J., "Broadcasting Internet Datagrams", STD 5,
+ RFC 919, October 1984.
+
+ [RFC1112] Deering, S., "Host extensions for IP multicasting",
+ STD 5, RFC 1112, August 1989.
+
+ [RFC1536] Kumar, A., Postel, J., Neuman, C., Danzig, P., and S.
+ Miller, "Common DNS Implementation Errors and Suggested
+ Fixes", RFC 1536, October 1993.
+
+ [RFC1546] Partridge, C., Mendez, T., and W. Milliken, "Host
+ Anycasting Service", RFC 1546, November 1993.
+
+ [RFC2309] Braden, B., Clark, D., Crowcroft, J., Davie, B.,
+ Deering, S., Estrin, D., Floyd, S., Jacobson, V.,
+ Minshall, G., Partridge, C., Peterson, L.,
+ Ramakrishnan, K., Shenker, S., Wroclawski, J., and L.
+ Zhang, "Recommendations on Queue Management and
+ Congestion Avoidance in the Internet", RFC 2309,
+ April 1998.
+
+ [RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang,
+ Z., and W. Weiss, "An Architecture for Differentiated
+ Services", RFC 2475, December 1998.
+
+ [RFC2675] Borman, D., Deering, S., and R. Hinden, "IPv6
+ Jumbograms", RFC 2675, August 1999.
+
+ [RFC2743] Linn, J., "Generic Security Service Application Program
+ Interface Version 2, Update 1", RFC 2743, January 2000.
+
+ [RFC3048] Whetten, B., Vicisano, L., Kermode, R., Handley, M.,
+ Floyd, S., and M. Luby, "Reliable Multicast Transport
+ Building Blocks for One-to-Many Bulk-Data Transfer",
+ RFC 3048, January 2001.
+
+ [RFC3124] Balakrishnan, H. and S. Seshan, "The Congestion
+ Manager", RFC 3124, June 2001.
+
+ [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G.,
+ Johnston, A., Peterson, J., Sparks, R., Handley, M.,
+ and E. Schooler, "SIP: Session Initiation Protocol",
+ RFC 3261, June 2002.
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 24]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ [RFC3303] Srisuresh, P., Kuthan, J., Rosenberg, J., Molitor, A.,
+ and A. Rayhan, "Middlebox communication architecture
+ and framework", RFC 3303, August 2002.
+
+ [RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and
+ W. Stevens, "Basic Socket Interface Extensions for
+ IPv6", RFC 3493, February 2003.
+
+ [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V.
+ Jacobson, "RTP: A Transport Protocol for Real-Time
+ Applications", STD 64, RFC 3550, July 2003.
+
+ [RFC3551] Schulzrinne, H. and S. Casner, "RTP Profile for Audio
+ and Video Conferences with Minimal Control", STD 65,
+ RFC 3551, July 2003.
+
+ [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and
+ K. Norrman, "The Secure Real-time Transport Protocol
+ (SRTP)", RFC 3711, March 2004.
+
+ [RFC3738] Luby, M. and V. Goyal, "Wave and Equation Based Rate
+ Control (WEBRC) Building Block", RFC 3738, April 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
+ Extensions (S/MIME) Version 3.1 Message Specification",
+ RFC 3851, July 2004.
+
+ [RFC3852] Housley, R., "Cryptographic Message Syntax (CMS)",
+ RFC 3852, 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.
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 25]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ [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 Control Protocol (DCCP) Congestion Control
+ ID 2: TCP-like Congestion Control", RFC 4341,
+ March 2006.
+
+ [RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for
+ Datagram Congestion Control Protocol (DCCP) Congestion
+ Control ID 3: TCP-Friendly Rate Control (TFRC)",
+ RFC 4342, March 2006.
+
+ [RFC4347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer
+ Security", RFC 4347, April 2006.
+
+ [RFC4654] Widmer, J. and M. Handley, "TCP-Friendly Multicast
+ Congestion Control (TFMCC): Protocol Specification",
+ RFC 4654, August 2006.
+
+ [RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and
+ R. Thayer, "OpenPGP Message Format", RFC 4880,
+ November 2007.
+
+ [RFC4960] Stewart, R., "Stream Control Transmission Protocol",
+ RFC 4960, September 2007.
+
+ [RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4
+ Reassembly Errors at High Data Rates", RFC 4963,
+ July 2007.
+
+ [RFC4987] Eddy, W., "TCP SYN Flooding Attacks and Common
+ Mitigations", RFC 4987, August 2007.
+
+ [RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., and C.
+ Pignataro, "The Generalized TTL Security Mechanism
+ (GTSM)", RFC 5082, October 2007.
+
+ [STEVENS] Stevens, W., Fenner, B., and A. Rudoff, "UNIX Network
+ Programming, The sockets Networking API", Addison-
+ Wesley, 2004.
+
+ [TRILOGY] "Trilogy Project", <http://www.trilogy-project.org>.
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 26]
+
+RFC 5405 Unicast UDP Usage Guidelines November 2008
+
+
+ [UPnP] UPnP Forum, "Internet Gateway Device (IGD) Standardized
+ Device Control Protocol V 1.0", November 2001.
+
+Authors' Addresses
+
+ Lars Eggert
+ Nokia Research Center
+ P.O. Box 407
+ Nokia Group 00045
+ Finland
+
+ Phone: +358 50 48 24461
+ EMail: lars.eggert@nokia.com
+ URI: http://people.nokia.net/~lars/
+
+
+ Godred Fairhurst
+ University of Aberdeen
+ Department of Engineering
+ Fraser Noble Building
+ Aberdeen AB24 3UE
+ Scotland
+
+ EMail: gorry@erg.abdn.ac.uk
+ URI: http://www.erg.abdn.ac.uk/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Eggert & Fairhurst Best Current Practice [Page 27]
+