draft-ietf-tsvwg-udp-guidelines-02.txt   draft-ietf-tsvwg-udp-guidelines-03.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: January 10, 2008 July 9, 2007 Expires: March 22, 2008 September 19, 2007
UDP Usage Guidelines for Application Designers UDP Usage Guidelines for Application Designers
draft-ietf-tsvwg-udp-guidelines-02 draft-ietf-tsvwg-udp-guidelines-03
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 January 10, 2008. This Internet-Draft will expire on March 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
Internet, applications and upper-layer protocols that choose to use Internet, applications and upper-layer protocols that choose to use
UDP as an Internet transport must employ mechanisms to prevent UDP as an Internet transport must employ mechanisms to prevent
congestion collapse and establish some degree of fairness with congestion collapse and establish some degree of fairness with
concurrent traffic. This document provides guidelines on the use of concurrent traffic. This document provides guidelines on the use of
UDP for the designers of such applications and upper-layer protocols UDP for the designers of such applications and upper-layer protocols.
that cover congestion-control and other topics, including message Congestion control guidelines are a primary focus, but the document
sizes, reliability, checksums and middlebox traversal. also provides guidance on other topics, including message sizes,
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 . . . . . . . . . . . . . . . . . 7 3.2. Message Size Guidelines . . . . . . . . . . . . . . . . . 8
3.3. Reliability Guidelines . . . . . . . . . . . . . . . . . . 8 3.3. Reliability Guidelines . . . . . . . . . . . . . . . . . . 9
3.4. Checksum Guidelines . . . . . . . . . . . . . . . . . . . 8 3.4. Checksum Guidelines . . . . . . . . . . . . . . . . . . . 9
3.5. Middlebox Traversal Guidelines . . . . . . . . . . . . . . 10 3.5. Middlebox Traversal Guidelines . . . . . . . . . . . . . . 11
4. Security Considerations . . . . . . . . . . . . . . . . . . . 11 3.6. Programming Guidelines . . . . . . . . . . . . . . . . . . 12
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 4. Security Considerations . . . . . . . . . . . . . . . . . . . 14
6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 11 5. Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15
7.1. Normative References . . . . . . . . . . . . . . . . . . . 11 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 15
7.2. Informative References . . . . . . . . . . . . . . . . . . 12 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 14 8.1. Normative References . . . . . . . . . . . . . . . . . . . 16
Intellectual Property and Copyright Statements . . . . . . . . . . 15 8.2. Informative References . . . . . . . . . . . . . . . . . . 17
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 20
Intellectual Property and Copyright Statements . . . . . . . . . . 21
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 no associated end
system state. Because of these characteristics, UDP can offer a very system state. Because of these characteristics, UDP can offer a very
efficient communication transport to some applications. 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. [RFC2914] describes the best current congestion control mechanisms. On many platforms, applications can
practice for congestion control in the Internet. It identifies two send UDP messages at the line rate of the link interface, which is
major reasons why congestion control mechanisms are critical for the often much greater than the available path capacity, and doing so
stable operation of the Internet: 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 1. The prevention of congestion collapse, i.e., a state where an
increase in network load results in a decrease in useful work increase in network load results in a decrease in useful work
done by the network. done by the network.
2. The establishment of a degree of fairness, i.e., allowing 2. The establishment of a degree of fairness, i.e., allowing
multiple flows to share the capacity of a path reasonably multiple flows to share the capacity of a path reasonably
equitably. equitably.
Because UDP itself provides no congestion control mechanisms, it is Because UDP itself provides no congestion control mechanisms, it is
up to the applications that use UDP for Internet communication to up to the applications that use UDP for Internet communication to
employ suitable mechanisms to prevent congestion collapse and employ suitable mechanisms to prevent congestion collapse and
establish a degree of fairness. [RFC2309] discusses the dangers of establish a degree of fairness. [RFC2309] discusses the dangers of
congestion-unresponsive flows and states that "all UDP-based congestion-unresponsive flows and states that "all UDP-based
streaming applications should incorporate effective congestion streaming applications should incorporate effective congestion
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 packets 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,487 bytes. The transmission of large IP
packets frequently requires IP fragmentation, which decreases packets usually requires IP fragmentation, which 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 because 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 IP fragments; other reasons are documented
in [I-D.heffner-frag-harmful]. Some of the guidelines in Section 3 in [RFC4963]. Some of the guidelines in Section 3 describe how
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
applications requires expertise that goes beyond the simple applications requires expertise that goes beyond the simple
guidelines given in this document. The IETF has defined a reliable guidelines given in this document. The IETF has defined a reliable
skipping to change at page 4, line 28 skipping to change at page 4, line 31
2. Terminology 2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14, RFC 2119 document are to be interpreted as described in BCP 14, RFC 2119
[RFC2119]. [RFC2119].
3. UDP Usage Guidelines 3. UDP Usage Guidelines
The RECOMMENDED alternative to the UDP usage guidelines described in Internet paths can have widely varying characteristics, including
this section is the use of a transport protocol that is congestion- transmission delays, available bandwidths, congestion levels,
controlled, such as TCP [RFC0793], SCTP [RFC2960] or DCCP [RFC4340] reordering probabilities, supported message sizes or loss rates.
with its different congestion control types Furthermore, the same Internet path can have very different
[RFC4341][RFC4342][I-D.floyd-dccp-ccid4]. Congestion control conditions over time. Consequently, applications that may be used on
mechanisms are difficult to implement correctly, and for most the Internet MUST NOT make assumptions about specific path
applications, the use of one of the existing, congestion-controlled characteristics. They MUST instead use mechanisms that let them
protocols is the simplest method of satisfying [RFC2914]. The same operate safely under very different path conditions. Typically, this
is true for message size determination and reliability mechanisms. requires conservatively probing the Internet path to establish a
transmission behavior that it can sustain and that is reasonably fair
to other traffic sharing the path.
If used correctly, congestion-controlled transport protocols are not These mechanisms are difficult to implement correctly. For most
as "heavyweight" as often claimed. For example, TCP with SYN cookies applications, the use of one of the existing IETF transport protocols
[I-D.ietf-tcpm-syn-flood], which are available on many platforms, is the simplest method of acquiring the required mechanisms.
does not require a server to maintain per-connection state until the Consequently, the RECOMMENDED alternative to the UDP usage described
connection is established. TCP also requires the end that closes a in the remainder of this section is the use of an IETF transport
connection to maintain the TIME-WAIT state that prevents delayed protocol such as TCP [RFC0793], SCTP [RFC2960] or DCCP [RFC4340] with
segments from one connection instance to interfere with a later one. its different congestion control types
Applications that are aware of this behavior can shift maintenance of [RFC4341][RFC4342][I-D.floyd-dccp-ccid4].
the TIME-WAIT state to conserve resources. Finally, TCP's built-in
capacity-probing and awareness of the maximum transmission unit If used correctly, these more fully-featured transport protocols are
supported by the path (PMTU) results in efficient data transmission not as "heavyweight" as often claimed. For example, TCP's "Nagle"
that quickly compensates for the initial connection setup delay, for algorithm [RFC0896] can be disabled, improving communication latency
transfers that exchange more than a few packets. 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 to interfere
with a 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, for transfers that exchange more than a few
messages.
3.1. Congestion Control Guidelines 3.1. Congestion Control Guidelines
If an application or upper-layer protocol chooses not to use a If an application or upper-layer protocol chooses not to use a
congestion-controlled transport protocol, it SHOULD control the rate congestion-controlled transport protocol, it SHOULD control the rate
at which it sends UDP messages to a destination host. It is at which it sends UDP messages to a destination host, in order to
important to stress that an application SHOULD perform congestion fulfill the requirements of [RFC2914]. It is important to stress
control over all UDP traffic it sends to a destination, independent that an application SHOULD perform congestion control over all UDP
of how it generates this traffic. For example, an application that traffic it sends to a destination, independently from how it
forks multiple worker processes or otherwise uses multiple sockets to generates this traffic. For example, an application that forks
multiple worker processes or otherwise uses multiple sockets to
generate UDP messages SHOULD perform congestion control over the generate UDP messages SHOULD perform congestion control over the
aggregate traffic. The remainder of this section discusses several aggregate traffic.
approaches for this purpose.
The remainder of this section discusses several approaches for this
purpose. 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 messages 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.
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
control mechanisms that act on the traffic aggregate between two
hosts, i.e., across all communication sessions active at a given time
independent of specific transport protocols, such as the Congestion
Manager [RFC3124]. Such mechanisms have failed to see deployment,
but would otherwise also fulfill the congestion control requirements
in [RFC2914], because they provide congestion control for UDP
sessions.
3.1.1. Bulk Transfer Applications 3.1.1. Bulk Transfer Applications
Applications that perform bulk transmission of data to a peer over Applications that perform bulk transmission of data to a peer over
UDP SHOULD implement TCP-Friendly Rate Control (TFRC) [RFC3448], UDP, i.e., applications that exchange more than a small number of
window-based, TCP-like congestion control, or otherwise ensure that messages per RTT, SHOULD implement TCP-Friendly Rate Control (TFRC)
the application complies with the congestion control principles. [RFC3448], 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 TFRC has been designed to provide both congestion control and
fairness in a way that is compatible with the IETF's other transport fairness in a way that is compatible with the IETF's other transport
protocols. TFRC is currently being updated protocols. TFRC is currently being updated
[I-D.ietf-dccp-rfc3448bis], and application designers SHOULD always [I-D.ietf-dccp-rfc3448bis], and application designers SHOULD always
evaluate whether the latest published specification fits their needs. evaluate whether the latest published specification fits their needs.
If an application implements TFRC, it need not follow the remaining If an application implements TFRC, it need not follow the remaining
guidelines in Section 3.1, because TFRC already addresses them, but guidelines in Section 3.1, because TFRC already addresses them, but
SHOULD still follow the remaining guidelines in the subsequent SHOULD still follow the remaining guidelines in the subsequent
subsections of Section 3. subsections of Section 3.
skipping to change at page 6, line 12 skipping to change at page 7, line 8
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 paths, results are such applications leaks out on unprovisioned Internet paths, if can
detrimental. 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.
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
congestion control schemes in Section 3.1.1, the network sees little congestion control schemes in Section 3.1.1, the network sees little
benefit, because those mechanisms perform congestion control in a way benefit, because those mechanisms perform congestion control in a way
that is only effective for longer transmissions. that is only effective for longer transmissions.
Applications that exchange only a small number of messages with a Applications that exchange only a small number of messages with a
destination at any time applications SHOULD still control their destination at any time SHOULD still control their transmission
transmission behavior by not sending more than one UDP message per behavior by not sending more than one UDP message per round-trip time
round-trip time (RTT) to a destination. Similar to the (RTT) to a destination. Similar to the recommendation in [RFC1536],
recommendation in [RFC1536], an application SHOULD maintain an an application SHOULD maintain an estimate of the RTT for any
estimate of the RTT for any destination it communicates with. destination with which it communicates. Applications SHOULD
Applications SHOULD implement the algorithm specified in [RFC2988] to implement the algorithm specified in [RFC2988] to compute a smoothed
compute a smoothed RTT (SRTT) estimate. A lost response from the RTT (SRTT) estimate. A lost response from the peer SHOULD be treated
peer SHOULD be treated as a very large RTT sample, instead of being as a very large RTT sample, instead of being ignored, in order to
ignored, in order to cause a sufficiently large (exponential) back- cause a sufficiently large (exponential) back-off. When implementing
off. When implementing this scheme, applications need to choose a this scheme, applications need to choose a sensible initial value for
sensible initial value for the RTT. This value SHOULD generally be the RTT. This value SHOULD generally be as conservative as possible
as conservative as possible for the given application. TCP uses an for the given application. TCP uses an initial value of 3 seconds
initial value of 3 seconds [RFC2988], which is also RECOMMENDED as an [RFC2988], which is also RECOMMENDED as an initial value for UDP
initial value for UDP applications. SIP [RFC3261] and GIST applications. SIP [RFC3261] and GIST [I-D.ietf-nsis-ntlp] use an
[I-D.ietf-nsis-ntlp] use an initial value of 500 ms, and initial initial value of 500 ms, and initial timeouts that are shorter than
timeouts that are shorter than this are likely problematic in many this are likely problematic in many cases. It is also important to
cases. It is also important to note that the initial timeout is not note that the initial timeout is not the maximum possible timeout -
the maximum possible timeout - the RECOMMENDED algorithm in [RFC2988] the RECOMMENDED algorithm in [RFC2988] yields timeout values after a
yields timeout values after a series of losses that are much longer series of losses that are much longer than the initial value.
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 fixed transmission interval
that is exponentially backed-off during loss. TCP uses an initial that is exponentially backed-off during loss. TCP uses an initial
value of 3 seconds [RFC2988], which is also RECOMMENDED as an initial value of 3 seconds [RFC2988], which is also RECOMMENDED as an initial
value for UDP applications. SIP [RFC3261] and GIST value for UDP applications. SIP [RFC3261] and GIST
[I-D.ietf-nsis-ntlp] use an interval of 500 ms, and shorter values [I-D.ietf-nsis-ntlp] use an interval of 500 ms, and shorter values
are likely problematic in many cases. As in the previous case, note are likely problematic in many cases. As in the previous case, note
that the initial timeout is not the maximum possible timeout. 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 consider if they can use an even less aggressive seconds, and SHOULD use an even less aggressive rate when possible.
rate when possible. The 3-second interval was chosen based on TCP's The 3-second interval was chosen based on TCP's retransmission
retransmission timeout when the RTT is unknown [RFC2988], and shorter timeout when the RTT is unknown [RFC2988], and shorter values are
values are likely problematic in many cases. Note that the initial likely problematic in many cases. Note that the initial timeout
timeout interval must be more conservative than in the two previous interval must be more conservative than in the two previous cases,
cases, because the lack of return traffic prevents the detection of because the lack of return traffic prevents the detection of packet
packet loss, i.e., congestion events, and the application therefore loss, i.e., congestion events, and the application therefore cannot
cannot perform exponential back-off to reduce load. perform exponential back-off to reduce load.
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.2. Message Size Guidelines 3.2. Message Size Guidelines
Because IP fragmentation lowers the efficiency and reliability of Because IP fragmentation lowers the efficiency and reliability of
Internet communication [I-D.heffner-frag-harmful], an application Internet communication [RFC4963], an application SHOULD NOT send UDP
SHOULD NOT send UDP messages that result in IP packets that exceed messages that result in IP packets that exceed the MTU of the path to
the MTU of the path to the destination. Consequently, an application the destination. Consequently, an application SHOULD either use the
SHOULD either use the path MTU information provided by the IP layer path MTU information provided by the IP layer or implement path MTU
or implement path MTU discovery itself [RFC1191][RFC1981][RFC4821] to discovery itself [RFC1191][RFC1981][RFC4821] to determine whether the
determine whether the path to a destination will support its desired path to a destination will support its desired message size without
message size without fragmentation. fragmentation.
Applications that choose not adapt the packet size SHOULD NOT send Applications that choose to not adapt their transmit message size
UDP messages that exceed the minimum PMTU. The minimum PMTU depends SHOULD NOT send UDP messages that exceed the minimum PMTU. The
on the IP version used for transmission, and is the lesser of 576 minimum PMTU depends on the IP version used for transmission, and is
bytes and the first-hop MTU for IPv4 [RFC1122] and 1280 bytes for the lesser of 576 bytes and the first-hop MTU for IPv4 [RFC1122] and
IPv6 [RFC2460]. To determine an appropriate UDP payload size, 1280 bytes for IPv6 [RFC2460]. To determine an appropriate UDP
applications must subtract IP header and option lengths as well as payload size, applications must subtract IP header and option lengths
the length of the UDP header from the PMTU size. Transmission of as well as the length of the UDP header from the PMTU size.
minimum-sized messages is inefficient over paths that support a Transmission of minimum-sized messages is inefficient over paths that
larger PMTU, which is a second reason to implement PMTU discovery. support a larger PMTU, which is a second reason to implement PMTU
discovery.
Applications that do not send messages that exceed the minimum PMTU Applications that do not send messages that exceed the minimum PMTU
of IPv4 or IPv6 need not implement any of the above mechanisms. of IPv4 or IPv6 need not implement any of the above mechanisms. Note
that the presence of tunnels can cause fragmentation even when
applications send messages that do not exceed the minimum PMTU, so
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. Often, this is a main reason to consider UDP as a
transport. Applications that do require reliable message delivery transport. Applications that do require reliable message delivery
SHOULD implement an appropriate mechanism themselves. SHOULD 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 consider whether their application Application designers SHOULD verify that their application handles
handles message duplication gracefully, and may need to implement message duplication gracefully, and may consequently need to
mechanisms to detect duplicates. Even if message reception triggers implement mechanisms to detect duplicates. Even if message reception
idempotent operations, applications may want to suppress duplicate triggers idempotent operations, applications may want to suppress
messages to reduce load. duplicate messages to reduce load.
Finally, UDP messages may be reordered in the network and arrive at Finally, the Internet can significantly delay some packets with
the receiver in an order different from the transmission order. respect to others, e.g., due to routing transients, intermittent
Applications that require ordered delivery SHOULD reestablish message connectivity, or mobility. This can cause message reordering, where
ordering themselves. UDP messages arrive at the receiver in an order different from the
transmission order. Applications that require ordered delivery
SHOULD reestablish message ordering themselves. Furthermore, 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.
The Internet protocol suite defines the Maximum Segment Lifetime
(MSL) as 2 minutes [RFC0793]. This is the 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.
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. The UDP checksum provides
assurance that the payload was not corrupted in transit. It also assurance that the payload was not corrupted in transit. It also
verifies that the datagram was delivered to the intended end point, verifies that the packet was delivered to the intended destination,
because it covers the IP addresses, port numbers and protocol number, because it covers the IP addresses, port numbers and protocol number,
and it verifies that the datagram is not truncated or padded, because and it verifies that the packet is not truncated or padded, because
it covers the size field. It therefore protects an application it covers the size field. It therefore protects an application
against receiving corrupted payload data in place of, or in addition against receiving corrupted payload data in place of, or in addition
to, the data that was sent. to, the data that was sent.
Applications SHOULD enable UDP checksums, although [RFC0793] permits Applications SHOULD enable UDP checksums, although [RFC0793] 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 packet is received that was originally sent behave correctly when a message is received that was originally sent
to a different end point 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] and applications consequently MUST NOT disable their use.
(The IPv6 header does not have a separate checksum field to protect (The IPv6 header does not have a separate checksum field to protect
the IP addressing information.) the IP addressing information.)
The UDP checksum provides relatively weak protection from a coding The UDP checksum provides relatively weak protection from a coding
point of view [RFC3819] and, where data integrity is important, point of view [RFC3819] and, where data integrity is important,
application developers SHOULD provide additional checks, e.g., application developers SHOULD provide additional checks, e.g.,
through a CRC included with the data to verify the integrity of an through a Cyclic Redundancy Check (CRC) included with the data to
entire object/file sent over UDP service. 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 derive benefit from having partially A special class of applications can derive benefit from having
damaged payloads delivered rather than discarded when using paths partially damaged payloads delivered, rather than discarded, when
that include error-prone links. Such applications can tolerate using paths that include error-prone links. Such applications can
payload corruption and MAY choose to use the Lightweight User tolerate payload corruption and MAY choose to use the Lightweight
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.1.
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 datagram 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 packets. UDP-Lite always e.g., to offer greater protection to some messages. UDP-Lite always
verifies that a datagram was delivered to the intended end point, verifies that a packet was delivered to the intended destination,
i.e., always verifies the header fields. Errors in the insensitive i.e., always verifies the header fields. Errors in the insensitive
part will not cause a packet to be discarded by the receiving end part will not cause a UDP message to be discarded by the destination.
host. Applications using UDP-Lite therefore MUST NOT make Applications using UDP-Lite therefore MUST NOT make assumptions
assumptions regarding the correctness of the data received in the regarding the correctness of the data received in the insensitive
insensitive part of the UDP-Lite payload. part of the UDP-Lite payload.
The sending application SHOULD select the minimum checksum coverage The sending application SHOULD select the minimum checksum coverage
to include all sensitive protocol headers (e.g., the RTP header), to include all sensitive protocol headers. For example, applications
and, where appropriate, MUST also introduce their own appropriate that use the Real-Time Protocol (RTP) [RFC3550] will likely want to
validity checks for protocol information carried in the insensitive protect the RTP header against corruption. Applications, where
part of the UDP-Lite payload (e.g., internal CRCs). 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 The receiver MUST set a minimum coverage threshold for incoming
datagrams that is not smaller than the smallest coverage used by the packets that is not smaller than the smallest coverage used by the
sender. This may be a fixed value, or may be negotiated by an sender. This may be a fixed value, or may be negotiated by an
application. UDP-Lite does not provide mechanisms to negotiate the application. UDP-Lite does not provide mechanisms to negotiate the
checksum coverage between the sender and receiver. checksum coverage between the sender and receiver.
Applications may still experience packet loss, rather than Applications may still experience packet loss, rather than
corruption, when using UDP-Lite. The enhancements offered by UDP- corruption, when using UDP-Lite. The enhancements offered by UDP-
Lite rely upon a link being able to intercept the UDP-Lite header to Lite rely upon a link being able to intercept the UDP-Lite header to
correctly identify the partial-coverage required. When tunnels correctly identify the partial-coverage required. When tunnels
and/or encryption are used, this can result in UDP-Lite packets being and/or encryption are used, this can result in UDP-Lite messages
treated the same as UDP packets, i.e., result in packet loss. Use of being treated the same as UDP messages, i.e., result in packet loss.
IP fragmentation can also prevent special treatment for UDP-Lite Use of IP fragmentation can also prevent special treatment for UDP-
packets, and is another reason why applications SHOULD avoid IP Lite messages, and is another reason why applications SHOULD avoid IP
fragmentation Section 3.2. fragmentation Section 3.2.
3.5. Middlebox Traversal Guidelines 3.5. Middlebox Traversal Guidelines
Network address translators (NATs) and firewalls are examples of Network address translators (NATs) and firewalls are examples of
intermediary devices ("middleboxes") that can exist along an end-to- intermediary devices ("middleboxes") that can exist along an end-to-
end path. A middlebox typically performs a function that requires it end path. A middlebox typically performs a function that requires it
to maintain per-flow state. For connection-oriented protocols, such to maintain per-flow state. For connection-oriented protocols, such
as TCP, middleboxes snoop and parse the connection-management traffic as TCP, middleboxes snoop and parse the connection-management traffic
and create and destroy per-flow state accordingly. For a and create and destroy per-flow state accordingly. For a
connectionless protocol such as UDP, this approach is not possible. connectionless protocol such as UDP, this approach is not possible.
Consequently, middleboxes may create per-flow state when they see a Consequently, middleboxes may create per-flow state when they see a
packet that indicates a new flow, and destroy the state after some packet that indicates a new flow, and destroy the state after some
period of time during which no packets belonging to the same flow period of time during which no packets belonging to the same flow
have arrived. have arrived.
Depending on the specific function that the middlebox performs, this Depending on the specific function that the middlebox performs, this
behavior can introduce a time-dependency that restricts the kinds of behavior can introduce a time-dependency that restricts the kinds of
UDP traffic exchanges that will be successful across it. For UDP traffic exchanges that will be successful across the middlebox.
example, NATs and firewalls typically define the partial path on one For example, NATs and firewalls typically define the partial path on
side of them to be interior to the domain they control, whereas the 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 partial path on their other side is defined to be exterior to that
domain. Per-flow state is typically created when the first packet domain. Per-flow state is typically created when the first packet
crosses from the interior to the exterior, and while the state is crosses from the interior to the exterior, and while the state is
present, NATs and firewalls will forward return traffic. Return present, NATs and firewalls will forward return traffic. Return
traffic arriving after the per-flow state has timed out is dropped, traffic arriving after the per-flow state has timed out is dropped,
as is other traffic arriving from the exterior. as is other traffic arriving from the exterior.
Many applications 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 their
UDP sessions. UDP sessions.
Applications MAY in addition send periodic keep-alive messages to For some applications, such as media transmissions, this re-
attempt to refresh middlebox state. Unfortunately, no common timeout synchronization is highly undesirable, because it can cause user-
has been specified for per-flow UDP state for arbitrary middleboxes. perceivable playback artifacts. Such specialized applications MAY
For NATs, [RFC4787] requires a state timeout of 2 minutes or longer, send periodic keep-alive messages to attempt to refresh middlebox
and it is likely that other types of middleboxes use timeouts of state. It is important to note that keep-alive messages are NOT
similar timescales. Consequently, if applications choose to send RECOMMENDED for general use - they are unnecessary for many
periodic keep-alives, they SHOULD NOT send them more frequently than applications and can consume significant amounts of system and
once every two minutes. (Not that some deployed middleboxes use a network resources.
shorter timeout value than 2 minutes, violating [RFC4787].)
An application that needs to employ keep-alives to deliver useful
service 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. For NATs, [RFC4787] requires a
state timeout of 2 minutes or longer. However, empirical evidence
suggests that a significant fraction of the deployed middleboxes
unfortunately uses shorter timeouts. The timeout of 15 seconds
originates with the Interactive Connectivity Establishment (ICE)
protocol [I-D.ietf-mmusic-ice]. Applications that operate in more
controlled network environments SHOULD investigate whether the
environment they operate in allows them to use longer intervals, or
whether it offers mechanisms to explicitly control middlebox state
timeout durations, for example, using MIDCOM [RFC3303], NSIS
[I-D.ietf-nsis-nslp-natfw], STUN
[I-D.wing-behave-nat-control-stun-usage] or UPnP [UPNP].
It is important to note that sending keep-alives is not a substitute It is important to note that sending keep-alives is not a substitute
for implementing a robust connection handling. Like all UDP for implementing robust connection handling. Like all UDP messages,
messages, keep-alives can be delayed or dropped, causing middlebox keep-alives can be delayed or dropped, causing middlebox state to
state to time out. In addition, the congestion control guidelines in time out. In addition, the congestion control guidelines in
Section 3.1 cover all UDP transmissions by an application, including Section 3.1 cover all UDP transmissions by an application, including
the transmission of middlebox keep-alives. Congestion control may the transmission of middlebox keep-alives. Congestion control may
thus lead to delays or temporary suspension of keep-alive thus lead to delays or temporary suspension of keep-alive
transmission. transmission.
3.6. Programming Guidelines
The de facto standard application programming interface (API) for
TCP/IP applications is the "sockets" interface [POSIX]. Although
this API was developed for UNIX in the early 1980s, a wide variety of
non-UNIX operating systems also implements it. 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 messages 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. When applications need
to ensure that they receive packets from a particular source address,
they MUST implement corresponding checks at the application layer or
explicitly request that the operating system filter the received
packets.
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.
This is similar to the corresponding TCP sockets API functionality.
However, for UDP, this is only a local operation that serves to
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.
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 data when the application issues them too frequently
(i.e., when no new data has arrived) or not frequently enough (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 robust to 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.
4. Security Considerations 4. Security Considerations
[RFC2309] and [RFC2914] discuss the dangers of congestion- UDP does not provide communications security. Applications that need
unresponsive flows to the Internet. This document provides to protect their communications against eavesdropping, tampering, or
guidelines to designers of UDP-based applications to congestion- message forgery SHOULD employ end-to-end security services provided
control their transmissions. As such, it does not raise any by other IETF protocols.
additional security concerns.
5. IANA Considerations One option of securing UDP communications is with IPsec [RFC4301],
which provides authentication [RFC4302] and encryption [RFC4303] for
flows of IP packets. 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. 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
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.
Many other options of authenticating or encrypting UDP payloads
exist, including other IETF standards, such as S/MIME [RFC3851] or
PGP [RFC2440], as well as many non-IETF protocols. 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 IPsec or DTLS,
rather than inventing their own.
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. As such, it does not
raise any additional security concerns.
5. Summary
This section summarizes the guidelines made in Section 3 and
Section 4 in a tabular format in Table 1 for easy referencing.
+---------+---------------------------------------------------------+
| Section | Recommendation |
+---------+---------------------------------------------------------+
| 3 | MUST accommodate wide range of Internet path conditions |
| | SHOULD use a full-featured transport (TCP, SCTP, DCCP) |
| | |
| 3.1 | SHOULD control rate of transmission |
| | SHOULD perform congestion control over all traffic |
| | |
| 3.1.1 | for bulk transfers, |
| | SHOULD consider implementing TFRC |
| | else, SHOULD otherwise use bandwidth similar to TCP |
| | |
| 3.1.2 | for non-bulk transfers, |
| | SHOULD measure RTT and transmit 1 message/RTT |
| | else, SHOULD send at most 1 message every 3 seconds |
| | |
| 3.2 | SHOULD NOT send messages that exceed the PMTU, i.e., |
| | SHOULD discover PMTU or send messages < minimum PMTU |
| | |
| 3.3 | SHOULD handle message loss, duplication, reordering |
| | |
| 3.4 | SHOULD enable UDP checksum |
| 3.4.1 | else, MAY use UDP-Lite with suitable checksum coverage |
| | |
| 3.5 | SHOULD NOT always send middlebox keep-alives |
| | MAY use keep-alives when needed (min. interval 15 sec) |
| | |
| 3.6 | MUST check IP source address |
| | |
| 4 | SHOULD use standard IETF security protocols when needed |
+---------+---------------------------------------------------------+
Table 1: Summary of recommendations.
6. IANA Considerations
This document raises no IANA considerations. This document raises no IANA considerations.
6. Acknowledgments 7. Acknowledgments
Thanks to Mark Allman, Sally Floyd, Philip Matthews, Joerg Ott, Colin Thanks to Paul Aitken, Mark Allman, Wesley Eddy, Sally Floyd, Philip
Perkins, Pasi Sarolahti and Magnus Westerlund for their comments on Matthews, Joerg Ott, Colin Perkins, Pasi Sarolahti, Joe Touch and
this document. 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.
7. References 8. References
7.1. Normative References 8.1. Normative References
[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.
[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.
skipping to change at page 12, line 35 skipping to change at page 16, line 50
[RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., [RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D.,
Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L.
Wood, "Advice for Internet Subnetwork Designers", BCP 89, Wood, "Advice for Internet Subnetwork Designers", BCP 89,
RFC 3819, July 2004. 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
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 [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram
Congestion Control Protocol (DCCP)", RFC 4340, March 2006. 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.
7.2. Informative References 8.2. Informative References
[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.
[I-D.floyd-dccp-ccid4] [I-D.floyd-dccp-ccid4]
Floyd, S. and E. Kohler, "Profile for Datagram Congestion Floyd, S. and E. Kohler, "Profile for Datagram Congestion
Control Protocol (DCCP) Congestion ID 4: TCP-Friendly Control Protocol (DCCP) Congestion ID 4: TCP-Friendly
Rate Control for Small Packets (TFRC-SP)", Rate Control for Small Packets (TFRC-SP)",
draft-floyd-dccp-ccid4-01 (work in progress), July 2007. 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.heffner-frag-harmful]
Heffner, J., "IPv4 Reassembly Errors at High Data Rates",
draft-heffner-frag-harmful-05 (work in progress),
May 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-01 (work in Specification", draft-ietf-dccp-rfc3448bis-02 (work in
progress), March 2007. progress), July 2007.
[I-D.ietf-mmusic-ice]
Rosenberg, J., "Interactive Connectivity Establishment
(ICE): A Protocol for Network Address Translator (NAT)
Traversal for Offer/Answer Protocols",
draft-ietf-mmusic-ice-18 (work in progress),
September 2007.
[I-D.ietf-nsis-nslp-natfw]
Stiemerling, M., "NAT/Firewall NSIS Signaling Layer
Protocol (NSLP)", draft-ietf-nsis-nslp-natfw-15 (work in
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-13 (work in Signalling Transport", draft-ietf-nsis-ntlp-14 (work in
progress), April 2007. progress), July 2007.
[I-D.ietf-tcpm-syn-flood] [I-D.wing-behave-nat-control-stun-usage]
Eddy, W., "TCP SYN Flooding Attacks and Common Wing, D., "Discovering, Querying, and Controlling
Mitigations", draft-ietf-tcpm-syn-flood-05 (work in Firewalls and NATs using STUN",
progress), May 2007. draft-wing-behave-nat-control-stun-usage-03 (work in
progress), July 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",
RFC 896, January 1984.
[RFC1122] Braden, R., "Requirements for Internet Hosts - [RFC1122] Braden, R., "Requirements for Internet Hosts -
Communication Layers", STD 3, RFC 1122, October 1989. 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.
[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 [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
(IPv6) Specification", RFC 2460, December 1998. (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",
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.
Schooler, "SIP: Session Initiation Protocol", RFC 3261, Schooler, "SIP: Session Initiation Protocol", RFC 3261,
June 2002. June 2002.
[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 [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.
[RFC3851] Ramsdell, B., "Secure/Multipurpose Internet Mail
Extensions (S/MIME) Version 3.1 Message Specification",
RFC 3851, July 2004.
[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.
[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 [RFC4787] Audet, F. and C. Jennings, "Network Address Translation
(NAT) Behavioral Requirements for Unicast UDP", BCP 127, (NAT) Behavioral Requirements for Unicast UDP", BCP 127,
RFC 4787, January 2007. RFC 4787, January 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.
[STEVENS] Stevens, W., Fenner, B., and A. Rudoff, "UNIX Network
Programming, The sockets Networking API", Addison-Wesley,
2004.
[UPNP] UPnP Forum, "Internet Gateway Device (IGD) Standardized
Device Control Protocol V 1.0", November 2001.
Authors' Addresses Authors' Addresses
Lars Eggert Lars Eggert
Nokia Research Center Nokia Research Center
P.O. Box 407 P.O. Box 407
Nokia Group 00045 Nokia Group 00045
Finland Finland
Phone: +358 50 48 24461 Phone: +358 50 48 24461
Email: lars.eggert@nokia.com Email: lars.eggert@nokia.com
 End of changes. 59 change blocks. 
185 lines changed or deleted 460 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/