draft-ietf-tsvwg-udp-guidelines-11.txt | rfc5405.txt | |||
---|---|---|---|---|
Transport Area Working Group L. Eggert | Network Working Group L. Eggert | |||
Internet-Draft Nokia | Request for Comments: 5405 Nokia | |||
Intended status: BCP G. Fairhurst | BCP: 145 G. Fairhurst | |||
Expires: April 13, 2009 University of Aberdeen | Category: Best Current Practice University of Aberdeen | |||
October 10, 2008 | November 2008 | |||
Unicast UDP Usage Guidelines for Application Designers | Unicast UDP Usage Guidelines for Application Designers | |||
draft-ietf-tsvwg-udp-guidelines-11 | ||||
Status of this Memo | ||||
By submitting this Internet-Draft, each author represents that any | ||||
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 | ||||
aware will be disclosed, in accordance with Section 6 of BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | Status of This Memo | |||
Task Force (IETF), its areas, and its working groups. Note that | ||||
other groups may also distribute working documents as Internet- | ||||
Drafts. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document specifies an Internet Best Current Practices for the | |||
and may be updated, replaced, or obsoleted by other documents at any | Internet Community, and requests discussion and suggestions for | |||
time. It is inappropriate to use Internet-Drafts as reference | improvements. Distribution of this memo is unlimited. | |||
material or to cite them other than as "work in progress." | ||||
The list of current Internet-Drafts can be accessed at | Copyright Notice | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | ||||
The list of Internet-Draft Shadow Directories can be accessed at | Copyright (c) 2008 IETF Trust and the persons identified as the | |||
http://www.ietf.org/shadow.html. | document authors. All rights reserved. | |||
This Internet-Draft will expire on April 13, 2009. | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | ||||
(http://trustee.ietf.org/license-info) in effect on the date of | ||||
publication of this document. Please review these documents | ||||
carefully, as they describe your rights and restrictions with respect | ||||
to this document. | ||||
Abstract | 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 to 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 unicast applications and upper-layer | UDP for the designers of unicast applications and upper-layer | |||
protocols. Congestion control guidelines are a primary focus, but | protocols. Congestion control guidelines are a primary focus, but | |||
the document also provides guidance on other topics, including | the document also provides guidance on other topics, including | |||
message sizes, reliability, checksums and middlebox traversal. | message sizes, reliability, checksums, and middlebox traversal. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
3. UDP Usage Guidelines . . . . . . . . . . . . . . . . . . . . . 5 | 3. UDP Usage Guidelines . . . . . . . . . . . . . . . . . . . . . 5 | |||
3.1. Congestion Control Guidelines . . . . . . . . . . . . . . 6 | 3.1. Congestion Control Guidelines . . . . . . . . . . . . . . 6 | |||
3.2. Message Size Guidelines . . . . . . . . . . . . . . . . . 11 | 3.2. Message Size Guidelines . . . . . . . . . . . . . . . . . 11 | |||
3.3. Reliability Guidelines . . . . . . . . . . . . . . . . . . 12 | 3.3. Reliability Guidelines . . . . . . . . . . . . . . . . . . 12 | |||
3.4. Checksum Guidelines . . . . . . . . . . . . . . . . . . . 13 | 3.4. Checksum Guidelines . . . . . . . . . . . . . . . . . . . 13 | |||
3.5. Middlebox Traversal Guidelines . . . . . . . . . . . . . . 14 | 3.5. Middlebox Traversal Guidelines . . . . . . . . . . . . . . 15 | |||
3.6. Programming Guidelines . . . . . . . . . . . . . . . . . . 16 | 3.6. Programming Guidelines . . . . . . . . . . . . . . . . . . 17 | |||
3.7. ICMP Guidelines . . . . . . . . . . . . . . . . . . . . . 18 | 3.7. ICMP Guidelines . . . . . . . . . . . . . . . . . . . . . 18 | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | |||
5. Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 5. Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 22 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 7.1. Normative References . . . . . . . . . . . . . . . . . . . 22 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . . 22 | 7.2. Informative References . . . . . . . . . . . . . . . . . . 23 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . . 23 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 27 | ||||
Intellectual Property and Copyright Statements . . . . . . . . . . 28 | ||||
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 minimal associated | establishment and teardown overheads, and there is minimal associated | |||
end system state. Because of these characteristics, UDP can offer a | end system state. Because of these characteristics, UDP can offer a | |||
very 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 datagrams at the line rate of the link interface, which is | send UDP datagrams 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 | |||
skipping to change at page 3, line 41 | skipping to change at page 3, line 41 | |||
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. In addition, | applications that do not use UDP for streaming. In addition, | |||
congestion-controlled transmission is of benefit to an application | congestion-controlled transmission is of benefit to an application | |||
itself, because it can reduce self-induced packet loss, minimize | itself, because it can reduce self-induced packet loss, minimize | |||
retransmissions and hence reduce delays. Congestion control is | retransmissions, and hence reduce delays. Congestion control is | |||
essential even at relatively slow transmission rates. For example, | essential even at relatively slow transmission rates. For example, | |||
an application that generates five 1500-byte UDP datagrams in one | an application that generates five 1500-byte UDP datagrams in one | |||
second can already exceed the capacity of a 56 Kb/s path. For | second can already exceed the capacity of a 56 Kb/s path. For | |||
applications that can operate at higher, potentially unbounded data | applications that can operate at higher, potentially unbounded data | |||
rates, congestion control becomes vital to prevent congestion | rates, congestion control becomes vital to prevent congestion | |||
collapse and establish some degree of fairness. Section 3 describes | collapse and establish some degree of fairness. Section 3 describes | |||
a number of simple guidelines for the designers of such applications. | a number of simple guidelines for the designers of such applications. | |||
A UDP datagram is carried in a single IP packet and is hence limited | A UDP datagram is carried in a single IP packet and is hence limited | |||
to a maximum payload of 65,507 bytes for IPv4 and 65,527 bytes for | to a maximum payload of 65,507 bytes for IPv4 and 65,527 bytes for | |||
IPv6. The transmission of large IP packets usually requires IP | IPv6. The transmission of large IP packets usually requires IP | |||
fragmentation. Fragmentation decreases communication reliability and | fragmentation. Fragmentation decreases communication reliability and | |||
efficiency and should be avoided. IPv6 allows the option of | efficiency and should be avoided. IPv6 allows the option of | |||
transmitting large packets ("jumbograms") without fragmentation when | transmitting large packets ("jumbograms") without fragmentation when | |||
all link layers along the path support this [RFC2675]. Some of the | all link layers along the path support this [RFC2675]. Some of the | |||
guidelines in Section 3 describe how applications should determine | guidelines in Section 3 describe how applications should determine | |||
appropriate message sizes. Other sections of this document provide | appropriate message sizes. Other sections of this document provide | |||
guidance on reliability, checksums and middlebox traversal. | guidance on reliability, checksums, and middlebox traversal. | |||
This document provides guidelines and recommendations. Although most | This document provides guidelines and recommendations. Although most | |||
unicast UDP applications are expected to follow these guidelines, | unicast UDP applications are expected to follow these guidelines, | |||
there do exist valid reasons why a specific application may decide | there do exist valid reasons why a specific application may decide | |||
not to follow a given guideline. In such cases, it is RECOMMENDED | not to follow a given guideline. In such cases, it is RECOMMENDED | |||
that the application designers document the rationale for their | that the application designers document the rationale for their | |||
design choice in the technical specification of their application or | design choice in the technical specification of their application or | |||
protocol. | protocol. | |||
This document provides guidelines to designers of applications that | This document provides guidelines to designers of applications that | |||
use UDP for unicast transmission, which is the most common case. | use UDP for unicast transmission, which is the most common case. | |||
Specialized classes of applications use UDP for IP multicast | Specialized classes of applications use UDP for IP multicast | |||
[RFC1112], broadcast [RFC0919], or anycast [RFC1546] transmissions. | [RFC1112], broadcast [RFC0919], or anycast [RFC1546] transmissions. | |||
The design of such specialized applications requires expertise that | The design of such specialized applications requires expertise that | |||
goes beyond the simple, unicast-specific guidelines given in this | goes beyond the simple, unicast-specific guidelines given in this | |||
document. Multicast and broadcast senders may transmit to multiple | document. Multicast and broadcast senders may transmit to multiple | |||
receivers across potentially very heterogeneous paths at the same | receivers across potentially very heterogeneous paths at the same | |||
time, which significantly complicates congestion control, flow | time, which significantly complicates congestion control, flow | |||
control and reliability mechanisms. The IETF has defined a reliable | control, and reliability mechanisms. The IETF has defined a reliable | |||
multicast framework [RFC3048] and several building blocks to aid the | multicast framework [RFC3048] and several building blocks to aid the | |||
designers of multicast applications, such as [RFC3738] or [RFC4654]. | designers of multicast applications, such as [RFC3738] or [RFC4654]. | |||
Anycast senders must be aware that successive messages sent to the | Anycast senders must be aware that successive messages sent to the | |||
same anycast IP address may be delivered to different anycast nodes, | same anycast IP address may be delivered to different anycast nodes, | |||
i.e., arrive at different locations in the topology. It is not | i.e., arrive at different locations in the topology. It is not | |||
intended that the guidelines in this document apply to multicast, | intended that the guidelines in this document apply to multicast, | |||
broadcast or anycast applications that use UDP. | broadcast, or anycast applications that use UDP. | |||
Finally, although this document specifically refers to unicast | Finally, although this document specifically refers to unicast | |||
applications that use UDP, the spirit of some of its guidelines also | applications that use UDP, the spirit of some of its guidelines also | |||
applies to other message-passing applications and protocols | applies to other message-passing applications and protocols | |||
(specifically on the topics of congestion control, message sizes and | (specifically on the topics of congestion control, message sizes, and | |||
reliability). Examples include signaling or control applications | reliability). Examples include signaling or control applications | |||
that choose to run directly over IP by registering their own IP | that choose to run directly over IP by registering their own IP | |||
protocol number with IANA. This document may provide useful | protocol number with IANA. This document may provide useful | |||
background reading to the designers of such applications and | background reading to the designers of such applications and | |||
protocols. | protocols. | |||
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 | |||
Internet paths can have widely varying characteristics, including | Internet paths can have widely varying characteristics, including | |||
transmission delays, available bandwidths, congestion levels, | transmission delays, available bandwidths, congestion levels, | |||
reordering probabilities, supported message sizes or loss rates. | reordering probabilities, supported message sizes, or loss rates. | |||
Furthermore, the same Internet path can have very different | Furthermore, the same Internet path can have very different | |||
conditions over time. Consequently, applications that may be used on | conditions over time. Consequently, applications that may be used on | |||
the Internet MUST NOT make assumptions about specific path | the Internet MUST NOT make assumptions about specific path | |||
characteristics. They MUST instead use mechanisms that let them | characteristics. They MUST instead use mechanisms that let them | |||
operate safely under very different path conditions. Typically, this | operate safely under very different path conditions. Typically, this | |||
requires conservatively probing the current conditions of the | requires conservatively probing the current conditions of the | |||
Internet path they communicate over to establish a transmission | Internet path they communicate over to establish a transmission | |||
behavior that it can sustain and that is reasonably fair to other | behavior that it can sustain and that is reasonably fair to other | |||
traffic sharing the path. | 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 [RFC4960] and SCTP-PR [RFC3758], | protocol such as TCP [RFC0793], Stream Control Transmission Protocol | |||
or DCCP [RFC4340] with its different congestion control types | (SCTP) [RFC4960], and SCTP Partial Reliability Extension (SCTP-PR) | |||
[RFC4341][RFC4342][I-D.ietf-dccp-ccid4]. | [RFC3758], or Datagram Congestion Control Protocol (DCCP) [RFC4340] | |||
with its different congestion control types | ||||
[RFC4341][RFC4342][CCID4]. | ||||
If used correctly, these more fully-featured transport protocols are | If used correctly, these more fully-featured transport protocols are | |||
not as "heavyweight" as often claimed. For example, the TCP | not as "heavyweight" as often claimed. For example, the TCP | |||
algorithms have been continuously improved over decades, and have | algorithms have been continuously improved over decades, and have | |||
reached a level of efficiency and correctness that custom | reached a level of efficiency and correctness that custom | |||
application-layer mechanisms will struggle to easily duplicate. In | application-layer mechanisms will struggle to easily duplicate. In | |||
addition, many TCP implementations allow connections to be tuned by | addition, many TCP implementations allow connections to be tuned by | |||
an application to its purposes. For example, TCP's "Nagle" algorithm | an application to its purposes. For example, TCP's "Nagle" algorithm | |||
[RFC0896] can be disabled, improving communication latency at the | [RFC0896] can be disabled, improving communication latency at the | |||
expense of more frequent - but still congestion-controlled - packet | expense of more frequent -- but still congestion-controlled -- packet | |||
transmissions. Another example is the TCP SYN Cookie mechanism | transmissions. Another example is the TCP SYN cookie mechanism | |||
[RFC4987], which is available on many platforms. TCP with SYN | [RFC4987], which is available on many platforms. TCP with SYN | |||
Cookies does not require a server to maintain per-connection state | cookies does not require a server to maintain per-connection state | |||
until the connection is established. TCP also requires the end that | until the connection is established. TCP also requires the end that | |||
closes a connection to maintain the TIME-WAIT state that prevents | closes a connection to maintain the TIME-WAIT state that prevents | |||
delayed segments from one connection instance to interfere with a | delayed segments from one connection instance from interfering with a | |||
later one. Applications that are aware of and designed for this | later one. Applications that are aware of and designed for this | |||
behavior can shift maintenance of the TIME-WAIT state to conserve | behavior can shift maintenance of the TIME-WAIT state to conserve | |||
resources by controlling which end closes a TCP connection [FABER]. | resources by controlling which end closes a TCP connection [FABER]. | |||
Finally, TCP's built-in capacity-probing and awareness of the maximum | Finally, TCP's built-in capacity-probing and awareness of the maximum | |||
transmission unit supported by the path (PMTU) results in efficient | transmission unit supported by the path (PMTU) results in efficient | |||
data transmission that quickly compensates for the initial connection | data transmission that quickly compensates for the initial connection | |||
setup delay, for transfers that exchange more than a few segments. | setup delay, in the case of transfers that exchange more than a few | |||
segments. | ||||
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 datagrams to a destination host, in order to | at which it sends UDP datagrams to a destination host, in order to | |||
fulfill the requirements of [RFC2914]. It is important to stress | fulfill the requirements of [RFC2914]. It is important to stress | |||
that an application SHOULD perform congestion control over all UDP | that an application SHOULD perform congestion control over all UDP | |||
traffic it sends to a destination, independently from how it | traffic it sends to a destination, independently from how it | |||
generates this traffic. For example, an application that forks | generates this traffic. For example, an application that forks | |||
multiple worker processes or otherwise uses multiple sockets to | multiple worker processes or otherwise uses multiple sockets to | |||
generate UDP datagrams SHOULD perform congestion control over the | generate UDP datagrams SHOULD perform congestion control over the | |||
aggregate traffic. | aggregate traffic. | |||
The remainder of this section discusses several approaches for this | Several approaches to perform congestion control are discussed in the | |||
purpose. Not all approaches discussed below are appropriate for all | remainder of this section. Not all approaches discussed below are | |||
UDP-transmitting applications. Section 3.1.1 discusses congestion | appropriate for all UDP-transmitting applications. Section 3.1.1 | |||
control options for applications that perform bulk transfers over | discusses congestion control options for applications that perform | |||
UDP. Such applications can employ schemes that sample the path over | bulk transfers over UDP. Such applications can employ schemes that | |||
several subsequent RTTs during which data is exchanged, in order to | sample the path over several subsequent RTTs during which data is | |||
determine a sending rate that the path at its current load can | exchanged, in order to determine a sending rate that the path at its | |||
support. Other applications only exchange a few UDP datagrams with a | current load can support. Other applications only exchange a few UDP | |||
destination. Section 3.1.2 discusses congestion control options for | datagrams with a destination. Section 3.1.2 discusses congestion | |||
such "low data-volume" applications. Because they typically do not | control options for such "low data-volume" applications. Because | |||
transmit enough data to iteratively sample the path to determine a | they typically do not transmit enough data to iteratively sample the | |||
safe sending rate, they need to employ different kinds of congestion | path to determine a safe sending rate, they need to employ different | |||
control mechanisms. Section 3.1.3 discusses congestion control | kinds of congestion control mechanisms. Section 3.1.3 discusses | |||
considerations when UDP is used as a tunneling protocol. | 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. | |||
In the past, the IETF has also investigated integrated congestion | In the past, the IETF has also investigated integrated congestion | |||
control mechanisms that act on the traffic aggregate between two | control mechanisms that act on the traffic aggregate between two | |||
hosts, i.e., a framework such as the Congestion Manager [RFC3124], | hosts, i.e., a framework such as the Congestion Manager [RFC3124], | |||
where active sessions may share current congestion information in a | where active sessions may share current congestion information in a | |||
way that is independent of the transport protocol. Such mechanisms | way that is independent of the transport protocol. Such mechanisms | |||
have failed to see deployment, but would otherwise simplify the | have currently failed to see deployment, but would otherwise simplify | |||
design of congestion control mechanisms for UDP sessions, so that | the design of congestion control mechanisms for UDP sessions, so that | |||
they fulfill the requirements in [RFC2914]. | they fulfill the requirements in [RFC2914]. | |||
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, i.e., applications that exchange more than a small number of UDP | UDP, i.e., applications that exchange more than a small number of UDP | |||
datagrams per RTT, SHOULD implement TCP-Friendly Rate Control (TFRC) | datagrams per RTT, SHOULD implement TCP-Friendly Rate Control (TFRC) | |||
[RFC5348], window-based, TCP-like congestion control, or otherwise | [RFC5348], window-based, TCP-like congestion control, or otherwise | |||
ensure that the application complies with the congestion control | ensure that the application complies with the congestion control | |||
principles. | principles. | |||
skipping to change at page 7, line 49 | skipping to change at page 8, line 7 | |||
means a safe practice for operation in the Internet. When the UDP | means a safe practice for operation in the Internet. When the UDP | |||
traffic of such applications leaks out on unprovisioned Internet | traffic of such applications leaks out on unprovisioned Internet | |||
paths, it can significantly degrade the performance of other traffic | paths, it can significantly degrade the performance of other traffic | |||
sharing the path and even result in congestion collapse. | sharing the path and even result in congestion collapse. | |||
Applications that support an uncontrolled or unadaptive transmission | Applications that support an uncontrolled or unadaptive transmission | |||
behavior SHOULD NOT do so by default and SHOULD instead require users | behavior SHOULD NOT do so by default and SHOULD instead require users | |||
to explicitly enable this mode of operation. | 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 UDP datagrams | When applications that at any time exchange only a small number of | |||
with a destination at any time implement TFRC or one of the other | UDP datagrams with a destination 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 UDP datagrams with | Applications that at any time exchange only a small number of UDP | |||
a destination at any time SHOULD still control their transmission | datagrams with a destination SHOULD still control their transmission | |||
behavior by not sending on average more than one UDP datagram per | behavior by not sending on average more than one UDP datagram per | |||
round-trip time (RTT) to a destination. Similar to the | round-trip time (RTT) to a destination. Similar to the | |||
recommendation in [RFC1536], an application SHOULD maintain an | recommendation in [RFC1536], an application SHOULD maintain an | |||
estimate of the RTT for any destination with which it communicates. | estimate of the RTT for any destination with which it communicates. | |||
Applications SHOULD implement the algorithm specified in [RFC2988] to | Applications SHOULD implement the algorithm specified in [RFC2988] to | |||
compute a smoothed RTT (SRTT) estimate. They SHOULD also detect | compute a smoothed RTT (SRTT) estimate. They SHOULD also detect | |||
packet loss and exponentially back-off their retransmission timer | packet loss and exponentially back-off their retransmission timer | |||
when a loss event occurs. When implementing this scheme, | when a loss event occurs. When implementing this scheme, | |||
applications need to choose a sensible initial value for the RTT. | applications need to choose a sensible initial value for the RTT. | |||
This value SHOULD generally be as conservative as possible for the | This value SHOULD generally be as conservative as possible for the | |||
given application. TCP uses an initial value of 3 seconds [RFC2988], | given application. TCP uses an initial value of 3 seconds [RFC2988], | |||
which is also RECOMMENDED as an initial value for UDP applications. | which is also RECOMMENDED as an initial value for UDP applications. | |||
SIP [RFC3261] and GIST [I-D.ietf-nsis-ntlp] use an initial value of | SIP [RFC3261] and GIST [GIST] use an initial value of 500 ms, and | |||
500 ms, and initial timeouts that are shorter than this are likely | initial timeouts that are shorter than this are likely problematic in | |||
problematic in many cases. It is also important to note that the | many cases. It is also important to note that the initial timeout is | |||
initial timeout is not the maximum possible timeout - the RECOMMENDED | not the maximum possible timeout -- the RECOMMENDED algorithm in | |||
algorithm in [RFC2988] yields timeout values after a series of losses | [RFC2988] yields timeout values after a series of losses that are | |||
that are much longer than the initial value. | 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 that of applications that exchange | destination. The first case is that of applications that exchange | |||
too few UDP datagrams with a peer to establish a statistically | too few UDP datagrams with a peer to establish a statistically | |||
accurate RTT estimate. Such applications MAY use a pre-determined | accurate RTT estimate. Such applications MAY use a predetermined | |||
transmission interval that is exponentially backed-off when packets | transmission interval that is exponentially backed-off when packets | |||
are lost. TCP uses an initial value of 3 seconds [RFC2988], which is | are lost. TCP uses an initial value of 3 seconds [RFC2988], which is | |||
also RECOMMENDED as an initial value for UDP applications. SIP | also RECOMMENDED as an initial value for UDP applications. SIP | |||
[RFC3261] and GIST [I-D.ietf-nsis-ntlp] use an interval of 500 ms, | [RFC3261] and GIST [GIST] use an interval of 500 ms, and shorter | |||
and shorter values are likely problematic in many cases. As in the | values are likely problematic in many cases. As in the previous | |||
previous case, note that the initial timeout is not the maximum | case, note that the initial timeout is not the maximum possible | |||
possible timeout. | 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 datagram every 3 | Such applications SHOULD NOT send more than one UDP datagram 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 sending rate in this | likely problematic in many cases. Note that the sending rate in this | |||
case must be more conservative than in the two previous cases, | case 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 | |||
loss, i.e., congestion events, and the application therefore cannot | loss, i.e., congestion events, and the application therefore 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 either independently detect | uncorrelated, and an application SHOULD either independently detect | |||
and respond to congestion along both directions, or limit new and | and respond to congestion along both directions, or limit new and | |||
retransmitted requests based on acknowledged responses across the | retransmitted requests based on acknowledged responses across the | |||
entire round trip path. | entire round-trip path. | |||
3.1.3. UDP Tunnels | 3.1.3. UDP Tunnels | |||
One increasingly popular use of UDP is as a tunneling protocol, where | One increasingly popular use of UDP is as a tunneling protocol, where | |||
a tunnel endpoint encapsulates the packets of another protocol inside | a tunnel endpoint encapsulates the packets of another protocol inside | |||
UDP datagrams and transmits them to another tunnel endpoint, which | UDP datagrams and transmits them to another tunnel endpoint, which | |||
decapsulates the UDP datagrams and forwards the original packets | decapsulates the UDP datagrams and forwards the original packets | |||
contained in the payload. Tunnels establish virtual links that | contained in the payload. Tunnels establish virtual links that | |||
appear to directly connect locations that are distant in the physical | appear to directly connect locations that are distant in the physical | |||
Internet topology, and can be used to create virtual (private) | Internet topology and can be used to create virtual (private) | |||
networks. Using UDP as a tunneling protocol is attractive when the | networks. Using UDP as a tunneling protocol is attractive when the | |||
payload protocol is not supported by middleboxes that may exist along | payload protocol is not supported by middleboxes that may exist along | |||
the path, because many middleboxes support UDP transmissions. | the path, because many middleboxes support transmission using UDP. | |||
Well-implemented tunnels are generally invisible to the endpoints | Well-implemented tunnels are generally invisible to the endpoints | |||
that happen to transmit over a path that includes tunneled links. On | 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 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 | the routers between the two tunnel endpoints, the traffic that a UDP | |||
tunnel generates is a regular UDP flow, and the encapsulator and | tunnel generates is a regular UDP flow, and the encapsulator and | |||
decapsulator appear as regular UDP-sending and -receiving | decapsulator appear as regular UDP-sending and -receiving | |||
applications. Because other flows can share the path with one or | applications. Because other flows can share the path with one or | |||
more UDP tunnels, congestion control needs to be considered. | more UDP tunnels, congestion control needs to be considered. | |||
Two factors determine whether a UDP tunnel needs to employ specific | Two factors determine whether a UDP tunnel needs to employ specific | |||
congestion control mechanisms. First, whether the tunneling scheme | congestion control mechanisms -- first, whether the payload traffic | |||
generates UDP traffic at a volume that corresponds to the volume of | is IP-based; second, whether the tunneling scheme generates UDP | |||
payload traffic carried within the tunnel. Second, whether the | traffic at a volume that corresponds to the volume of payload traffic | |||
payload traffic is IP-based. | carried within the tunnel. | |||
IP-based traffic is generally assumed to be congestion-controlled, | IP-based traffic is generally assumed to be congestion-controlled, | |||
i.e., it is assumed that the transport protocols generating IP-based | i.e., it is assumed that the transport protocols generating IP-based | |||
traffic at the sender already employ mechanisms that are sufficient | traffic at the sender already employ mechanisms that are sufficient | |||
to address congestion on the path. Consequently, a tunnel carrying | to address congestion on the path. Consequently, a tunnel carrying | |||
IP-based traffic should already interact appropriately with other | IP-based traffic should already interact appropriately with other | |||
traffic sharing the path, and specific congestion control mechanism | traffic sharing the path, and specific congestion control mechanisms | |||
for the tunnel are not necessary. | for the tunnel are not necessary. | |||
However, if the IP traffic in the tunnel is known to not be | However, if the IP traffic in the tunnel is known to not be | |||
congestion-controlled, additional measures are RECOMMENDED in order | congestion-controlled, additional measures are RECOMMENDED in order | |||
to limit the impact of the tunneled traffic on other traffic sharing | to limit the impact of the tunneled traffic on other traffic sharing | |||
the path. | the path. | |||
The following guidelines define these possible cases in more detail: | The following guidelines define these possible cases in more detail: | |||
1. A tunnel generates UDP traffic at a volume that corresponds to | 1. A tunnel generates UDP traffic at a volume that corresponds to | |||
skipping to change at page 10, line 23 | skipping to change at page 10, line 28 | |||
This is arguably the most common case for Internet tunnels. In | This is arguably the most common case for Internet tunnels. In | |||
this case, the UDP tunnel SHOULD NOT employ its own congestion | this case, the UDP tunnel SHOULD NOT employ its own congestion | |||
control mechanism, because congestion losses of tunneled traffic | control mechanism, because congestion losses of tunneled traffic | |||
will already trigger an appropriate congestion response at the | will already trigger an appropriate congestion response at the | |||
original senders of the tunneled traffic. | original senders of the tunneled traffic. | |||
Note that this guideline is built on the assumption that most IP- | Note that this guideline is built on the assumption that most IP- | |||
based communication is congestion-controlled. If a UDP tunnel is | based communication is congestion-controlled. If a UDP tunnel is | |||
used for IP-based traffic that is known to not be congestion- | used for IP-based traffic that is known to not be congestion- | |||
controlled, the next set of guidelines applies: | controlled, the next set of guidelines applies. | |||
2. A tunnel generates UDP traffic at a volume that corresponds to | 2. A tunnel generates UDP traffic at a volume that corresponds to | |||
the volume of payload traffic, and the payload traffic is not | 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 | known to be IP-based, or is known to be IP-based but not | |||
congestion-controlled. | congestion-controlled. | |||
This can be the case, for example, when some link-layer protocols | This can be the case, for example, when some link-layer protocols | |||
are encapsulated within UDP (but not all link-layer protocols; | are encapsulated within UDP (but not all link-layer protocols; | |||
some are congestion-controlled.) Because it is not known that | some are congestion-controlled). Because it is not known that | |||
congestion losses of tunneled non-IP traffic will trigger an | congestion losses of tunneled non-IP traffic will trigger an | |||
appropriate congestion response at the senders, the UDP tunnel | appropriate congestion response at the senders, the UDP tunnel | |||
SHOULD employ an appropriate congestion control mechanism. | SHOULD employ an appropriate congestion control mechanism. | |||
Because tunnels are usually bulk-transfer applications as far as | Because tunnels are usually bulk-transfer applications as far as | |||
the intermediate routers are concerned, the guidelines in | the intermediate routers are concerned, the guidelines in | |||
Section 3.1.1 apply. | Section 3.1.1 apply. | |||
3. A tunnel generates UDP traffic at a volume that does not | 3. A tunnel generates UDP traffic at a volume that does not | |||
correspond to the volume of payload traffic, independent of | correspond to the volume of payload traffic, independent of | |||
whether the payload traffic is IP-based or congestion-controlled. | whether the payload traffic is IP-based or congestion-controlled. | |||
Examples of this class include UDP tunnels that send at a | Examples of this class include UDP tunnels that send at a | |||
constant rate, increase their transmission rates under loss, for | constant rate, increase their transmission rates under loss, for | |||
example, due to increasing redundancy when forward-error- | example, due to increasing redundancy when Forward Error | |||
correction is used, or are otherwise constrained in their | Correction is used, or are otherwise constrained in their | |||
transmission behavior. These specialized uses of UDP for | transmission behavior. These specialized uses of UDP for | |||
tunneling go beyond the scope of the general guidelines given in | tunneling go beyond the scope of the general guidelines given in | |||
this document. The implementer of such specialized tunnels | this document. The implementer of such specialized tunnels | |||
SHOULD carefully consider congestion control in the design of | SHOULD carefully consider congestion control in the design of | |||
their tunneling mechanism. | their tunneling mechanism. | |||
Designing a tunneling mechanism requires significantly more expertise | Designing a tunneling mechanism requires significantly more expertise | |||
than needed for many other UDP applications, because tunnels | than needed for many other UDP applications, because tunnels | |||
virtualize lower-layer components of the Internet, and the | virtualize lower-layer components of the Internet, and the | |||
virtualized components need to correctly interact with the | virtualized components need to correctly interact with the | |||
skipping to change at page 11, line 21 | skipping to change at page 11, line 26 | |||
congestion control considerations for implementing UDP tunnels; a | congestion control considerations for implementing UDP tunnels; a | |||
discussion of other required tunneling behavior is out of scope. | discussion of other required tunneling behavior is out of scope. | |||
3.2. Message Size Guidelines | 3.2. Message Size Guidelines | |||
IP fragmentation lowers the efficiency and reliability of Internet | IP fragmentation lowers the efficiency and reliability of Internet | |||
communication. The loss of a single fragment results in the loss of | communication. The loss of a single fragment results in the loss of | |||
an entire fragmented packet, because even if all other fragments are | an entire fragmented packet, because even if all other fragments are | |||
received correctly, the original packet cannot be reassembled and | received correctly, the original packet cannot be reassembled and | |||
delivered. This fundamental issue with fragmentation exists for both | delivered. This fundamental issue with fragmentation exists for both | |||
IPv4 and IPv6. In addition, some NATs and firewalls drop IP | IPv4 and IPv6. In addition, some network address translators (NATs) | |||
fragments. The network address translation performed by a NAT only | and firewalls drop IP fragments. The network address translation | |||
operates on complete IP packets, and some firewall policies also | performed by a NAT only operates on complete IP packets, and some | |||
require inspection of complete IP packets. Even with these being the | firewall policies also require inspection of complete IP packets. | |||
case, some NATs and firewalls simply do not implement the necessary | Even with these being the case, some NATs and firewalls simply do not | |||
reassembly functionality, and instead choose to drop all fragments. | implement the necessary reassembly functionality, and instead choose | |||
Finally, [RFC4963] documents other issues specific to IPv4 | to drop all fragments. Finally, [RFC4963] documents other issues | |||
fragmentation. | specific to IPv4 fragmentation. | |||
Due to these issues, an application SHOULD NOT send UDP datagrams | Due to these issues, an application SHOULD NOT send UDP datagrams | |||
that result in IP packets that exceed the MTU of the path to the | that result in IP packets that exceed the MTU of the path to the | |||
destination. Consequently, an application SHOULD either use the path | destination. Consequently, an application SHOULD either use the path | |||
MTU information provided by the IP layer or implement path MTU | MTU information provided by the IP layer or implement path MTU | |||
discovery itself [RFC1191][RFC1981][RFC4821] to determine whether the | discovery itself [RFC1191][RFC1981][RFC4821] to determine whether the | |||
path to a destination will support its desired message size without | path to a destination will support its desired message size without | |||
fragmentation. | fragmentation. | |||
Applications that do not follow this recommendation to do PMTU | Applications that do not follow this recommendation to do PMTU | |||
discovery SHOULD still avoid sending UDP datagrams that would result | discovery SHOULD still avoid sending UDP datagrams that would result | |||
in IP packets that exceed the path MTU. Because the actual path MTU | in IP packets that exceed the path MTU. Because the actual path MTU | |||
is unknown, such applications SHOULD fall back to sending messages | is unknown, such applications SHOULD fall back to sending messages | |||
that are shorter that the default effective MTU for sending (EMTU_S | that are shorter than the default effective MTU for sending (EMTU_S | |||
in [RFC1122]). For IPv4, EMTU_S is the smaller of 576 bytes and the | in [RFC1122]). For IPv4, EMTU_S is the smaller of 576 bytes and the | |||
first-hop MTU [RFC1122]. For IPv6, EMTU_S is 1280 bytes [RFC2460]. | first-hop MTU [RFC1122]. For IPv6, EMTU_S is 1280 bytes [RFC2460]. | |||
The effective PMTU for a directly connected destination (with no | The effective PMTU for a directly connected destination (with no | |||
routers on the path) is the configured interface MTU, which could be | routers on the path) is the configured interface MTU, which could be | |||
less than the maximum link payload size. Transmission of minimum- | less than the maximum link payload size. Transmission of minimum- | |||
sized UDP datagrams is inefficient over paths that support a larger | sized UDP datagrams is inefficient over paths that support a larger | |||
PMTU, which is a second reason to implement PMTU discovery. | PMTU, which is a second reason to implement PMTU discovery. | |||
To determine an appropriate UDP payload size, applications MUST | To determine an appropriate UDP payload size, applications MUST | |||
subtract the size of the IP header (which includes any IPv4 optional | 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 | 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, | header (8 bytes) from the PMTU size. This size, known as the MMS_S, | |||
can be obtained from the TCP/IP stack [RFC1122]. | can be obtained from the TCP/IP stack [RFC1122]. | |||
Applications that do not send messages that exceed the effective PMTU | 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 an additional reduction of the | that the presence of tunnels can cause an additional reduction of the | |||
effective PMTU, so implementing PMTU discovery will still be | effective PMTU, so implementing PMTU discovery may be beneficial. | |||
beneficial in some cases. | ||||
Applications that fragment an application-layer message into multiple | Applications that fragment an application-layer message into multiple | |||
UDP datagrams SHOULD perform this fragmentation so that each datagram | UDP datagrams SHOULD perform this fragmentation so that each datagram | |||
can be received independently, and be independently retransmitted in | can be received independently, and be independently retransmitted in | |||
the case where an application implements its own reliability | the case where an application implements its own reliability | |||
mechanisms. | mechanisms. | |||
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 | |||
skipping to change at page 12, line 46 | skipping to change at page 12, line 50 | |||
In addition, 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 reordering, where UDP | connectivity, or mobility. This can cause reordering, where UDP | |||
datagrams arrive at the receiver in an order different from the | datagrams arrive at the receiver in an order different from the | |||
transmission order. Applications that require ordered delivery MUST | transmission order. Applications that require ordered delivery MUST | |||
reestablish datagram ordering themselves. | reestablish datagram ordering themselves. | |||
Finally, it is important to note that delay spikes can be very large. | Finally, it is important to note that delay spikes can be very large. | |||
This can cause reordered packets to arrive many seconds after they | This can cause reordered packets to arrive many seconds after they | |||
were sent. [RFC0793] defines the the maximum delay a TCP segment | were sent. [RFC0793] defines the maximum delay a TCP segment should | |||
should experience - the Maximum Segment Lifetime (MSL) - as 2 | experience -- the Maximum Segment Lifetime (MSL) -- as 2 minutes. No | |||
minutes. No other RFC defines an MSL for other transport protocols | other RFC defines an MSL for other transport protocols or IP itself. | |||
or IP itself. This document clarifies that the MSL value to be used | This document clarifies that the MSL value to be used for UDP SHOULD | |||
for UDP SHOULD be the same 2 minutes as for TCP. Applications SHOULD | be the same 2 minutes as for TCP. Applications SHOULD be robust to | |||
be robust to the reception of delayed or duplicate packets that are | the reception of delayed or duplicate packets that are received | |||
received within this 2-minute interval. | within this 2-minute interval. | |||
An application that requires reliable and ordered message delivery | An application that requires reliable and ordered message delivery | |||
SHOULD choose an IETF standard transport protocol that provides these | SHOULD choose an IETF standard transport protocol that provides these | |||
features. If this is not possible, it will need to implement a set | features. If this is not possible, it will need to implement a set | |||
of appropriate mechanisms itself. | 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 one's complement checksum | |||
that provides an integrity check. This results in a relatively weak | that provides an integrity check. This results in a relatively weak | |||
protection in terms of coding theory [RFC3819] and application | protection in terms of coding theory [RFC3819], and application | |||
developers SHOULD implement additional checks where data integrity is | developers SHOULD implement additional checks where data integrity is | |||
important, e.g., through a Cyclic Redundancy Check (CRC) included | important, e.g., through a Cyclic Redundancy Check (CRC) included | |||
with the data to verify the integrity of an entire object/file sent | with the data to verify the integrity of an entire object/file sent | |||
over UDP service. | over the UDP service. | |||
The UDP checksum provides a statistical guarantee that the payload | The UDP checksum provides a statistical guarantee that the payload | |||
was not corrupted in transit. It also allows the receiver to verify | was not corrupted in transit. It also allows the receiver to verify | |||
that it was the intended destination of the packet, because it covers | that it was the intended destination of the packet, because it covers | |||
the IP addresses, port numbers and protocol number, and it verifies | the IP addresses, port numbers, and protocol number, and it verifies | |||
that the packet is not truncated or padded, because it covers the | that the packet is not truncated or padded, because it covers the | |||
size field. It therefore protects an application against receiving | size field. It therefore protects an application against receiving | |||
corrupted payload data in place of, or in addition to, the data that | corrupted payload data in place of, or in addition to, the data that | |||
was sent. This check is not strong from a coding or cryptographic | was sent. This check is not strong from a coding or cryptographic | |||
perspective, and is not designed to detect physical-layer errors or | perspective, and is not designed to detect physical-layer errors or | |||
malicious modification of the datagram [RFC3819]. | malicious modification of the datagram [RFC3819]. | |||
Applications SHOULD enable UDP checksums, although [RFC0768] permits | 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 UDP datagram is received that was originally | behave correctly when a UDP datagram is received that was originally | |||
sent to a different destination or is otherwise corrupted. The use | sent to a different destination or is otherwise corrupted. The use | |||
of the UDP checksum is REQUIRED when applications transmit UDP over | of the UDP checksum is REQUIRED when applications transmit UDP over | |||
IPv6 [RFC2460]. | IPv6 [RFC2460]. | |||
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 | |||
should still follow the congestion control and other guidelines | should still follow the congestion control and other guidelines | |||
described for use with UDP in Section 3. | 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". | |||
By default, the UDP-Lite checksum coverage extends across the entire | By default, the UDP-Lite checksum coverage extends across the entire | |||
datagram. If required, an application may dynamically modify this | datagram. If required, an application may dynamically modify this | |||
length value, e.g., to offer greater protection to some messages. | length value, e.g., to offer greater protection to some messages. | |||
UDP-Lite always verifies that a packet was delivered to the intended | UDP-Lite always verifies that a packet was delivered to the intended | |||
destination, i.e., always verifies the header fields. Errors in the | destination, i.e., always verifies the header fields. Errors in the | |||
insensitive part will not cause a UDP datagram to be discarded by the | insensitive part will not cause a UDP datagram to be discarded by the | |||
destination. Applications using UDP-Lite therefore MUST NOT make | destination. Applications using UDP-Lite therefore MUST NOT make | |||
assumptions regarding the correctness of the data received in the | assumptions regarding the correctness of the data received in the | |||
insensitive part of the UDP-Lite payload. | insensitive part of the UDP-Lite payload. | |||
skipping to change at page 14, line 45 | skipping to change at page 14, line 48 | |||
an application. UDP-Lite does not provide mechanisms to negotiate | an application. UDP-Lite does not provide mechanisms to negotiate | |||
the checksum coverage between the sender and receiver. | the 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 datagrams | and/or encryption are used, this can result in UDP-Lite datagrams | |||
being treated the same as UDP datagrams, i.e., result in packet loss. | being treated the same as UDP datagrams, i.e., result in packet loss. | |||
Use of IP fragmentation can also prevent special treatment for UDP- | Use of IP fragmentation can also prevent special treatment for UDP- | |||
Lite datagrams, and is another reason why applications SHOULD avoid | Lite datagrams, and this is another reason why applications SHOULD | |||
IP fragmentation (Section 3.2). | avoid IP 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. | |||
skipping to change at page 15, line 22 | skipping to change at page 15, line 28 | |||
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 the middlebox. | UDP traffic exchanges that will be successful across the middlebox. | |||
For example, NATs and firewalls typically define the partial path on | For example, NATs and firewalls typically define the partial path on | |||
one side of them to be interior to the domain they serve, whereas the | 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 that arrives after the per-flow state has timed out is | |||
as is other traffic arriving from the exterior. | dropped, as is other traffic that arrives from the exterior. | |||
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 Domain Name System (DNS), which has a strict request- | example is the Domain Name System (DNS), which has a strict request- | |||
response communication pattern that typically completes within | response communication pattern that typically completes within | |||
seconds. | 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 | communication failures and implement mechanisms to re-establish | |||
application-layer sessions and state. | 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. | |||
An application that needs to employ keep-alives to deliver useful | An application that needs to employ keep-alives to deliver useful | |||
service over UDP in the presence of middleboxes SHOULD NOT transmit | service over UDP in the presence of middleboxes SHOULD NOT transmit | |||
them more frequently than once every 15 seconds and SHOULD use longer | them more frequently than once every 15 seconds and SHOULD use longer | |||
intervals when possible. No common timeout has been specified for | intervals when possible. No common timeout has been specified for | |||
per-flow UDP state for arbitrary middleboxes. For NATs, [RFC4787] | per-flow UDP state for arbitrary middleboxes. NATs require a state | |||
requires a state timeout of 2 minutes or longer. However, empirical | timeout of 2 minutes or longer [RFC4787]. However, empirical | |||
evidence suggests that a significant fraction of the deployed | evidence suggests that a significant fraction of currently deployed | |||
middleboxes unfortunately uses shorter timeouts. The timeout of 15 | middleboxes unfortunately use shorter timeouts. The timeout of 15 | |||
seconds originates with the Interactive Connectivity Establishment | seconds originates with the Interactive Connectivity Establishment | |||
(ICE) protocol [I-D.ietf-mmusic-ice]. When applications are deployed | (ICE) protocol [ICE]. When applications are deployed in more | |||
in more controlled network environments, the deployers SHOULD | controlled network environments, the deployers SHOULD investigate | |||
investigate whether the target environment allows applications to use | whether the target environment allows applications to use longer | |||
longer intervals, or whether it offers mechanisms to explicitly | intervals, or whether it offers mechanisms to explicitly control | |||
control middlebox state timeout durations, for example, using MIDCOM | middlebox state timeout durations, for example, using Middlebox | |||
[RFC3303], NSIS [I-D.ietf-nsis-nslp-natfw] or UPnP [UPNP]. It is | Communications (MIDCOM) [RFC3303], Next Steps in Signaling (NSIS) | |||
RECOMMENDED that applications apply slight random variations | [NSLP], or Universal Plug and Play (UPnP) [UPnP]. It is RECOMMENDED | |||
("jitter") to the timing of keep-alive transmissions, in order to | that applications apply slight random variations ("jitter") to the | |||
reduce the potential for persistent synchronization between keep- | timing of keep-alive transmissions, to reduce the potential for | |||
alive transmissions from different hosts. | persistent synchronization between keep-alive transmissions from | |||
different hosts. | ||||
Sending keep-alives is not a substitute for implementing robust | Sending keep-alives is not a substitute for implementing robust | |||
connection handling. Like all UDP datagrams, keep-alives can be | connection handling. Like all UDP datagrams, keep-alives can be | |||
delayed or dropped, causing middlebox state to time out. In | delayed or dropped, causing middlebox state to time out. In | |||
addition, the congestion control guidelines in Section 3.1 cover all | addition, the congestion control guidelines in Section 3.1 cover all | |||
UDP transmissions by an application, including the transmission of | UDP transmissions by an application, including the transmission of | |||
middlebox keep-alives. Congestion control may thus lead to delays or | middlebox keep-alives. Congestion control may thus lead to delays or | |||
temporary suspension of keep-alive transmission. | temporary suspension of keep-alive transmission. | |||
Keep-alive messages are NOT RECOMMENDED for general use. They are | Keep-alive messages are NOT RECOMMENDED for general use. They are | |||
unnecessary for many applications and can consume significant amounts | unnecessary for many applications and may consume significant | |||
of system and network resources. For example, on battery-powered | resources. For example, on battery-powered devices, if an | |||
devices, if an application needs to maintain connectivity for long | application needs to maintain connectivity for long periods with | |||
periods with little traffic, the frequency at which keep-alives are | little traffic, the frequency at which keep-alives are sent can | |||
sent can become the determining factor that governs power | become the determining factor that governs power consumption, | |||
consumption, depending on the underlying network technology. Because | depending on the underlying network technology. Because many | |||
many middleboxes are designed to require keep-alives for TCP | middleboxes are designed to require keep-alives for TCP connections | |||
connections at a frequency that is much lower than that needed for | at a frequency that is much lower than that needed for UDP, this | |||
UDP, this difference alone can often be sufficient to prefer TCP over | difference alone can often be sufficient to prefer TCP over UDP for | |||
UDP for these deployments. On the other hand, there is anecdotal | these deployments. On the other hand, there is anecdotal evidence | |||
evidence that suggests that direct communication through middleboxes, | that suggests that direct communication through middleboxes, e.g., by | |||
e.g., by using ICE [I-D.ietf-mmusic-ice], does succeed less often | using ICE [ICE], does succeed less often with TCP than with UDP. The | |||
with TCP than with UDP. The tradeoffs between different transport | tradeoffs between different transport protocols -- especially when it | |||
protocols - especially when it comes to middlebox traversal - deserve | comes to middlebox traversal -- deserve careful analysis. | |||
careful analysis. | ||||
3.6. Programming Guidelines | 3.6. Programming Guidelines | |||
The de facto standard application programming interface (API) for | The de facto standard application programming interface (API) for | |||
TCP/IP applications is the "sockets" interface [POSIX]. Some | TCP/IP applications is the "sockets" interface [POSIX]. Some | |||
platforms also offer applications the ability to directly assemble | platforms also offer applications the ability to directly assemble | |||
and transmit IP packets through "raw sockets" or similar facilities. | and transmit IP packets through "raw sockets" or similar facilities. | |||
This is a second, more cumbersome method of using UDP. The | This is a second, more cumbersome method of using UDP. The | |||
guidelines in this document cover all such methods through which an | guidelines in this document cover all such methods through which an | |||
application may use UDP. Because the sockets API is by far the most | application may use UDP. Because the sockets API is by far the most | |||
common method, the remainder of this section discusses it in more | common method, the remainder of this section discusses it in more | |||
detail. | detail. | |||
Although the sockets API was developed for UNIX in the early 1980s, a | Although the sockets API was developed for UNIX in the early 1980s, a | |||
wide variety of non-UNIX operating systems also implements it. The | wide variety of non-UNIX operating systems also implement this. The | |||
sockets API supports both IPv4 and IPv6 [RFC3493]. The UDP sockets | sockets API supports both IPv4 and IPv6 [RFC3493]. The UDP sockets | |||
API differs from that for TCP in several key ways. Because | API differs from that for TCP in several key ways. Because | |||
application programmers are typically more familiar with the TCP | application programmers are typically more familiar with the TCP | |||
sockets API, the remainder of this section discusses these | sockets API, the remainder of this section discusses these | |||
differences. [STEVENS] provides usage examples of the UDP sockets | differences. [STEVENS] provides usage examples of the UDP sockets | |||
API. | API. | |||
UDP datagrams may be directly sent and received, without any | UDP datagrams 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. Many 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 | these applications MUST implement corresponding checks at the | |||
explicitly request that the operating system filter the received | application layer or explicitly request that the operating system | |||
packets. | filter the received packets. | |||
If a client/server application executes on a host with more than one | If a client/server application executes on a host with more than one | |||
IP interface, the application SHOULD send any UDP responses with an | IP interface, the application SHOULD send any UDP responses with an | |||
IP source address that matches the IP destination address of the UDP | IP source address that matches the IP destination address of the UDP | |||
datagram that carried the request (see [RFC1122], Section 4.1.3.5). | datagram that carried the request (see [RFC1122], Section 4.1.3.5). | |||
Many middleboxes expect this transmission behavior and drop replies | Many middleboxes expect this transmission behavior and drop replies | |||
that are sent from a different IP address, as explained in | that are sent from a different IP address, as explained in | |||
Section 3.5. | Section 3.5. | |||
A UDP receiver can receive a valid UDP datagram with a zero-length | 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 | 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 | from a read() socket call, which for TCP indicates the end of the | |||
connection. | 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., | |||
to bind a UDP socket to a specific pair of addresses and ports. This | to bind a UDP socket to a specific pair of addresses and ports. 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. Binding a socket also allows configuring | 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 | options that affect the UDP or IP layers, for example, use of the UDP | |||
checksum or the IP Time Stamp Option. On some stacks, a bound socket | checksum or the IP Timestamp option. On some stacks, a bound socket | |||
also allows an application to be notified when ICMP error messages | also allows an application to be notified when ICMP error messages | |||
are received for its transmissions [RFC1122]. | 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 all the data that was sent when the application issues | fail to return all the data that was sent when the application issues | |||
them too infrequently (i.e., such that the receive buffer overflows). | them too infrequently (i.e., such that the receive buffer overflows). | |||
skipping to change at page 19, line 29 | skipping to change at page 19, line 39 | |||
One option of securing UDP communications is with IPsec [RFC4301], | One option of securing UDP communications is with IPsec [RFC4301], | |||
which can provide authentication for flows of IP packets through the | which can provide authentication for flows of IP packets through the | |||
Authentication Header (AH) [RFC4302] and encryption and/or | Authentication Header (AH) [RFC4302] and encryption and/or | |||
authentication through the Encapsulating Security Payload (ESP) | authentication through the Encapsulating Security Payload (ESP) | |||
[RFC4303]. Applications use the Internet Key Exchange (IKE) | [RFC4303]. Applications use the Internet Key Exchange (IKE) | |||
[RFC4306] to configure IPsec for their sessions. Depending on how | [RFC4306] to configure IPsec for their sessions. Depending on how | |||
IPsec is configured for a flow, it can authenticate or encrypt the | IPsec is configured for a flow, it can authenticate or encrypt the | |||
UDP headers as well as UDP payloads. If an application only requires | UDP headers as well as UDP payloads. If an application only requires | |||
authentication, ESP with no encryption but with authentication is | authentication, ESP with no encryption but with authentication is | |||
often a better option than AH, because ESP can operate across | often a better option than AH, because ESP can operate across | |||
middleboxes. In order to be able to use IPsec, an application must | middleboxes. An application that uses IPsec requires the support of | |||
execute on an operating system that implements the IPsec protocol | an operating system that implements the IPsec protocol suite. | |||
suite. | ||||
Although it is possible to use IPsec to secure UDP communications, | Although it is possible to use IPsec to secure UDP communications, | |||
not all operating systems support IPsec or allow applications to | not all operating systems support IPsec or allow applications to | |||
easily configure it for their flows. A second option of securing UDP | easily configure it for their flows. A second option of securing UDP | |||
communications is through Datagram Transport Layer Security (DTLS) | communications is through Datagram Transport Layer Security (DTLS) | |||
[RFC4347]. DTLS provides communication privacy by encrypting UDP | [RFC4347]. DTLS provides communication privacy by encrypting UDP | |||
payloads. It does not protect the UDP headers. Applications can | 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 for authenticating or encrypting UDP payloads | Many other options for authenticating or encrypting UDP payloads | |||
exist. For example, the GSS-API security framework [RFC2743] or | exist. For example, the GSS-API security framework [RFC2743] or | |||
Cryptographic Message Syntax (CMS) [RFC3852] could be used to protect | Cryptographic Message Syntax (CMS) [RFC3852] could be used to protect | |||
UDP payloads. The IETF standard for securing RTP [RFC3550] realtime | UDP payloads. The IETF standard for securing RTP [RFC3550] | |||
communication sessions over UDP is SRTP [RFC3711]. In some | communication sessions over UDP is the Secure Real-time Transport | |||
applications, a better solution is to protect larger standalone | Protocol (SRTP) [RFC3711]. In some applications, a better solution | |||
objects, such as files or messages, instead of individual UDP | is to protect larger stand-alone objects, such as files or messages, | |||
payloads. In these situations, CMS [RFC3852], S/MIME [RFC3851] or | instead of individual UDP payloads. In these situations, CMS | |||
OpenPGP [RFC4880] could be used. In addition, there are many non- | [RFC3852], S/MIME [RFC3851] or OpenPGP [RFC4880] could be used. In | |||
IETF protocols in this area. | addition, there are many non-IETF protocols in this area. | |||
Like congestion control mechanisms, security mechanisms are difficult | Like congestion control mechanisms, security mechanisms are difficult | |||
to design and implement correctly. It is hence RECOMMENDED that | to design and implement correctly. It is hence RECOMMENDED that | |||
applications employ well-known standard security mechanisms such as | applications employ well-known standard security mechanisms such as | |||
DTLS or IPsec, rather than inventing their own. | DTLS or IPsec, rather than inventing their own. | |||
The Generalized TTL Security Mechanism (GTSM) [RFC3682] may be used | The Generalized TTL Security Mechanism (GTSM) [RFC5082] may be used | |||
with UDP applications (especially when the intended endpoint is on | with UDP applications (especially when the intended endpoint is on | |||
the same link as the sender). This is a lightweight mechanism that | the same link as the sender). This is a lightweight mechanism that | |||
allows a receiver to filter unwanted packets. | allows a receiver to filter unwanted packets. | |||
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, and does not raise any | to congestion-control their transmissions, and does not 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 Sections 3 and 4 in a | |||
Section 4 in a tabular format in Table 1 for easy referencing. | tabular format (Table 1) for easy referencing. | |||
+---------------------------------------------------------+---------+ | +---------------------------------------------------------+---------+ | |||
| Recommendation | Section | | | Recommendation | Section | | |||
+---------------------------------------------------------+---------+ | +---------------------------------------------------------+---------+ | |||
| MUST tolerate wide range of Internet path conditions | 3 | | | MUST tolerate a 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) | | | |||
| | | | | | | | |||
| SHOULD control rate of transmission | 3.1 | | | SHOULD control rate of transmission | 3.1 | | |||
| SHOULD perform congestion control over all traffic | | | | SHOULD perform congestion control over all traffic | | | |||
| | | | | | | | |||
| for bulk transfers, | 3.1.1 | | | for bulk transfers, | 3.1.1 | | |||
| SHOULD consider implementing TFRC | | | | SHOULD consider implementing TFRC | | | |||
| else, SHOULD otherwise use bandwidth similar to TCP | | | | else, SHOULD in other ways use bandwidth similar to TCP | | | |||
| | | | | | | | |||
| for non-bulk transfers, | 3.1.2 | | | for non-bulk transfers, | 3.1.2 | | |||
| SHOULD measure RTT and transmit max. 1 datagram/RTT | | | | SHOULD measure RTT and transmit max. 1 datagram/RTT | | | |||
| else, SHOULD send at most 1 datagram every 3 seconds | | | | else, SHOULD send at most 1 datagram every 3 seconds | | | |||
| SHOULD back-off retransmission timers following loss | | | ||||
| | | | ||||
| for tunnels carrying IP Traffic, | 3.1.3 | | ||||
| SHOULD NOT perform congestion control | | | ||||
| | | | ||||
| for non-IP tunnels or rate not determined by traffic, | 3.1.3 | | ||||
| SHOULD perform congestion control | | | ||||
| | | | | | | | |||
| SHOULD NOT send datagrams that exceed the PMTU, i.e., | 3.2 | | | SHOULD NOT send datagrams that exceed the PMTU, i.e., | 3.2 | | |||
| SHOULD discover PMTU or send datagrams < minimum PMTU | | | | SHOULD discover PMTU or send datagrams < minimum PMTU | | | |||
| | | | | | | | |||
| SHOULD handle datagram loss, duplication, reordering | 3.3 | | | SHOULD handle datagram loss, duplication, reordering | 3.3 | | |||
| SHOULD be robust to delivery delays up to 2 minutes | | | | SHOULD be robust to delivery delays up to 2 minutes | | | |||
| | | | | | | | |||
| SHOULD enable UDP checksum | 3.4 | | | SHOULD enable IPv4 UDP checksum | 3.4 | | |||
| MUST enable IPv6 UDP checksum | | | ||||
| else, MAY use UDP-Lite with suitable checksum coverage | 3.4.1 | | | else, MAY use UDP-Lite with suitable checksum coverage | 3.4.1 | | |||
| | | | | | | | |||
| SHOULD NOT always send middlebox keep-alives | 3.5 | | | 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) | | | |||
| | | | | | | | |||
| MUST check IP source address | 3.6 | | | MUST check IP source address | 3.6 | | |||
| and, for client/server applications | | | | and, for client/server applications | | | |||
| SHOULD send responses from src address matching request | | | | SHOULD send responses from src address matching request | | | |||
| | | | | | | | |||
| SHOULD use standard IETF security protocols when needed | 4 | | | SHOULD use standard IETF security protocols when needed | 4 | | |||
+---------------------------------------------------------+---------+ | +---------------------------------------------------------+---------+ | |||
Table 1: Summary of recommendations. | Table 1: Summary of recommendations | |||
6. IANA Considerations | ||||
This document raises no IANA considerations. | ||||
(Note to the RFC Editor: Please remove this section upon | ||||
publication.) | ||||
7. Acknowledgments | 6. Acknowledgments | |||
Thanks to Paul Aitken, Mark Allman, Francois Audet, Iljitsch van | Thanks to Paul Aitken, Mark Allman, Francois Audet, Iljitsch van | |||
Beijnum, Stewart Bryant, Remi Denis-Courmont, Lisa Dusseault, Wesley | Beijnum, Stewart Bryant, Remi Denis-Courmont, Lisa Dusseault, Wesley | |||
Eddy, Pasi Eronen, Sally Floyd, Robert Hancock, Jeffrey Hutzelman, | Eddy, Pasi Eronen, Sally Floyd, Robert Hancock, Jeffrey Hutzelman, | |||
Cullen Jennings, Tero Kivinen, Peter Koch, Jukka Manner, Philip | Cullen Jennings, Tero Kivinen, Peter Koch, Jukka Manner, Philip | |||
Matthews, Joerg Ott, Colin Perkins, Tom Petch, Carlos Pignataro, Pasi | Matthews, Joerg Ott, Colin Perkins, Tom Petch, Carlos Pignataro, Pasi | |||
Sarolahti, Pascal Thubert, Joe Touch, Dave Ward and Magnus Westerlund | Sarolahti, Pascal Thubert, Joe Touch, Dave Ward, and Magnus | |||
for their comments on this document. | 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 [BEHAVE-APP] by Bryan Ford, Pyda Srisuresh, and Dan | |||
and Dan Kegel. | Kegel. | |||
Lars Eggert is partly funded by [TRILOGY], a research project | Lars Eggert is partly funded by [TRILOGY], a research project | |||
supported by the European Commission under its Seventh Framework | supported by the European Commission under its Seventh Framework | |||
Program. | Program. Gorry Fairhurst was partly funded by the EC SatNEx project. | |||
8. References | 7. References | |||
8.1. Normative References | 7.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. | |||
[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. | |||
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", | |||
November 1990. | RFC 1191, November 1990. | |||
[RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery | [RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU | |||
for IP version 6", RFC 1981, August 1996. | Discovery 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 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version | |||
(IPv6) Specification", RFC 2460, December 1998. | 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. | |||
[RFC2988] Paxson, V. and M. Allman, "Computing TCP's Retransmission | [RFC2988] Paxson, V. and M. Allman, "Computing TCP's | |||
Timer", RFC 2988, November 2000. | Retransmission Timer", RFC 2988, November 2000. | |||
[RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., and | [RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., | |||
G. Fairhurst, "The Lightweight User Datagram Protocol | and G. Fairhurst, "The Lightweight User Datagram | |||
(UDP-Lite)", RFC 3828, July 2004. | Protocol (UDP-Lite)", RFC 3828, July 2004. | |||
[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", | |||
RFC 4787, January 2007. | BCP 127, RFC 4787, January 2007. | |||
[RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path | |||
Discovery", RFC 4821, March 2007. | MTU Discovery", RFC 4821, March 2007. | |||
[RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP | [RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP | |||
Friendly Rate Control (TFRC): Protocol Specification", | Friendly Rate Control (TFRC): Protocol Specification", | |||
RFC 5348, September 2008. | RFC 5348, September 2008. | |||
8.2. Informative References | 7.2. Informative References | |||
[FABER] Faber, T., Touch, J., and W. Yue, "The TIME-WAIT State in | [BEHAVE-APP] Ford, B., "Application Design Guidelines for Traversal | |||
TCP and Its Effect on Busy Servers", Proc. IEEE Infocom, | through Network Address Translators", Work in Progress, | |||
March 1999. | March 2007. | |||
[I-D.ford-behave-app] | [CCID4] Floyd, S. and E. Kohler, "Profile for Datagram | |||
Ford, B., "Application Design Guidelines for Traversal | Congestion Control Protocol (DCCP) Congestion ID 4: | |||
through Network Address Translators", | TCP-Friendly Rate Control for Small Packets (TFRC-SP)", | |||
draft-ford-behave-app-05 (work in progress), March 2007. | Work in Progress, February 2008. | |||
[I-D.ietf-dccp-ccid4] | [FABER] Faber, T., Touch, J., and W. Yue, "The TIME-WAIT State | |||
Floyd, S. and E. Kohler, "Profile for Datagram Congestion | in TCP and Its Effect on Busy Servers", Proc. IEEE | |||
Control Protocol (DCCP) Congestion ID 4: TCP-Friendly | Infocom, March 1999. | |||
Rate Control for Small Packets (TFRC-SP)", | ||||
draft-ietf-dccp-ccid4-02 (work in progress), | ||||
February 2008. | ||||
[I-D.ietf-mmusic-ice] | [GIST] Schulzrinne, H. and R. Hancock, "GIST: General Internet | |||
Rosenberg, J., "Interactive Connectivity Establishment | Signalling Transport", Work in Progress, July 2008. | |||
(ICE): A Protocol for Network Address Translator (NAT) | ||||
Traversal for Offer/Answer Protocols", | ||||
draft-ietf-mmusic-ice-19 (work in progress), October 2007. | ||||
[I-D.ietf-nsis-nslp-natfw] | [ICE] Rosenberg, J., "Interactive Connectivity Establishment | |||
Stiemerling, M., Tschofenig, H., Aoun, C., and E. Davies, | (ICE): A Protocol for Network Address Translator (NAT) | |||
"NAT/Firewall NSIS Signaling Layer Protocol (NSLP)", | Traversal for Offer/Answer Protocols", Work | |||
draft-ietf-nsis-nslp-natfw-19 (work in progress), | in Progress, October 2007. | |||
September 2008. | ||||
[I-D.ietf-nsis-ntlp] | [NSLP] Stiemerling, M., Tschofenig, H., Aoun, C., and E. | |||
Schulzrinne, H. and R. Hancock, "GIST: General Internet | Davies, "NAT/Firewall NSIS Signaling Layer Protocol | |||
Signalling Transport", draft-ietf-nsis-ntlp-16 (work in | (NSLP)", Work in Progress, September 2008. | |||
progress), July 2008. | ||||
[POSIX] IEEE Std. 1003.1-2001, "Standard for Information | [POSIX] IEEE Std. 1003.1-2001, "Standard for Information | |||
Technology - Portable Operating System Interface (POSIX)", | Technology - Portable Operating System Interface | |||
Open Group Technical Standard: Base Specifications Issue | (POSIX)", Open Group Technical Standard: Base | |||
6, ISO/IEC 9945:2002, December 2001. | 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 | |||
RFC 896, January 1984. | internetworks", RFC 896, January 1984. | |||
[RFC0919] Mogul, J., "Broadcasting Internet Datagrams", STD 5, | [RFC0919] Mogul, J., "Broadcasting Internet Datagrams", STD 5, | |||
RFC 919, October 1984. | RFC 919, October 1984. | |||
[RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, | [RFC1112] Deering, S., "Host extensions for IP multicasting", | |||
RFC 1112, August 1989. | STD 5, RFC 1112, August 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. | |||
[RFC1546] Partridge, C., Mendez, T., and W. Milliken, "Host | [RFC1546] Partridge, C., Mendez, T., and W. Milliken, "Host | |||
Anycasting Service", RFC 1546, November 1993. | Anycasting Service", RFC 1546, November 1993. | |||
[RFC2309] Braden, B., Clark, D., Crowcroft, J., Davie, B., Deering, | [RFC2309] Braden, B., Clark, D., Crowcroft, J., Davie, B., | |||
S., Estrin, D., Floyd, S., Jacobson, V., Minshall, G., | Deering, S., Estrin, D., Floyd, S., Jacobson, V., | |||
Partridge, C., Peterson, L., Ramakrishnan, K., Shenker, | Minshall, G., Partridge, C., Peterson, L., | |||
S., Wroclawski, J., and L. Zhang, "Recommendations on | Ramakrishnan, K., Shenker, S., Wroclawski, J., and L. | |||
Queue Management and Congestion Avoidance in the | Zhang, "Recommendations on Queue Management and | |||
Internet", RFC 2309, April 1998. | Congestion Avoidance in the Internet", RFC 2309, | |||
April 1998. | ||||
[RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., | [RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, | |||
and W. Weiss, "An Architecture for Differentiated | Z., and W. Weiss, "An Architecture for Differentiated | |||
Services", RFC 2475, December 1998. | Services", RFC 2475, December 1998. | |||
[RFC2675] Borman, D., Deering, S., and R. Hinden, "IPv6 Jumbograms", | [RFC2675] Borman, D., Deering, S., and R. Hinden, "IPv6 | |||
RFC 2675, August 1999. | Jumbograms", RFC 2675, August 1999. | |||
[RFC2743] Linn, J., "Generic Security Service Application Program | [RFC2743] Linn, J., "Generic Security Service Application Program | |||
Interface Version 2, Update 1", RFC 2743, January 2000. | Interface Version 2, Update 1", RFC 2743, January 2000. | |||
[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 | |||
RFC 3124, June 2001. | Manager", RFC 3124, June 2001. | |||
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., | |||
A., Peterson, J., Sparks, R., Handley, M., and E. | Johnston, A., Peterson, J., Sparks, R., Handley, M., | |||
Schooler, "SIP: Session Initiation Protocol", RFC 3261, | and E. Schooler, "SIP: Session Initiation Protocol", | |||
June 2002. | RFC 3261, June 2002. | |||
[RFC3303] Srisuresh, P., Kuthan, J., Rosenberg, J., Molitor, A., and | [RFC3303] Srisuresh, P., Kuthan, J., Rosenberg, J., Molitor, A., | |||
A. Rayhan, "Middlebox communication architecture and | and A. Rayhan, "Middlebox communication architecture | |||
framework", RFC 3303, August 2002. | and framework", RFC 3303, August 2002. | |||
[RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. | [RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and | |||
Stevens, "Basic Socket Interface Extensions for IPv6", | W. Stevens, "Basic Socket Interface Extensions for | |||
RFC 3493, February 2003. | IPv6", RFC 3493, February 2003. | |||
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. | [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. | |||
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 | |||
Video Conferences with Minimal Control", STD 65, RFC 3551, | and Video Conferences with Minimal Control", STD 65, | |||
July 2003. | RFC 3551, July 2003. | |||
[RFC3682] Gill, V., Heasley, J., and D. Meyer, "The Generalized TTL | ||||
Security Mechanism (GTSM)", RFC 3682, February 2004. | ||||
[RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. | [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and | |||
Norrman, "The Secure Real-time Transport Protocol (SRTP)", | K. Norrman, "The Secure Real-time Transport Protocol | |||
RFC 3711, March 2004. | (SRTP)", RFC 3711, March 2004. | |||
[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. | |||
[RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. | [RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. | |||
Conrad, "Stream Control Transmission Protocol (SCTP) | Conrad, "Stream Control Transmission Protocol (SCTP) | |||
Partial Reliability Extension", RFC 3758, May 2004. | Partial Reliability Extension", RFC 3758, May 2004. | |||
[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 | |||
Wood, "Advice for Internet Subnetwork Designers", BCP 89, | L. Wood, "Advice for Internet Subnetwork Designers", | |||
RFC 3819, July 2004. | 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. | |||
[RFC3852] Housley, R., "Cryptographic Message Syntax (CMS)", | [RFC3852] Housley, R., "Cryptographic Message Syntax (CMS)", | |||
RFC 3852, July 2004. | RFC 3852, July 2004. | |||
[RFC4301] Kent, S. and K. Seo, "Security Architecture for the | [RFC4301] Kent, S. and K. Seo, "Security Architecture for the | |||
Internet Protocol", RFC 4301, December 2005. | Internet Protocol", RFC 4301, December 2005. | |||
skipping to change at page 26, line 18 | skipping to change at page 26, line 9 | |||
[RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | |||
December 2005. | December 2005. | |||
[RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | |||
RFC 4303, December 2005. | RFC 4303, December 2005. | |||
[RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", | [RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", | |||
RFC 4306, December 2005. | 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. | ||||
[RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram Congestion | [RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram | |||
Control Protocol (DCCP) Congestion Control ID 2: TCP-like | Congestion Control Protocol (DCCP) Congestion Control | |||
Congestion Control", RFC 4341, March 2006. | ID 2: TCP-like 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)", | |||
March 2006. | RFC 4342, March 2006. | |||
[RFC4347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | [RFC4347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | |||
Security", RFC 4347, April 2006. | Security", RFC 4347, April 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. | |||
[RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R. | [RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and | |||
Thayer, "OpenPGP Message Format", RFC 4880, November 2007. | R. Thayer, "OpenPGP Message Format", RFC 4880, | |||
November 2007. | ||||
[RFC4960] Stewart, R., "Stream Control Transmission Protocol", | [RFC4960] Stewart, R., "Stream Control Transmission Protocol", | |||
RFC 4960, September 2007. | RFC 4960, September 2007. | |||
[RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4 Reassembly | [RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4 | |||
Errors at High Data Rates", RFC 4963, July 2007. | Reassembly 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. | |||
[RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., and C. | ||||
Pignataro, "The Generalized TTL Security Mechanism | ||||
(GTSM)", RFC 5082, October 2007. | ||||
[STEVENS] Stevens, W., Fenner, B., and A. Rudoff, "UNIX Network | [STEVENS] Stevens, W., Fenner, B., and A. Rudoff, "UNIX Network | |||
Programming, The sockets Networking API", Addison-Wesley, | Programming, The sockets Networking API", Addison- | |||
2004. | Wesley, 2004. | |||
[TRILOGY] "Trilogy Project", http://www.trilogy-project.org/. | [TRILOGY] "Trilogy Project", <http://www.trilogy-project.org>. | |||
[UPNP] UPnP Forum, "Internet Gateway Device (IGD) Standardized | [UPnP] UPnP Forum, "Internet Gateway Device (IGD) Standardized | |||
Device Control Protocol V 1.0", November 2001. | 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 | |||
URI: http://people.nokia.net/~lars/ | URI: http://people.nokia.net/~lars/ | |||
Godred Fairhurst | Godred Fairhurst | |||
University of Aberdeen | University of Aberdeen | |||
Department of Engineering | Department of Engineering | |||
Fraser Noble Building | Fraser Noble Building | |||
Aberdeen AB24 3UE | Aberdeen AB24 3UE | |||
Scotland | Scotland | |||
Email: gorry@erg.abdn.ac.uk | EMail: gorry@erg.abdn.ac.uk | |||
URI: http://www.erg.abdn.ac.uk/ | URI: http://www.erg.abdn.ac.uk/ | |||
Full Copyright Statement | ||||
Copyright (C) The IETF Trust (2008). | ||||
This document is subject to the rights, licenses and restrictions | ||||
contained in BCP 78, and except as set forth therein, the authors | ||||
retain all their rights. | ||||
This document and the information contained herein are provided on an | ||||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | ||||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | ||||
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | ||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | ||||
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | ||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
Intellectual Property | ||||
The IETF takes no position regarding the validity or scope of any | ||||
Intellectual Property Rights or other rights that might be claimed to | ||||
pertain to the implementation or use of the technology described in | ||||
this document or the extent to which any license under such rights | ||||
might or might not be available; nor does it represent that it has | ||||
made any independent effort to identify any such rights. Information | ||||
on the procedures with respect to rights in RFC documents can be | ||||
found in BCP 78 and BCP 79. | ||||
Copies of IPR disclosures made to the IETF Secretariat and any | ||||
assurances of licenses to be made available, or the result of an | ||||
attempt made to obtain a general license or permission for the use of | ||||
such proprietary rights by implementers or users of this | ||||
specification can be obtained from the IETF on-line IPR repository at | ||||
http://www.ietf.org/ipr. | ||||
The IETF invites any interested party to bring to its attention any | ||||
copyrights, patents or patent applications, or other proprietary | ||||
rights that may cover technology that may be required to implement | ||||
this standard. Please address the information to the IETF at | ||||
ietf-ipr@ietf.org. | ||||
End of changes. 116 change blocks. | ||||
297 lines changed or deleted | 288 lines changed or added | |||
This html diff was produced by rfcdiff 1.35. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |