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/