Network Working Group                                          L. Eggert
Request for Comments: 5405                                         Nokia
BCP: 145                                                    G. Fairhurst
Category: Best Current Practice                   University of Aberdeen
                                                           November 2008
        
Network Working Group                                          L. Eggert
Request for Comments: 5405                                         Nokia
BCP: 145                                                    G. Fairhurst
Category: Best Current Practice                   University of Aberdeen
                                                           November 2008
        

Unicast UDP Usage Guidelines for Application Designers

应用程序设计人员的单播UDP使用指南

Status of This Memo

关于下段备忘

This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements. Distribution of this memo is unlimited.

本文件规定了互联网社区的最佳现行做法,并要求进行讨论和提出改进建议。本备忘录的分发不受限制。

Copyright Notice

版权公告

Copyright (c) 2008 IETF Trust and the persons identified as the document authors. All rights reserved.

版权所有(c)2008 IETF信托基金和确定为文件作者的人员。版权所有。

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.

本文件受BCP 78和IETF信托有关IETF文件的法律规定的约束(http://trustee.ietf.org/ 许可证信息)在本文件发布之日生效。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。

Abstract

摘要

The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms. Because congestion control is critical to the stable operation of the Internet, applications and upper-layer protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic. This document provides guidelines on the use of UDP for the designers of unicast applications and upper-layer protocols. Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, and middlebox traversal.

用户数据报协议(UDP)提供最小的消息传递传输,没有固有的拥塞控制机制。由于拥塞控制对Internet的稳定运行至关重要,因此选择使用UDP作为Internet传输的应用程序和上层协议必须采用各种机制来防止拥塞崩溃,并对并发流量建立一定程度的公平性。本文档为单播应用程序和上层协议的设计者提供UDP使用指南。拥塞控制指南是一个主要关注点,但该文档还提供了其他主题的指南,包括消息大小、可靠性、校验和以及中间盒遍历。

Table of Contents

目录

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  5
   3.  UDP Usage Guidelines . . . . . . . . . . . . . . . . . . . . .  5
     3.1.  Congestion Control Guidelines  . . . . . . . . . . . . . .  6
     3.2.  Message Size Guidelines  . . . . . . . . . . . . . . . . . 11
     3.3.  Reliability Guidelines . . . . . . . . . . . . . . . . . . 12
     3.4.  Checksum Guidelines  . . . . . . . . . . . . . . . . . . . 13
     3.5.  Middlebox Traversal Guidelines . . . . . . . . . . . . . . 15
     3.6.  Programming Guidelines . . . . . . . . . . . . . . . . . . 17
     3.7.  ICMP Guidelines  . . . . . . . . . . . . . . . . . . . . . 18
   4.  Security Considerations  . . . . . . . . . . . . . . . . . . . 19
   5.  Summary  . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
   6.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 22
   7.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 22
     7.1.  Normative References . . . . . . . . . . . . . . . . . . . 22
     7.2.  Informative References . . . . . . . . . . . . . . . . . . 23
        
   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  5
   3.  UDP Usage Guidelines . . . . . . . . . . . . . . . . . . . . .  5
     3.1.  Congestion Control Guidelines  . . . . . . . . . . . . . .  6
     3.2.  Message Size Guidelines  . . . . . . . . . . . . . . . . . 11
     3.3.  Reliability Guidelines . . . . . . . . . . . . . . . . . . 12
     3.4.  Checksum Guidelines  . . . . . . . . . . . . . . . . . . . 13
     3.5.  Middlebox Traversal Guidelines . . . . . . . . . . . . . . 15
     3.6.  Programming Guidelines . . . . . . . . . . . . . . . . . . 17
     3.7.  ICMP Guidelines  . . . . . . . . . . . . . . . . . . . . . 18
   4.  Security Considerations  . . . . . . . . . . . . . . . . . . . 19
   5.  Summary  . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
   6.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 22
   7.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 22
     7.1.  Normative References . . . . . . . . . . . . . . . . . . . 22
     7.2.  Informative References . . . . . . . . . . . . . . . . . . 23
        
1. Introduction
1. 介绍

The User Datagram Protocol (UDP) [RFC0768] provides a minimal, unreliable, best-effort, message-passing transport to applications and upper-layer protocols (both simply called "applications" in the remainder of this document). Compared to other transport protocols, UDP and its UDP-Lite variant [RFC3828] are unique in that they do not establish end-to-end connections between communicating end systems. UDP communication consequently does not incur connection establishment and teardown overheads, and there is minimal associated end system state. Because of these characteristics, UDP can offer a very efficient communication transport to some applications.

用户数据报协议(UDP)[RFC0768]向应用程序和上层协议(在本文档的其余部分中均简称为“应用程序”)提供最小、不可靠、尽最大努力的消息传递传输。与其他传输协议相比,UDP及其UDP Lite变体[RFC3828]的独特之处在于它们不在通信端系统之间建立端到端连接。因此,UDP通信不会产生连接建立和拆卸开销,并且关联的终端系统状态最小。由于这些特性,UDP可以为某些应用程序提供非常高效的通信传输。

A second unique characteristic of UDP is that it provides no inherent congestion control mechanisms. On many platforms, applications can send UDP datagrams at the line rate of the link interface, which is often much greater than the available path capacity, and doing so contributes to congestion along the path. [RFC2914] describes the best current practice for congestion control in the Internet. It identifies two major reasons why congestion control mechanisms are critical for the stable operation of the Internet:

UDP的第二个独特特性是它不提供固有的拥塞控制机制。在许多平台上,应用程序可以以链路接口的线路速率发送UDP数据报,该速率通常远大于可用路径容量,这样做会导致路径上的拥塞。[RFC2914]介绍了当前互联网拥塞控制的最佳实践。它指出了拥塞控制机制对互联网稳定运行至关重要的两个主要原因:

1. The prevention of congestion collapse, i.e., a state where an increase in network load results in a decrease in useful work done by the network.

1. 防止拥塞崩溃,即网络负载增加导致网络所做有用功减少的状态。

2. The establishment of a degree of fairness, i.e., allowing multiple flows to share the capacity of a path reasonably equitably.

2. 建立一定程度的公平性,即允许多个流合理公平地共享路径的容量。

Because UDP itself provides no congestion control mechanisms, it is up to the applications that use UDP for Internet communication to employ suitable mechanisms to prevent congestion collapse and establish a degree of fairness. [RFC2309] discusses the dangers of congestion-unresponsive flows and states that "all UDP-based streaming applications should incorporate effective congestion avoidance mechanisms". This is an important requirement, even for applications that do not use UDP for streaming. In addition, congestion-controlled transmission is of benefit to an application itself, because it can reduce self-induced packet loss, minimize retransmissions, and hence reduce delays. Congestion control is essential even at relatively slow transmission rates. For example, an application that generates five 1500-byte UDP datagrams in one second can already exceed the capacity of a 56 Kb/s path. For applications that can operate at higher, potentially unbounded data rates, congestion control becomes vital to prevent congestion collapse and establish some degree of fairness. Section 3 describes a number of simple guidelines for the designers of such applications.

由于UDP本身不提供拥塞控制机制,因此使用UDP进行Internet通信的应用程序需要采用合适的机制来防止拥塞崩溃并建立一定程度的公平性。[RFC2309]讨论了拥塞无响应流的危险,并指出“所有基于UDP的流应用程序都应包含有效的拥塞避免机制”。这是一个重要的要求,即使对于不使用UDP进行流传输的应用程序也是如此。此外,拥塞控制传输对应用程序本身有利,因为它可以减少自诱导的数据包丢失,最小化重传,从而减少延迟。即使在传输速率相对较慢的情况下,拥塞控制也是必不可少的。例如,在一秒钟内生成五个1500字节UDP数据报的应用程序可能已经超过56 Kb/s路径的容量。对于能够以更高的、可能无限的数据速率运行的应用程序,拥塞控制对于防止拥塞崩溃和建立某种程度的公平性至关重要。第3节为此类应用程序的设计者介绍了一些简单的指南。

A UDP datagram is carried in a single IP packet and is hence limited to a maximum payload of 65,507 bytes for IPv4 and 65,527 bytes for IPv6. The transmission of large IP packets usually requires IP fragmentation. Fragmentation decreases communication reliability and efficiency and should be avoided. IPv6 allows the option of transmitting large packets ("jumbograms") without fragmentation when all link layers along the path support this [RFC2675]. Some of the guidelines in Section 3 describe how applications should determine appropriate message sizes. Other sections of this document provide guidance on reliability, checksums, and middlebox traversal.

UDP数据报在单个IP数据包中承载,因此IPv4的最大有效负载限制为65507字节,IPv6的最大有效负载限制为65527字节。大型IP数据包的传输通常需要IP分段。碎片会降低通信的可靠性和效率,应该避免。当路径上的所有链路层都支持此选项时,IPv6允许无碎片地传输大数据包(“巨型程序”)[RFC2675]。第3节中的一些指南描述了应用程序应该如何确定适当的消息大小。本文档的其他部分提供了有关可靠性、校验和和中间盒遍历的指导。

This document provides guidelines and recommendations. Although most unicast UDP applications are expected to follow these guidelines, there do exist valid reasons why a specific application may decide not to follow a given guideline. In such cases, it is RECOMMENDED that the application designers document the rationale for their design choice in the technical specification of their application or protocol.

本文件提供了指导方针和建议。尽管大多数单播UDP应用程序都应该遵循这些准则,但确实存在一些合理的理由说明特定应用程序可能决定不遵循给定的准则。在这种情况下,建议应用程序设计者在其应用程序或协议的技术规范中记录其设计选择的理由。

This document provides guidelines to designers of applications that use UDP for unicast transmission, which is the most common case. Specialized classes of applications use UDP for IP multicast [RFC1112], broadcast [RFC0919], or anycast [RFC1546] transmissions. The design of such specialized applications requires expertise that goes beyond the simple, unicast-specific guidelines given in this document. Multicast and broadcast senders may transmit to multiple receivers across potentially very heterogeneous paths at the same time, which significantly complicates congestion control, flow control, and reliability mechanisms. The IETF has defined a reliable multicast framework [RFC3048] and several building blocks to aid the designers of multicast applications, such as [RFC3738] or [RFC4654]. Anycast senders must be aware that successive messages sent to the same anycast IP address may be delivered to different anycast nodes, i.e., arrive at different locations in the topology. It is not intended that the guidelines in this document apply to multicast, broadcast, or anycast applications that use UDP.

本文档为使用UDP进行单播传输(这是最常见的情况)的应用程序的设计者提供指导。专用类应用程序使用UDP进行IP多播[RFC1112]、广播[RFC0919]或选播[RFC1546]传输。此类专门应用程序的设计需要超出本文档中给出的简单、单播特定指南的专业知识。多播和广播发送方可能同时跨潜在的非常异构的路径向多个接收方发送数据,这使得拥塞控制、流量控制和可靠性机制变得非常复杂。IETF定义了一个可靠的多播框架[RFC3048]和几个构建块,以帮助多播应用程序的设计者,如[RFC3738]或[RFC4654]。选播发送方必须知道,发送到同一选播IP地址的连续消息可能会发送到不同的选播节点,即到达拓扑中的不同位置。本文档中的指南并不适用于使用UDP的多播、广播或选播应用程序。

Finally, although this document specifically refers to unicast applications that use UDP, the spirit of some of its guidelines also applies to other message-passing applications and protocols (specifically on the topics of congestion control, message sizes, and reliability). Examples include signaling or control applications that choose to run directly over IP by registering their own IP protocol number with IANA. This document may provide useful background reading to the designers of such applications and protocols.

最后,尽管本文档特别提到使用UDP的单播应用程序,但其一些指导原则的精神也适用于其他消息传递应用程序和协议(特别是关于拥塞控制、消息大小和可靠性的主题)。示例包括选择通过向IANA注册自己的IP协议号直接在IP上运行的信令或控制应用程序。本文件可为此类应用程序和协议的设计者提供有用的背景资料。

2. Terminology
2. 术语

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14, RFC 2119 [RFC2119].

本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“应”、“不应”、“建议”、“可”和“可选”应按照BCP 14、RFC 2119[RFC2119]中的说明进行解释。

3. UDP Usage Guidelines
3. UDP使用指南

Internet paths can have widely varying characteristics, including transmission delays, available bandwidths, congestion levels, reordering probabilities, supported message sizes, or loss rates. Furthermore, the same Internet path can have very different conditions over time. Consequently, applications that may be used on the Internet MUST NOT make assumptions about specific path characteristics. They MUST instead use mechanisms that let them operate safely under very different path conditions. Typically, this requires conservatively probing the current conditions of the Internet path they communicate over to establish a transmission behavior that it can sustain and that is reasonably fair to other traffic sharing the path.

Internet路径可以具有各种各样的特性,包括传输延迟、可用带宽、拥塞级别、重新排序概率、支持的消息大小或丢失率。此外,随着时间的推移,相同的互联网路径可能具有非常不同的条件。因此,可在互联网上使用的应用程序不得对特定路径特征进行假设。相反,它们必须使用能够在完全不同的路径条件下安全运行的机制。通常,这需要保守地探测他们通信的互联网路径的当前状况,以建立一种传输行为,该行为可以维持,并且对共享该路径的其他通信量合理公平。

These mechanisms are difficult to implement correctly. For most applications, the use of one of the existing IETF transport protocols is the simplest method of acquiring the required mechanisms. Consequently, the RECOMMENDED alternative to the UDP usage described in the remainder of this section is the use of an IETF transport protocol such as TCP [RFC0793], Stream Control Transmission Protocol (SCTP) [RFC4960], and SCTP Partial Reliability Extension (SCTP-PR) [RFC3758], or Datagram Congestion Control Protocol (DCCP) [RFC4340] with its different congestion control types [RFC4341][RFC4342][CCID4].

这些机制很难正确实施。对于大多数应用,使用现有的IETF传输协议之一是获取所需机制的最简单方法。因此,本节剩余部分所述UDP使用的推荐替代方案是使用IETF传输协议,如TCP[RFC0793]、流控制传输协议(SCTP)[RFC4960]和SCTP部分可靠性扩展(SCTP-PR)[RFC3758]或数据报拥塞控制协议(DCCP)[RFC4340]具有不同的拥塞控制类型[RFC4341][RFC4342][CCID4]。

If used correctly, these more fully-featured transport protocols are not as "heavyweight" as often claimed. For example, the TCP algorithms have been continuously improved over decades, and have reached a level of efficiency and correctness that custom application-layer mechanisms will struggle to easily duplicate. In addition, many TCP implementations allow connections to be tuned by an application to its purposes. For example, TCP's "Nagle" algorithm [RFC0896] can be disabled, improving communication latency at the expense of more frequent -- but still congestion-controlled -- packet transmissions. Another example is the TCP SYN cookie mechanism [RFC4987], which is available on many platforms. TCP with SYN cookies does not require a server to maintain per-connection state until the connection is established. TCP also requires the end that closes a connection to maintain the TIME-WAIT state that prevents delayed segments from one connection instance from interfering with a

如果正确使用,这些功能更全面的传输协议就不会像通常所说的那样“重量级”。例如,TCP算法经过几十年的不断改进,已经达到了定制应用层机制难以复制的效率和正确性水平。此外,许多TCP实现允许应用程序根据其目的调整连接。例如,TCP的“Nagle”算法[RFC0896]可以被禁用,从而以更频繁但仍能控制拥塞的数据包传输为代价来改善通信延迟。另一个例子是TCP SYN cookie机制[RFC4987],它在许多平台上都可用。在建立连接之前,带有SYN cookies的TCP不需要服务器维护每个连接的状态。TCP还需要关闭连接的端来保持TIME-WAIT状态,以防止来自一个连接实例的延迟段干扰连接

later one. Applications that are aware of and designed for this behavior can shift maintenance of the TIME-WAIT state to conserve resources by controlling which end closes a TCP connection [FABER]. Finally, TCP's built-in capacity-probing and awareness of the maximum transmission unit supported by the path (PMTU) results in efficient data transmission that quickly compensates for the initial connection setup delay, in the case of transfers that exchange more than a few segments.

晚一点。知道并设计用于此行为的应用程序可以通过控制哪一端关闭TCP连接来改变等待时间状态的维护以节省资源[FABER]。最后,TCP内置的容量探测和对路径(PMTU)支持的最大传输单元的感知可以实现高效的数据传输,在交换超过几个段的传输的情况下,可以快速补偿初始连接设置延迟。

3.1. Congestion Control Guidelines
3.1. 交通挤塞管制指引

If an application or upper-layer protocol chooses not to use a congestion-controlled transport protocol, it SHOULD control the rate at which it sends UDP datagrams to a destination host, in order to fulfill the requirements of [RFC2914]. It is important to stress that an application SHOULD perform congestion control over all UDP traffic it sends to a destination, independently from how it generates this traffic. For example, an application that forks multiple worker processes or otherwise uses multiple sockets to generate UDP datagrams SHOULD perform congestion control over the aggregate traffic.

如果应用程序或上层协议选择不使用拥塞控制传输协议,则应控制向目标主机发送UDP数据报的速率,以满足[RFC2914]的要求。需要强调的是,应用程序应该对发送到目的地的所有UDP流量执行拥塞控制,这与它如何生成该流量无关。例如,分叉多个工作进程或使用多个套接字生成UDP数据报的应用程序应该对聚合流量执行拥塞控制。

Several approaches to perform congestion control are discussed in the remainder of this section. Not all approaches discussed below are appropriate for all UDP-transmitting applications. Section 3.1.1 discusses congestion control options for applications that perform bulk transfers over UDP. Such applications can employ schemes that sample the path over several subsequent RTTs during which data is exchanged, in order to determine a sending rate that the path at its current load can support. Other applications only exchange a few UDP datagrams with a destination. Section 3.1.2 discusses congestion control options for such "low data-volume" applications. Because they typically do not transmit enough data to iteratively sample the path to determine a safe sending rate, they need to employ different kinds of congestion control mechanisms. Section 3.1.3 discusses congestion control considerations when UDP is used as a tunneling protocol.

本节剩余部分将讨论几种执行拥塞控制的方法。并非下面讨论的所有方法都适用于所有UDP传输应用程序。第3.1.1节讨论了通过UDP执行批量传输的应用程序的拥塞控制选项。此类应用程序可以采用在数据交换期间对多个后续rtt上的路径进行采样的方案,以便确定路径在其当前负载下可以支持的发送速率。其他应用程序仅与目标交换少量UDP数据报。第3.1.2节讨论了此类“低数据量”应用的拥塞控制选项。由于它们通常不传输足够的数据来迭代地对路径进行采样以确定安全发送速率,因此它们需要采用不同类型的拥塞控制机制。第3.1.3节讨论了UDP用作隧道协议时的拥塞控制注意事项。

It is important to note that congestion control should not be viewed as an add-on to a finished application. Many of the mechanisms discussed in the guidelines below require application support to operate correctly. Application designers need to consider congestion control throughout the design of their application, similar to how they consider security aspects throughout the design process.

需要注意的是,不应将拥塞控制视为已完成应用程序的附加组件。以下指南中讨论的许多机制需要应用程序支持才能正确运行。应用设计者需要考虑在他们的应用程序设计中的拥塞控制,类似于他们如何在整个设计过程中考虑安全方面。

In the past, the IETF has also investigated integrated congestion control mechanisms that act on the traffic aggregate between two hosts, i.e., a framework such as the Congestion Manager [RFC3124],

在过去,IETF还研究了作用于两台主机之间的流量聚合的集成拥塞控制机制,即诸如拥塞管理器[RFC3124]之类的框架,

where active sessions may share current congestion information in a way that is independent of the transport protocol. Such mechanisms have currently failed to see deployment, but would otherwise simplify the design of congestion control mechanisms for UDP sessions, so that they fulfill the requirements in [RFC2914].

其中,活动会话可以以独立于传输协议的方式共享当前拥塞信息。这种机制目前无法看到部署,但可以简化UDP会话拥塞控制机制的设计,从而满足[RFC2914]中的要求。

3.1.1. Bulk Transfer Applications
3.1.1. 批量传输应用

Applications that perform bulk transmission of data to a peer over UDP, i.e., applications that exchange more than a small number of UDP datagrams per RTT, SHOULD implement TCP-Friendly Rate Control (TFRC) [RFC5348], window-based, TCP-like congestion control, or otherwise ensure that the application complies with the congestion control principles.

通过UDP向对等方执行数据大容量传输的应用程序,即每个RTT交换多于少量UDP数据报的应用程序,应实施TCP友好速率控制(TFRC)[RFC5348],基于窗口的类似TCP的拥塞控制,或以其他方式确保应用程序符合拥塞控制原则。

TFRC has been designed to provide both congestion control and fairness in a way that is compatible with the IETF's other transport protocols. If an application implements TFRC, it need not follow the remaining guidelines in Section 3.1.1, because TFRC already addresses them, but SHOULD still follow the remaining guidelines in the subsequent subsections of Section 3.

TFRC旨在以与IETF的其他传输协议兼容的方式提供拥塞控制和公平性。如果应用程序实现了TFRC,则无需遵循第3.1.1节中的其余指南,因为TFRC已经解决了这些问题,但仍应遵循第3节后续小节中的其余指南。

Bulk transfer applications that choose not to implement TFRC or TCP-like windowing SHOULD implement a congestion control scheme that results in bandwidth use that competes fairly with TCP within an order of magnitude. Section 2 of [RFC3551] suggests that applications SHOULD monitor the packet loss rate to ensure that it is within acceptable parameters. Packet loss is considered acceptable if a TCP flow across the same network path under the same network conditions would achieve an average throughput, measured on a reasonable timescale, that is not less than that of the UDP flow. The comparison to TCP cannot be specified exactly, but is intended as an "order-of-magnitude" comparison in timescale and throughput.

选择不实施TFRC或类似TCP的窗口化的批量传输应用程序应实施拥塞控制方案,该方案将导致带宽使用在一个数量级内与TCP公平竞争。[RFC3551]第2节建议应用程序应监控数据包丢失率,以确保其在可接受的参数范围内。如果在相同的网络条件下,通过相同网络路径的TCP流在合理的时间尺度上达到不低于UDP流的平均吞吐量,则认为丢包是可接受的。无法精确指定与TCP的比较,但其目的是在时间尺度和吞吐量方面进行“数量级”比较。

Finally, some bulk transfer applications may choose not to implement any congestion control mechanism and instead rely on transmitting across reserved path capacity. This might be an acceptable choice for a subset of restricted networking environments, but is by no means a safe practice for operation in the Internet. When the UDP traffic of such applications leaks out on unprovisioned Internet paths, it can significantly degrade the performance of other traffic sharing the path and even result in congestion collapse. Applications that support an uncontrolled or unadaptive transmission behavior SHOULD NOT do so by default and SHOULD instead require users to explicitly enable this mode of operation.

最后,一些大容量传输应用程序可能选择不实施任何拥塞控制机制,而是依赖于跨保留路径容量传输。对于受限网络环境的子集来说,这可能是一个可接受的选择,但对于在Internet中操作而言,这绝不是一个安全的做法。当此类应用程序的UDP流量泄漏到未设置的Internet路径上时,它会显著降低共享该路径的其他流量的性能,甚至导致拥塞崩溃。默认情况下,支持非受控或非自适应传输行为的应用程序不应这样做,而应要求用户明确启用此操作模式。

3.1.2. Low Data-Volume Applications
3.1.2. 低数据量应用

When applications that at any time exchange only a small number of UDP datagrams with a destination implement TFRC or one of the other congestion control schemes in Section 3.1.1, the network sees little benefit, because those mechanisms perform congestion control in a way that is only effective for longer transmissions.

当在任何时候仅与目的地交换少量UDP数据报的应用程序实施TFRC或第3.1.1节中的其他拥塞控制方案时,网络几乎看不到任何好处,因为这些机制以仅对较长传输有效的方式执行拥塞控制。

Applications that at any time exchange only a small number of UDP datagrams with a destination SHOULD still control their transmission behavior by not sending on average more than one UDP datagram per round-trip time (RTT) to a destination. Similar to the recommendation in [RFC1536], an application SHOULD maintain an estimate of the RTT for any destination with which it communicates. Applications SHOULD implement the algorithm specified in [RFC2988] to compute a smoothed RTT (SRTT) estimate. They SHOULD also detect packet loss and exponentially back-off their retransmission timer when a loss event occurs. When implementing this scheme, applications need to choose a sensible initial value for the RTT. This value SHOULD generally be as conservative as possible for the given application. TCP uses an initial value of 3 seconds [RFC2988], which is also RECOMMENDED as an initial value for UDP applications. SIP [RFC3261] and GIST [GIST] use an initial value of 500 ms, and initial timeouts that are shorter than this are likely problematic in many cases. It is also important to note that the initial timeout is not the maximum possible timeout -- the RECOMMENDED algorithm in [RFC2988] yields timeout values after a series of losses that are much longer than the initial value.

在任何时候仅与目的地交换少量UDP数据报的应用程序仍应通过平均每个往返时间(RTT)不向目的地发送超过一个UDP数据报来控制其传输行为。与[RFC1536]中的建议类似,应用程序应维护与之通信的任何目的地的RTT估计值。应用程序应实现[RFC2988]中指定的算法,以计算平滑RTT(SRTT)估计。它们还应该检测数据包丢失,并在发生丢失事件时以指数方式退出重传计时器。在实现此方案时,应用程序需要为RTT选择一个合理的初始值。对于给定的应用,该值通常应尽可能保守。TCP使用3秒的初始值[RFC2988],这也是UDP应用程序的推荐初始值。SIP[RFC3261]和GIST[GIST]使用的初始值为500毫秒,短于此的初始超时在许多情况下可能存在问题。还需要注意的是,初始超时不是可能的最大超时,[RFC2988]中推荐的算法在一系列比初始值长得多的丢失之后产生超时值。

Some applications cannot maintain a reliable RTT estimate for a destination. The first case is that of applications that exchange too few UDP datagrams with a peer to establish a statistically accurate RTT estimate. Such applications MAY use a predetermined transmission interval that is exponentially backed-off when packets are lost. TCP uses an initial value of 3 seconds [RFC2988], which is also RECOMMENDED as an initial value for UDP applications. SIP [RFC3261] and GIST [GIST] use an interval of 500 ms, and shorter values are likely problematic in many cases. As in the previous case, note that the initial timeout is not the maximum possible timeout.

某些应用程序无法为目的地维护可靠的RTT估计。第一种情况是,应用程序与对等方交换的UDP数据报太少,无法建立统计上准确的RTT估计。这样的应用可以使用预定的传输间隔,该传输间隔在分组丢失时以指数方式退避。TCP使用3秒的初始值[RFC2988],这也是UDP应用程序的推荐初始值。SIP[RFC3261]和GIST[GIST]使用的间隔为500 ms,在许多情况下,较短的值可能存在问题。与前一种情况一样,请注意初始超时不是可能的最大超时。

A second class of applications cannot maintain an RTT estimate for a destination, because the destination does not send return traffic. Such applications SHOULD NOT send more than one UDP datagram every 3 seconds, and SHOULD use an even less aggressive rate when possible. The 3-second interval was chosen based on TCP's retransmission timeout when the RTT is unknown [RFC2988], and shorter values are likely problematic in many cases. Note that the sending rate in this

第二类应用程序无法维护目的地的RTT估计,因为目的地不发送返回流量。此类应用程序不应每3秒发送一个以上的UDP数据报,并且应尽可能使用更少的攻击速率。当RTT未知时,根据TCP的重传超时选择3秒间隔[RFC2988],短值在许多情况下可能有问题。请注意,此模式中的发送速率

case must be more conservative than in the two previous cases, because the lack of return traffic prevents the detection of packet loss, i.e., congestion events, and the application therefore cannot perform exponential back-off to reduce load.

这种情况必须比前两种情况更加保守,因为缺少返回流量会阻止检测数据包丢失,即拥塞事件,因此应用程序无法执行指数退避以减少负载。

Applications that communicate bidirectionally SHOULD employ congestion control for both directions of the communication. For example, for a client-server, request-response-style application, clients SHOULD congestion-control their request transmission to a server, and the server SHOULD congestion-control its responses to the clients. Congestion in the forward and reverse direction is uncorrelated, and an application SHOULD either independently detect and respond to congestion along both directions, or limit new and retransmitted requests based on acknowledged responses across the entire round-trip path.

双向通信的应用程序应该对通信的两个方向采用拥塞控制。例如,对于客户机-服务器、请求-响应类型的应用程序,客户机应该对其到服务器的请求传输进行拥塞控制,而服务器应该对其到客户机的响应进行拥塞控制。前向和反向的拥塞是不相关的,应用程序应该沿着两个方向独立地检测和响应拥塞,或者基于整个往返路径上已确认的响应来限制新的和重新传输的请求。

3.1.3. UDP Tunnels
3.1.3. UDP隧道

One increasingly popular use of UDP is as a tunneling protocol, where a tunnel endpoint encapsulates the packets of another protocol inside UDP datagrams and transmits them to another tunnel endpoint, which decapsulates the UDP datagrams and forwards the original packets contained in the payload. Tunnels establish virtual links that appear to directly connect locations that are distant in the physical Internet topology and can be used to create virtual (private) networks. Using UDP as a tunneling protocol is attractive when the payload protocol is not supported by middleboxes that may exist along the path, because many middleboxes support transmission using UDP.

UDP的一种日益流行的用途是作为隧道协议,其中隧道端点将另一协议的数据包封装在UDP数据报内,并将其传输到另一隧道端点,该隧道端点将UDP数据报解封并转发有效负载中包含的原始数据包。隧道建立虚拟链接,直接连接物理Internet拓扑中较远的位置,并可用于创建虚拟(专用)网络。当路径上可能存在的中间盒不支持有效负载协议时,使用UDP作为隧道协议很有吸引力,因为许多中间盒支持使用UDP传输。

Well-implemented tunnels are generally invisible to the endpoints that happen to transmit over a path that includes tunneled links. On the other hand, to the routers along the path of a UDP tunnel, i.e., the routers between the two tunnel endpoints, the traffic that a UDP tunnel generates is a regular UDP flow, and the encapsulator and decapsulator appear as regular UDP-sending and -receiving applications. Because other flows can share the path with one or more UDP tunnels, congestion control needs to be considered.

实现良好的隧道通常对恰好通过包含隧道链接的路径传输的端点不可见。另一方面,对于沿UDP隧道路径的路由器,即两个隧道端点之间的路由器,UDP隧道生成的流量是常规UDP流,封装器和解封装器显示为常规UDP发送和接收应用程序。因为其他流可以与一个或多个UDP隧道共享路径,所以需要考虑拥塞控制。

Two factors determine whether a UDP tunnel needs to employ specific congestion control mechanisms -- first, whether the payload traffic is IP-based; second, whether the tunneling scheme generates UDP traffic at a volume that corresponds to the volume of payload traffic carried within the tunnel.

有两个因素决定UDP隧道是否需要采用特定的拥塞控制机制——首先,有效负载流量是否基于IP;其次,隧道方案是否在与隧道内承载的有效负载流量相对应的卷上生成UDP流量。

IP-based traffic is generally assumed to be congestion-controlled, i.e., it is assumed that the transport protocols generating IP-based traffic at the sender already employ mechanisms that are sufficient to address congestion on the path. Consequently, a tunnel carrying

基于IP的流量通常被假定为拥塞控制,即,假定在发送方处生成基于IP的流量的传输协议已经采用足以解决路径上的拥塞的机制。因此,隧道承载

IP-based traffic should already interact appropriately with other traffic sharing the path, and specific congestion control mechanisms for the tunnel are not necessary.

基于IP的流量应该已经与共享路径的其他流量进行了适当的交互,并且不需要隧道的特定拥塞控制机制。

However, if the IP traffic in the tunnel is known to not be congestion-controlled, additional measures are RECOMMENDED in order to limit the impact of the tunneled traffic on other traffic sharing the path.

但是,如果已知隧道中的IP流量未受到拥塞控制,则建议采取其他措施,以限制隧道流量对共享路径的其他流量的影响。

The following guidelines define these possible cases in more detail:

以下指南更详细地定义了这些可能的情况:

1. A tunnel generates UDP traffic at a volume that corresponds to the volume of payload traffic, and the payload traffic is IP-based and congestion-controlled.

1. 隧道在与有效负载通信量相对应的卷上生成UDP通信量,并且有效负载通信量基于IP且受拥塞控制。

This is arguably the most common case for Internet tunnels. In this case, the UDP tunnel SHOULD NOT employ its own congestion control mechanism, because congestion losses of tunneled traffic will already trigger an appropriate congestion response at the original senders of the tunneled traffic.

这可以说是互联网隧道最常见的情况。在这种情况下,UDP隧道不应采用其自身的拥塞控制机制,因为隧道流量的拥塞损失将已经在隧道流量的原始发送方触发适当的拥塞响应。

Note that this guideline is built on the assumption that most IP-based communication is congestion-controlled. If a UDP tunnel is used for IP-based traffic that is known to not be congestion-controlled, the next set of guidelines applies.

请注意,本指南建立在大多数基于IP的通信都是拥塞控制的假设之上。如果UDP隧道用于已知不受拥塞控制的基于IP的流量,则下一组指南适用。

2. A tunnel generates UDP traffic at a volume that corresponds to the volume of payload traffic, and the payload traffic is not known to be IP-based, or is known to be IP-based but not congestion-controlled.

2. 隧道在与有效负载通信量相对应的卷上生成UDP通信量,有效负载通信量不知道是基于IP的,或者已知是基于IP的,但不受拥塞控制。

This can be the case, for example, when some link-layer protocols are encapsulated within UDP (but not all link-layer protocols; some are congestion-controlled). Because it is not known that congestion losses of tunneled non-IP traffic will trigger an appropriate congestion response at the senders, the UDP tunnel SHOULD employ an appropriate congestion control mechanism. Because tunnels are usually bulk-transfer applications as far as the intermediate routers are concerned, the guidelines in Section 3.1.1 apply.

例如,当某些链路层协议封装在UDP中时(但不是所有链路层协议;有些是拥塞控制的),可能会出现这种情况。由于不知道隧道传输的非IP流量的拥塞丢失将在发送方触发适当的拥塞响应,UDP隧道应采用适当的拥塞控制机制。由于就中间路由器而言,隧道通常是批量传输应用,因此第3.1.1节中的指南适用。

3. A tunnel generates UDP traffic at a volume that does not correspond to the volume of payload traffic, independent of whether the payload traffic is IP-based or congestion-controlled.

3. 隧道在与有效负载流量量不对应的卷上生成UDP流量,这与有效负载流量是基于IP还是拥塞控制无关。

Examples of this class include UDP tunnels that send at a constant rate, increase their transmission rates under loss, for example, due to increasing redundancy when Forward Error

此类示例包括以恒定速率发送的UDP隧道,例如,由于前向错误时增加冗余,在丢失情况下增加传输速率

Correction is used, or are otherwise constrained in their transmission behavior. These specialized uses of UDP for tunneling go beyond the scope of the general guidelines given in this document. The implementer of such specialized tunnels SHOULD carefully consider congestion control in the design of their tunneling mechanism.

在其传输行为中使用或以其他方式限制校正。UDP在隧道中的这些特殊用途超出了本文档中给出的一般指南的范围。这种专用隧道的实施者在隧道机制设计中应仔细考虑拥塞控制。

Designing a tunneling mechanism requires significantly more expertise than needed for many other UDP applications, because tunnels virtualize lower-layer components of the Internet, and the virtualized components need to correctly interact with the infrastructure at that layer. This document only touches upon the congestion control considerations for implementing UDP tunnels; a discussion of other required tunneling behavior is out of scope.

与许多其他UDP应用程序相比,设计隧道机制需要更多的专业知识,因为隧道虚拟化了Internet的较低层组件,而虚拟化的组件需要与该层的基础设施正确交互。本文件仅涉及实施UDP隧道的拥塞控制注意事项;对其他所需隧道行为的讨论超出范围。

3.2. Message Size Guidelines
3.2. 邮件大小准则

IP fragmentation lowers the efficiency and reliability of Internet communication. The loss of a single fragment results in the loss of an entire fragmented packet, because even if all other fragments are received correctly, the original packet cannot be reassembled and delivered. This fundamental issue with fragmentation exists for both IPv4 and IPv6. In addition, some network address translators (NATs) and firewalls drop IP fragments. The network address translation performed by a NAT only operates on complete IP packets, and some firewall policies also require inspection of complete IP packets. Even with these being the case, some NATs and firewalls simply do not implement the necessary reassembly functionality, and instead choose to drop all fragments. Finally, [RFC4963] documents other issues specific to IPv4 fragmentation.

IP碎片化降低了Internet通信的效率和可靠性。单个片段的丢失会导致整个片段数据包的丢失,因为即使正确接收到所有其他片段,原始数据包也无法重新组装和交付。IPv4和IPv6都存在碎片化的基本问题。此外,一些网络地址转换器(NAT)和防火墙会丢弃IP片段。NAT执行的网络地址转换仅在完整的IP数据包上运行,一些防火墙策略还需要检查完整的IP数据包。即使是这样,一些NAT和防火墙也没有实现必要的重组功能,而是选择删除所有片段。最后,[RFC4963]记录了特定于IPv4碎片的其他问题。

Due to these issues, an application SHOULD NOT send UDP datagrams that result in IP packets that exceed the MTU of the path to the destination. Consequently, an application SHOULD either use the path MTU information provided by the IP layer or implement path MTU discovery itself [RFC1191][RFC1981][RFC4821] to determine whether the path to a destination will support its desired message size without fragmentation.

由于这些问题,应用程序不应发送导致IP数据包超过目标路径MTU的UDP数据报。因此,应用程序应该使用IP层提供的路径MTU信息,或者实现路径MTU发现本身[RFC1191][RFC1981][RFC4821],以确定到达目的地的路径是否支持其所需的消息大小而不出现碎片。

Applications that do not follow this recommendation to do PMTU discovery SHOULD still avoid sending UDP datagrams that would result in IP packets that exceed the path MTU. Because the actual path MTU is unknown, such applications SHOULD fall back to sending messages that are shorter than the default effective MTU for sending (EMTU_S in [RFC1122]). For IPv4, EMTU_S is the smaller of 576 bytes and the first-hop MTU [RFC1122]. For IPv6, EMTU_S is 1280 bytes [RFC2460]. The effective PMTU for a directly connected destination (with no routers on the path) is the configured interface MTU, which could be

不遵循此建议进行PMTU发现的应用程序仍应避免发送UDP数据报,这将导致IP数据包超过路径MTU。由于实际路径MTU未知,此类应用程序应返回发送短于默认有效发送MTU的消息(参见[RFC1122])。对于IPv4,EMTU_S是576字节和第一跳MTU[RFC1122]中较小的一个。对于IPv6,EMTU_S是1280字节[RFC2460]。对于直接连接的目的地(路径上没有路由器),有效的PMTU是配置的接口MTU,它可以是

less than the maximum link payload size. Transmission of minimum-sized UDP datagrams is inefficient over paths that support a larger PMTU, which is a second reason to implement PMTU discovery.

小于最大链路有效负载大小。在支持较大PMTU的路径上传输最小大小的UDP数据报效率低下,这是实现PMTU发现的第二个原因。

To determine an appropriate UDP payload size, applications MUST subtract the size of the IP header (which includes any IPv4 optional headers or IPv6 extension headers) as well as the length of the UDP header (8 bytes) from the PMTU size. This size, known as the MMS_S, can be obtained from the TCP/IP stack [RFC1122].

要确定适当的UDP有效负载大小,应用程序必须从PMTU大小中减去IP报头的大小(包括任何IPv4可选报头或IPv6扩展报头)以及UDP报头的长度(8字节)。该大小称为MMS,可从TCP/IP堆栈[RFC1122]获得。

Applications that do not send messages that exceed the effective PMTU of IPv4 or IPv6 need not implement any of the above mechanisms. Note that the presence of tunnels can cause an additional reduction of the effective PMTU, so implementing PMTU discovery may be beneficial.

不发送超过IPv4或IPv6有效PMTU的消息的应用程序不需要实现上述任何机制。请注意,隧道的存在可能会导致有效PMTU的额外减少,因此实施PMTU发现可能是有益的。

Applications that fragment an application-layer message into multiple UDP datagrams SHOULD perform this fragmentation so that each datagram can be received independently, and be independently retransmitted in the case where an application implements its own reliability mechanisms.

将应用层消息分段为多个UDP数据报的应用程序应执行此分段,以便每个数据报可以独立接收,并在应用程序实现其自身可靠性机制的情况下独立重新传输。

3.3. Reliability Guidelines
3.3. 可靠性指南

Application designers are generally aware that UDP does not provide any reliability, e.g., it does not retransmit any lost packets. Often, this is a main reason to consider UDP as a transport. Applications that do require reliable message delivery MUST implement an appropriate mechanism themselves.

应用程序设计者通常知道UDP不提供任何可靠性,例如,它不重新传输任何丢失的数据包。通常,这是考虑UDP作为传输的一个主要原因。确实需要可靠消息传递的应用程序本身必须实现适当的机制。

UDP also does not protect against datagram duplication, i.e., an application may receive multiple copies of the same UDP datagram. Application designers SHOULD verify that their application handles datagram duplication gracefully, and may consequently need to implement mechanisms to detect duplicates. Even if UDP datagram reception triggers idempotent operations, applications may want to suppress duplicate datagrams to reduce load.

UDP也不能防止数据报重复,即应用程序可能会收到同一UDP数据报的多个副本。应用程序设计人员应该验证他们的应用程序是否能够优雅地处理数据报重复,因此可能需要实现检测重复的机制。即使UDP数据报接收触发幂等操作,应用程序也可能希望抑制重复数据报以减少负载。

In addition, the Internet can significantly delay some packets with respect to others, e.g., due to routing transients, intermittent connectivity, or mobility. This can cause reordering, where UDP datagrams arrive at the receiver in an order different from the transmission order. Applications that require ordered delivery MUST reestablish datagram ordering themselves.

此外,因特网可以相对于其他分组显著地延迟一些分组,例如,由于路由瞬变、间歇连接或移动性。这可能导致重新排序,其中UDP数据报以不同于传输顺序的顺序到达接收器。需要按顺序交付的应用程序必须自行重新建立数据报顺序。

Finally, it is important to note that delay spikes can be very large. This can cause reordered packets to arrive many seconds after they were sent. [RFC0793] defines the maximum delay a TCP segment should experience -- the Maximum Segment Lifetime (MSL) -- as 2 minutes. No

最后,需要注意的是,延迟峰值可能非常大。这可能导致重新排序的数据包在发送后数秒到达。[RFC0793]将TCP段应经历的最大延迟(最大段生存期(MSL))定义为2分钟。不

other RFC defines an MSL for other transport protocols or IP itself. This document clarifies that the MSL value to be used for UDP SHOULD be the same 2 minutes as for TCP. Applications SHOULD be robust to the reception of delayed or duplicate packets that are received within this 2-minute interval.

其他RFC为其他传输协议或IP本身定义MSL。本文件澄清了UDP使用的MSL值应与TCP相同2分钟。应用程序对于在这2分钟间隔内收到的延迟或重复数据包的接收应具有鲁棒性。

An application that requires reliable and ordered message delivery SHOULD choose an IETF standard transport protocol that provides these features. If this is not possible, it will need to implement a set of appropriate mechanisms itself.

需要可靠和有序消息传递的应用程序应选择提供这些功能的IETF标准传输协议。如果这是不可能的,它将需要实施一套适当的机制本身。

3.4. Checksum Guidelines
3.4. 校验和准则

The UDP header includes an optional, 16-bit one's complement checksum that provides an integrity check. This results in a relatively weak protection in terms of coding theory [RFC3819], and application developers SHOULD implement additional checks where data integrity is important, e.g., through a Cyclic Redundancy Check (CRC) included with the data to verify the integrity of an entire object/file sent over the UDP service.

UDP报头包括一个可选的16位1的补码校验和,该校验和提供完整性检查。这导致编码理论[RFC3819]方面的保护相对较弱,应用程序开发人员应在数据完整性很重要的地方实施额外的检查,例如,通过数据中包含的循环冗余校验(CRC)来验证通过UDP服务发送的整个对象/文件的完整性。

The UDP checksum provides a statistical guarantee that the payload was not corrupted in transit. It also allows the receiver to verify that it was the intended destination of the packet, because it covers the IP addresses, port numbers, and protocol number, and it verifies that the packet is not truncated or padded, because it covers the size field. It therefore protects an application against receiving corrupted payload data in place of, or in addition to, the data that was sent. This check is not strong from a coding or cryptographic perspective, and is not designed to detect physical-layer errors or malicious modification of the datagram [RFC3819].

UDP校验和提供了有效负载在传输过程中未损坏的统计保证。它还允许接收方验证它是数据包的预期目的地,因为它包含IP地址、端口号和协议号,并且它验证数据包没有被截断或填充,因为它包含大小字段。因此,它可以防止应用程序接收损坏的有效负载数据来代替或补充发送的数据。从编码或加密的角度来看,该检查不是很强,也不是为了检测物理层错误或恶意修改数据报而设计的[RFC3819]。

Applications SHOULD enable UDP checksums, although [RFC0768] permits the option to disable their use. Applications that choose to disable UDP checksums when transmitting over IPv4 therefore MUST NOT make assumptions regarding the correctness of received data and MUST behave correctly when a UDP datagram is received that was originally sent to a different destination or is otherwise corrupted. The use of the UDP checksum is REQUIRED when applications transmit UDP over IPv6 [RFC2460].

应用程序应启用UDP校验和,尽管[RFC0768]允许禁用其使用的选项。因此,在通过IPv4进行传输时选择禁用UDP校验和的应用程序不得对接收到的数据的正确性进行假设,并且在接收到最初发送到其他目的地或已损坏的UDP数据报时,其行为必须正确。当应用程序通过IPv6传输UDP[RFC2460]时,需要使用UDP校验和。

3.4.1. UDP-Lite
3.4.1. UDP精简

A special class of applications can derive benefit from having partially-damaged payloads delivered, rather than discarded, when using paths that include error-prone links. Such applications can tolerate payload corruption and MAY choose to use the Lightweight User Datagram Protocol (UDP-Lite) [RFC3828] variant of UDP instead of

当使用包含易出错链接的路径时,一类特殊的应用程序可以从交付而不是丢弃部分损坏的有效负载中获益。此类应用程序可以容忍有效负载损坏,并且可以选择使用UDP的轻量级用户数据报协议(UDP Lite)[RFC3828]变体,而不是

basic UDP. Applications that choose to use UDP-Lite instead of UDP should still follow the congestion control and other guidelines described for use with UDP in Section 3.

基本UDP。选择使用UDP Lite而不是UDP的应用程序仍应遵循第3节中描述的用于UDP的拥塞控制和其他指南。

UDP-Lite changes the semantics of the UDP "payload length" field to that of a "checksum coverage length" field. Otherwise, UDP-Lite is semantically identical to UDP. The interface of UDP-Lite differs from that of UDP by the addition of a single (socket) option that communicates a checksum coverage length value: at the sender, this specifies the intended checksum coverage, with the remaining unprotected part of the payload called the "error-insensitive part". By default, the UDP-Lite checksum coverage extends across the entire datagram. If required, an application may dynamically modify this length value, e.g., to offer greater protection to some messages. UDP-Lite always verifies that a packet was delivered to the intended destination, i.e., always verifies the header fields. Errors in the insensitive part will not cause a UDP datagram to be discarded by the destination. Applications using UDP-Lite therefore MUST NOT make assumptions regarding the correctness of the data received in the insensitive part of the UDP-Lite payload.

UDP Lite将UDP“有效负载长度”字段的语义更改为“校验和覆盖长度”字段的语义。否则,UDP Lite在语义上与UDP相同。UDP Lite的接口与UDP的接口不同,它增加了一个(套接字)选项,用于传递校验和覆盖长度值:在发送方,这指定了预期的校验和覆盖范围,负载的剩余未受保护部分称为“错误不敏感部分”。默认情况下,UDP Lite校验和覆盖范围扩展到整个数据报。如果需要,应用程序可以动态修改此长度值,例如,为某些消息提供更大的保护。UDP Lite始终验证数据包是否已发送到预期目的地,即始终验证报头字段。不敏感部分中的错误不会导致目标丢弃UDP数据报。因此,使用UDP Lite的应用程序不得对UDP Lite有效负载的不敏感部分中接收的数据的正确性进行假设。

The sending application SHOULD select the minimum checksum coverage to include all sensitive protocol headers. For example, applications that use the Real-Time Protocol (RTP) [RFC3550] will likely want to protect the RTP header against corruption. Applications, where appropriate, MUST also introduce their own appropriate validity checks for protocol information carried in the insensitive part of the UDP-Lite payload (e.g., internal CRCs).

发送应用程序应选择包含所有敏感协议头的最小校验和覆盖率。例如,使用实时协议(RTP)[RFC3550]的应用程序可能希望保护RTP报头免受损坏。在适当的情况下,应用程序还必须对UDP Lite有效负载的不敏感部分(例如,内部CRC)中携带的协议信息引入自己的适当有效性检查。

The receiver must set a minimum coverage threshold for incoming packets that is not smaller than the smallest coverage used by the sender [RFC3828]. The receiver SHOULD select a threshold that is sufficiently large to block packets with an inappropriately short coverage field. This may be a fixed value, or may be negotiated by an application. UDP-Lite does not provide mechanisms to negotiate the checksum coverage between the sender and receiver.

接收方必须为传入数据包设置一个最小覆盖率阈值,该阈值不得小于发送方使用的最小覆盖率[RFC3828]。接收器应选择一个足够大的阈值,以阻止具有不适当短覆盖域的数据包。这可能是一个固定值,也可能由应用程序协商。UDP Lite不提供在发送方和接收方之间协商校验和覆盖率的机制。

Applications may still experience packet loss, rather than corruption, when using UDP-Lite. The enhancements offered by UDP-Lite rely upon a link being able to intercept the UDP-Lite header to correctly identify the partial coverage required. When tunnels and/or encryption are used, this can result in UDP-Lite datagrams being treated the same as UDP datagrams, i.e., result in packet loss. Use of IP fragmentation can also prevent special treatment for UDP-Lite datagrams, and this is another reason why applications SHOULD avoid IP fragmentation (Section 3.2).

当使用UDP Lite时,应用程序可能仍然会遇到数据包丢失,而不是损坏。UDP Lite提供的增强依赖于能够截获UDP Lite头的链接,以正确识别所需的部分覆盖。当使用隧道和/或加密时,这可能导致UDP Lite数据报与UDP数据报被视为相同,即导致数据包丢失。使用IP碎片还可以防止对UDP Lite数据报进行特殊处理,这也是应用程序应避免IP碎片的另一个原因(第3.2节)。

3.5. Middlebox Traversal Guidelines
3.5. 中间盒遍历指南

Network address translators (NATs) and firewalls are examples of intermediary devices ("middleboxes") that can exist along an end-to-end path. A middlebox typically performs a function that requires it to maintain per-flow state. For connection-oriented protocols, such as TCP, middleboxes snoop and parse the connection-management traffic and create and destroy per-flow state accordingly. For a connectionless protocol such as UDP, this approach is not possible. Consequently, middleboxes may create per-flow state when they see a packet that indicates a new flow, and destroy the state after some period of time during which no packets belonging to the same flow have arrived.

网络地址转换器(NAT)和防火墙是可以沿端到端路径存在的中间设备(“中间盒”)的示例。中间盒通常执行要求其保持每个流状态的功能。对于面向连接的协议(如TCP),中间盒可以窥探和解析连接管理流量,并相应地创建和销毁每个流状态。对于UDP这样的无连接协议,这种方法是不可能的。因此,当中间盒看到指示新流的数据包时,可能会创建每个流状态,并在一段时间后破坏该状态,在此期间,不存在属于相同流的数据包。

Depending on the specific function that the middlebox performs, this behavior can introduce a time-dependency that restricts the kinds of UDP traffic exchanges that will be successful across the middlebox. For example, NATs and firewalls typically define the partial path on one side of them to be interior to the domain they serve, whereas the partial path on their other side is defined to be exterior to that domain. Per-flow state is typically created when the first packet crosses from the interior to the exterior, and while the state is present, NATs and firewalls will forward return traffic. Return traffic that arrives after the per-flow state has timed out is dropped, as is other traffic that arrives from the exterior.

根据中间箱执行的特定功能,此行为可能会引入时间依赖性,从而限制将在中间箱中成功进行的UDP流量交换的类型。例如,NAT和防火墙通常将其一侧的部分路径定义为其服务的域的内部,而另一侧的部分路径定义为该域的外部。每流状态通常是在第一个数据包从内部传输到外部时创建的,当该状态存在时,NAT和防火墙将转发返回流量。每流状态超时后到达的返回流量将被丢弃,从外部到达的其他流量也是如此。

Many applications that use UDP for communication operate across middleboxes without needing to employ additional mechanisms. One example is the Domain Name System (DNS), which has a strict request-response communication pattern that typically completes within seconds.

许多使用UDP进行通信的应用程序在不需要使用其他机制的情况下跨中间件运行。一个例子是域名系统(DNS),它具有严格的请求-响应通信模式,通常在几秒钟内完成。

Other applications may experience communication failures when middleboxes destroy the per-flow state associated with an application session during periods when the application does not exchange any UDP traffic. Applications SHOULD be able to gracefully handle such communication failures and implement mechanisms to re-establish application-layer sessions and state.

在应用程序不交换任何UDP流量期间,如果中间盒破坏与应用程序会话相关联的每流状态,则其他应用程序可能会遇到通信故障。应用程序应该能够优雅地处理此类通信故障,并实现重新建立应用程序层会话和状态的机制。

For some applications, such as media transmissions, this re-synchronization is highly undesirable, because it can cause user-perceivable playback artifacts. Such specialized applications MAY send periodic keep-alive messages to attempt to refresh middlebox state. It is important to note that keep-alive messages are NOT RECOMMENDED for general use -- they are unnecessary for many applications and can consume significant amounts of system and network resources.

对于某些应用程序(如媒体传输),这种重新同步是非常不可取的,因为它会导致用户可感知的播放瑕疵。此类专用应用程序可能会定期发送保持活动状态的消息,以尝试刷新中间盒状态。需要注意的是,不建议将保持活动状态消息用于一般用途,因为它们对于许多应用程序都是不必要的,并且可能会消耗大量的系统和网络资源。

An application that needs to employ keep-alives to deliver useful service over UDP in the presence of middleboxes SHOULD NOT transmit them more frequently than once every 15 seconds and SHOULD use longer intervals when possible. No common timeout has been specified for per-flow UDP state for arbitrary middleboxes. NATs require a state timeout of 2 minutes or longer [RFC4787]. However, empirical evidence suggests that a significant fraction of currently deployed middleboxes unfortunately use shorter timeouts. The timeout of 15 seconds originates with the Interactive Connectivity Establishment (ICE) protocol [ICE]. When applications are deployed in more controlled network environments, the deployers SHOULD investigate whether the target environment allows applications to use longer intervals, or whether it offers mechanisms to explicitly control middlebox state timeout durations, for example, using Middlebox Communications (MIDCOM) [RFC3303], Next Steps in Signaling (NSIS) [NSLP], or Universal Plug and Play (UPnP) [UPnP]. It is RECOMMENDED that applications apply slight random variations ("jitter") to the timing of keep-alive transmissions, to reduce the potential for persistent synchronization between keep-alive transmissions from different hosts.

如果应用程序需要使用keep alives在有中间盒的情况下通过UDP提供有用的服务,则其传输频率不应超过每15秒一次,并且应尽可能使用更长的时间间隔。没有为任意中间盒的每个流UDP状态指定公共超时。NAT需要2分钟或更长的状态超时[RFC4787]。然而,经验证据表明,不幸的是,目前部署的中间盒中有相当一部分使用较短的超时时间。15秒的超时源自交互式连接建立(ICE)协议[ICE]。当应用程序部署在更受控的网络环境中时,部署人员应调查目标环境是否允许应用程序使用更长的时间间隔,或者是否提供明确控制中间箱状态超时持续时间的机制,例如,使用中间箱通信(MIDCOM)[RFC3303],信令(NSIS)[NSLP]或通用即插即用(UPnP)[UPnP]中的下一步。建议应用程序对保持活动传输的定时应用轻微的随机变化(“抖动”),以减少来自不同主机的保持活动传输之间持续同步的可能性。

Sending keep-alives is not a substitute for implementing robust connection handling. Like all UDP datagrams, keep-alives can be delayed or dropped, causing middlebox state to time out. In addition, the congestion control guidelines in Section 3.1 cover all UDP transmissions by an application, including the transmission of middlebox keep-alives. Congestion control may thus lead to delays or temporary suspension of keep-alive transmission.

发送keep-alives不能替代实现健壮的连接处理。与所有UDP数据报一样,keep alives可能会延迟或丢弃,从而导致中间盒状态超时。此外,第3.1节中的拥塞控制指南涵盖了应用程序进行的所有UDP传输,包括中间箱保持有效的传输。因此,拥塞控制可能导致持续传输的延迟或临时暂停。

Keep-alive messages are NOT RECOMMENDED for general use. They are unnecessary for many applications and may consume significant resources. For example, on battery-powered devices, if an application needs to maintain connectivity for long periods with little traffic, the frequency at which keep-alives are sent can become the determining factor that governs power consumption, depending on the underlying network technology. Because many middleboxes are designed to require keep-alives for TCP connections at a frequency that is much lower than that needed for UDP, this difference alone can often be sufficient to prefer TCP over UDP for these deployments. On the other hand, there is anecdotal evidence that suggests that direct communication through middleboxes, e.g., by using ICE [ICE], does succeed less often with TCP than with UDP. The tradeoffs between different transport protocols -- especially when it comes to middlebox traversal -- deserve careful analysis.

不建议将保持活动状态消息用于一般用途。它们对于许多应用程序都是不必要的,并且可能会消耗大量资源。例如,在电池供电的设备上,如果应用程序需要在流量很少的情况下长时间保持连接性,则发送keep Alive的频率可能成为控制功耗的决定因素,具体取决于基础网络技术。由于许多中间盒的设计要求TCP连接的保持有效性的频率远低于UDP所需的频率,因此仅此差异就足以使这些部署更倾向于TCP而非UDP。另一方面,有传闻证据表明,通过中间盒(例如,通过使用ICE[ICE])进行的直接通信,使用TCP的成功率要低于使用UDP的成功率。不同传输协议之间的权衡——特别是在涉及到中间盒遍历时——值得仔细分析。

3.6. Programming Guidelines
3.6. 规划准则

The de facto standard application programming interface (API) for TCP/IP applications is the "sockets" interface [POSIX]. Some platforms also offer applications the ability to directly assemble and transmit IP packets through "raw sockets" or similar facilities. This is a second, more cumbersome method of using UDP. The guidelines in this document cover all such methods through which an application may use UDP. Because the sockets API is by far the most common method, the remainder of this section discusses it in more detail.

TCP/IP应用程序事实上的标准应用程序编程接口(API)是“套接字”接口[POSIX]。一些平台还为应用程序提供了通过“原始套接字”或类似设施直接组装和传输IP数据包的能力。这是第二种更麻烦的使用UDP的方法。本文档中的指南涵盖了应用程序使用UDP的所有此类方法。由于套接字API是目前为止最常用的方法,因此本节的其余部分将对其进行更详细的讨论。

Although the sockets API was developed for UNIX in the early 1980s, a wide variety of non-UNIX operating systems also implement this. The sockets API supports both IPv4 and IPv6 [RFC3493]. The UDP sockets API differs from that for TCP in several key ways. Because application programmers are typically more familiar with the TCP sockets API, the remainder of this section discusses these differences. [STEVENS] provides usage examples of the UDP sockets API.

尽管SocketsAPI是在20世纪80年代早期为UNIX开发的,但各种各样的非UNIX操作系统也实现了这一点。套接字API同时支持IPv4和IPv6[RFC3493]。UDP套接字API在几个关键方面与TCP不同。由于应用程序程序员通常更熟悉TCP套接字API,因此本节的其余部分将讨论这些差异。[STEVENS]提供了UDP套接字API的使用示例。

UDP datagrams may be directly sent and received, without any connection setup. Using the sockets API, applications can receive packets from more than one IP source address on a single UDP socket. Some servers use this to exchange data with more than one remote host through a single UDP socket at the same time. Many applications need to ensure that they receive packets from a particular source address; these applications MUST implement corresponding checks at the application layer or explicitly request that the operating system filter the received packets.

UDP数据报可以直接发送和接收,无需任何连接设置。使用套接字API,应用程序可以在单个UDP套接字上从多个IP源地址接收数据包。一些服务器使用此功能同时通过单个UDP套接字与多个远程主机交换数据。许多应用程序需要确保它们从特定的源地址接收数据包;这些应用程序必须在应用程序层执行相应的检查,或者明确请求操作系统过滤接收到的数据包。

If a client/server application executes on a host with more than one IP interface, the application SHOULD send any UDP responses with an IP source address that matches the IP destination address of the UDP datagram that carried the request (see [RFC1122], Section 4.1.3.5). Many middleboxes expect this transmission behavior and drop replies that are sent from a different IP address, as explained in Section 3.5.

如果客户机/服务器应用程序在具有多个IP接口的主机上执行,则应用程序应发送任何UDP响应,其IP源地址应与承载请求的UDP数据报的IP目标地址匹配(请参阅[RFC1122],第4.1.3.5节)。如第3.5节所述,许多中间盒期望这种传输行为,并丢弃从不同IP地址发送的回复。

A UDP receiver can receive a valid UDP datagram with a zero-length payload. Note that this is different from a return value of zero from a read() socket call, which for TCP indicates the end of the connection.

UDP接收器可以接收长度为零的有效UDP数据报。请注意,这与read()套接字调用的返回值零不同,后者对于TCP表示连接结束。

Many operating systems also allow a UDP socket to be connected, i.e., to bind a UDP socket to a specific pair of addresses and ports. This is similar to the corresponding TCP sockets API functionality. However, for UDP, this is only a local operation that serves to

许多操作系统还允许连接UDP套接字,即将UDP套接字绑定到特定的地址和端口对。这类似于相应的TCP套接字API功能。但是,对于UDP,这只是一个本地操作,用于

simplify the local send/receive functions and to filter the traffic for the specified addresses and ports. Binding a UDP socket does not establish a connection -- UDP does not notify the remote end when a local UDP socket is bound. Binding a socket also allows configuring options that affect the UDP or IP layers, for example, use of the UDP checksum or the IP Timestamp option. On some stacks, a bound socket also allows an application to be notified when ICMP error messages are received for its transmissions [RFC1122].

简化本地发送/接收功能,并过滤指定地址和端口的通信量。绑定UDP套接字不会建立连接——绑定本地UDP套接字时,UDP不会通知远程端。绑定套接字还允许配置影响UDP或IP层的选项,例如,使用UDP校验和或IP时间戳选项。在某些堆栈上,绑定套接字还允许在收到ICMP错误消息进行传输时通知应用程序[RFC1122]。

UDP provides no flow-control. This is another reason why UDP-based applications need to be robust in the presence of packet loss. This loss can also occur within the sending host, when an application sends data faster than the line rate of the outbound network interface. It can also occur on the destination, where receive calls fail to return all the data that was sent when the application issues them too infrequently (i.e., such that the receive buffer overflows). Robust flow control mechanisms are difficult to implement, which is why applications that need this functionality SHOULD consider using a full-featured transport protocol.

UDP不提供流控制。这是基于UDP的应用程序在出现数据包丢失时需要健壮的另一个原因。当应用程序发送数据的速度快于出站网络接口的线路速率时,这种丢失也可能发生在发送主机内。它也可能发生在目的地,当应用程序太不频繁地发出接收调用时(例如,接收缓冲区溢出),接收调用无法返回发送的所有数据。鲁棒的流量控制机制很难实现,这就是为什么需要这种功能的应用程序应该考虑使用全功能传输协议的原因。

When an application closes a TCP, SCTP or DCCP socket, the transport protocol on the receiving host is required to maintain TIME-WAIT state. This prevents delayed packets from the closed connection instance from being mistakenly associated with a later connection instance that happens to reuse the same IP address and port pairs. The UDP protocol does not implement such a mechanism. Therefore, UDP-based applications need to be robust in this case. One application may close a socket or terminate, followed in time by another application receiving on the same port. This later application may then receive packets intended for the first application that were delayed in the network.

当应用程序关闭TCP、SCTP或DCCP套接字时,需要接收主机上的传输协议来保持时间等待状态。这可以防止来自关闭连接实例的延迟数据包错误地与稍后的连接实例关联,后者恰好重用相同的IP地址和端口对。UDP协议没有实现这种机制。因此,在这种情况下,基于UDP的应用程序需要健壮。一个应用程序可能会关闭套接字或终止,然后另一个应用程序会在同一端口上及时接收。随后,该稍后的应用可接收在网络中延迟的针对第一应用的分组。

The Internet can provide service differentiation to applications based on IP-layer packet markings [RFC2475]. This facility can be used for UDP traffic. Different operating systems provide different interfaces for marking packets to applications. Differentiated services require support from the network, and application deployers need to discuss the provisioning of this functionality with their network operator.

互联网可以根据IP层数据包标记为应用程序提供服务差异化[RFC2475]。此功能可用于UDP通信。不同的操作系统为应用程序标记数据包提供了不同的接口。差异化服务需要网络的支持,应用程序部署人员需要与其网络运营商讨论此功能的提供。

3.7. ICMP Guidelines
3.7. ICMP指南

Applications can utilize information about ICMP error messages that the UDP layer passes up for a variety of purposes [RFC1122]. Applications SHOULD validate that the information in the ICMP message payload, e.g., a reported error condition, corresponds to a UDP datagram that the application actually sent. Note that not all APIs

应用程序可以利用UDP层出于各种目的向上传递的有关ICMP错误消息的信息[RFC1122]。应用程序应验证ICMP消息负载中的信息(例如,报告的错误情况)是否与应用程序实际发送的UDP数据报相对应。请注意,并非所有API

have the necessary functions to support this validation, and some APIs already perform this validation internally before passing ICMP information to the application.

具有支持此验证的必要功能,并且一些API在将ICMP信息传递给应用程序之前已在内部执行此验证。

Any application response to ICMP error messages SHOULD be robust to temporary routing failures, i.e., transient ICMP "unreachable" messages should not normally cause a communication abort. Applications SHOULD appropriately process ICMP messages generated in response to transmitted traffic. A correct response often requires context, such as local state about communication instances to each destination, that although readily available in connection-oriented transport protocols is not always maintained by UDP-based applications.

任何应用程序对ICMP错误消息的响应都应该对临时路由故障具有鲁棒性,即瞬态ICMP“不可访问”消息通常不会导致通信中断。应用程序应适当地处理为响应传输的流量而生成的ICMP消息。正确的响应通常需要上下文,例如与每个目的地的通信实例有关的本地状态,尽管在面向连接的传输协议中随时可用,但这些上下文并不总是由基于UDP的应用程序维护。

4. Security Considerations
4. 安全考虑

UDP does not provide communications security. Applications that need to protect their communications against eavesdropping, tampering, or message forgery SHOULD employ end-to-end security services provided by other IETF protocols. Applications that respond to short requests with potentially large responses are vulnerable to amplification attacks, and SHOULD authenticate the sender before responding. The source IP address of a request is not a useful authenticator, because it can be spoofed.

UDP不提供通信安全。需要保护其通信免受窃听、篡改或消息伪造的应用程序应采用其他IETF协议提供的端到端安全服务。对短请求做出响应的应用程序可能会有较大的响应,因此容易受到放大攻击,应在响应前对发送者进行身份验证。请求的源IP地址不是有用的身份验证器,因为它可以被伪造。

One option of securing UDP communications is with IPsec [RFC4301], which can provide authentication for flows of IP packets through the Authentication Header (AH) [RFC4302] and encryption and/or authentication through the Encapsulating Security Payload (ESP) [RFC4303]. Applications use the Internet Key Exchange (IKE) [RFC4306] to configure IPsec for their sessions. Depending on how IPsec is configured for a flow, it can authenticate or encrypt the UDP headers as well as UDP payloads. If an application only requires authentication, ESP with no encryption but with authentication is often a better option than AH, because ESP can operate across middleboxes. An application that uses IPsec requires the support of an operating system that implements the IPsec protocol suite.

保护UDP通信的一个选项是使用IPsec[RFC4301],它可以通过认证头(AH)[RFC4302]为IP数据包流提供认证,并通过封装安全负载(ESP)[RFC4303]提供加密和/或认证。应用程序使用Internet密钥交换(IKE)[RFC4306]为其会话配置IPsec。根据为流配置IPsec的方式,它可以对UDP报头以及UDP有效负载进行身份验证或加密。如果一个应用程序只需要身份验证,ESP不需要加密但需要身份验证通常是比AH更好的选择,因为ESP可以跨中间盒运行。使用IPsec的应用程序需要实现IPsec协议套件的操作系统的支持。

Although it is possible to use IPsec to secure UDP communications, not all operating systems support IPsec or allow applications to easily configure it for their flows. A second option of securing UDP communications is through Datagram Transport Layer Security (DTLS) [RFC4347]. DTLS provides communication privacy by encrypting UDP payloads. It does not protect the UDP headers. Applications can implement DTLS without relying on support from the operating system.

尽管可以使用IPsec来保护UDP通信,但并非所有操作系统都支持IPsec或允许应用程序轻松地为其流配置IPsec。保护UDP通信的第二个选项是通过数据报传输层安全性(DTLS)[RFC4347]。DTLS通过加密UDP有效负载提供通信隐私。它不保护UDP报头。应用程序可以在不依赖操作系统支持的情况下实现DTL。

Many other options for authenticating or encrypting UDP payloads exist. For example, the GSS-API security framework [RFC2743] or Cryptographic Message Syntax (CMS) [RFC3852] could be used to protect UDP payloads. The IETF standard for securing RTP [RFC3550] communication sessions over UDP is the Secure Real-time Transport Protocol (SRTP) [RFC3711]. In some applications, a better solution is to protect larger stand-alone objects, such as files or messages, instead of individual UDP payloads. In these situations, CMS [RFC3852], S/MIME [RFC3851] or OpenPGP [RFC4880] could be used. In addition, there are many non-IETF protocols in this area.

存在许多其他用于验证或加密UDP有效负载的选项。例如,GSS-API安全框架[RFC2743]或加密消息语法(CMS)[RFC3852]可用于保护UDP有效负载。通过UDP保护RTP[RFC3550]通信会话的IETF标准是安全实时传输协议(SRTP)[RFC3711]。在某些应用程序中,更好的解决方案是保护较大的独立对象,例如文件或消息,而不是单个UDP有效负载。在这些情况下,可以使用CMS[RFC3852]、S/MIME[RFC3851]或OpenPGP[RFC4880]。此外,在这一领域还有许多非IETF协议。

Like congestion control mechanisms, security mechanisms are difficult to design and implement correctly. It is hence RECOMMENDED that applications employ well-known standard security mechanisms such as DTLS or IPsec, rather than inventing their own.

与拥塞控制机制一样,安全机制也难以正确设计和实现。因此,建议应用程序采用众所周知的标准安全机制,如DTL或IPsec,而不是发明自己的安全机制。

The Generalized TTL Security Mechanism (GTSM) [RFC5082] may be used with UDP applications (especially when the intended endpoint is on the same link as the sender). This is a lightweight mechanism that allows a receiver to filter unwanted packets.

通用TTL安全机制(GTSM)[RFC5082]可用于UDP应用程序(特别是当预期端点与发送方位于同一链路上时)。这是一种轻量级机制,允许接收器过滤不需要的数据包。

In terms of congestion control, [RFC2309] and [RFC2914] discuss the dangers of congestion-unresponsive flows to the Internet. This document provides guidelines to designers of UDP-based applications to congestion-control their transmissions, and does not raise any additional security concerns.

在拥塞控制方面,[RFC2309]和[RFC2914]讨论了拥塞对互联网无响应流的危险。本文档为基于UDP的应用程序的设计者提供了拥塞控制传输的指南,并且不会引起任何额外的安全问题。

5. Summary
5. 总结

This section summarizes the guidelines made in Sections 3 and 4 in a tabular format (Table 1) for easy referencing.

本节以表格形式(表1)总结了第3节和第4节中制定的指南,以便于参考。

   +---------------------------------------------------------+---------+
   | Recommendation                                          | Section |
   +---------------------------------------------------------+---------+
   | MUST tolerate a wide range of Internet path conditions  | 3       |
   | SHOULD use a full-featured transport (TCP, SCTP, DCCP)  |         |
   |                                                         |         |
   | SHOULD control rate of transmission                     | 3.1     |
   | SHOULD perform congestion control over all traffic      |         |
   |                                                         |         |
   | for bulk transfers,                                     | 3.1.1   |
   | SHOULD consider implementing TFRC                       |         |
   | else, SHOULD in other ways use bandwidth similar to TCP |         |
   |                                                         |         |
   | for non-bulk transfers,                                 | 3.1.2   |
   | SHOULD measure RTT and transmit max. 1 datagram/RTT     |         |
   | else, SHOULD send at most 1 datagram every 3 seconds    |         |
   | SHOULD back-off retransmission timers following loss    |         |
   |                                                         |         |
   | for tunnels carrying IP Traffic,                        | 3.1.3   |
   | SHOULD NOT perform congestion control                   |         |
   |                                                         |         |
   | for non-IP tunnels or rate not determined by traffic,   | 3.1.3   |
   | SHOULD perform congestion control                       |         |
   |                                                         |         |
   | SHOULD NOT send datagrams that exceed the PMTU, i.e.,   | 3.2     |
   | SHOULD discover PMTU or send datagrams < minimum PMTU   |         |
   |                                                         |         |
   | SHOULD handle datagram loss, duplication, reordering    | 3.3     |
   | SHOULD be robust to delivery delays up to 2 minutes     |         |
   |                                                         |         |
   | SHOULD enable IPv4 UDP checksum                         | 3.4     |
   | MUST enable IPv6 UDP checksum                           |         |
   | else, MAY use UDP-Lite with suitable checksum coverage  | 3.4.1   |
   |                                                         |         |
   | SHOULD NOT always send middlebox keep-alives            | 3.5     |
   | MAY use keep-alives when needed (min. interval 15 sec)  |         |
   |                                                         |         |
   | MUST check IP source address                            | 3.6     |
   | and, for client/server applications                     |         |
   | SHOULD send responses from src address matching request |         |
   |                                                         |         |
   | SHOULD use standard IETF security protocols when needed | 4       |
   +---------------------------------------------------------+---------+
        
   +---------------------------------------------------------+---------+
   | Recommendation                                          | Section |
   +---------------------------------------------------------+---------+
   | MUST tolerate a wide range of Internet path conditions  | 3       |
   | SHOULD use a full-featured transport (TCP, SCTP, DCCP)  |         |
   |                                                         |         |
   | SHOULD control rate of transmission                     | 3.1     |
   | SHOULD perform congestion control over all traffic      |         |
   |                                                         |         |
   | for bulk transfers,                                     | 3.1.1   |
   | SHOULD consider implementing TFRC                       |         |
   | else, SHOULD in other ways use bandwidth similar to TCP |         |
   |                                                         |         |
   | for non-bulk transfers,                                 | 3.1.2   |
   | SHOULD measure RTT and transmit max. 1 datagram/RTT     |         |
   | else, SHOULD send at most 1 datagram every 3 seconds    |         |
   | SHOULD back-off retransmission timers following loss    |         |
   |                                                         |         |
   | for tunnels carrying IP Traffic,                        | 3.1.3   |
   | SHOULD NOT perform congestion control                   |         |
   |                                                         |         |
   | for non-IP tunnels or rate not determined by traffic,   | 3.1.3   |
   | SHOULD perform congestion control                       |         |
   |                                                         |         |
   | SHOULD NOT send datagrams that exceed the PMTU, i.e.,   | 3.2     |
   | SHOULD discover PMTU or send datagrams < minimum PMTU   |         |
   |                                                         |         |
   | SHOULD handle datagram loss, duplication, reordering    | 3.3     |
   | SHOULD be robust to delivery delays up to 2 minutes     |         |
   |                                                         |         |
   | SHOULD enable IPv4 UDP checksum                         | 3.4     |
   | MUST enable IPv6 UDP checksum                           |         |
   | else, MAY use UDP-Lite with suitable checksum coverage  | 3.4.1   |
   |                                                         |         |
   | SHOULD NOT always send middlebox keep-alives            | 3.5     |
   | MAY use keep-alives when needed (min. interval 15 sec)  |         |
   |                                                         |         |
   | MUST check IP source address                            | 3.6     |
   | and, for client/server applications                     |         |
   | SHOULD send responses from src address matching request |         |
   |                                                         |         |
   | SHOULD use standard IETF security protocols when needed | 4       |
   +---------------------------------------------------------+---------+
        

Table 1: Summary of recommendations

表1:建议摘要

6. Acknowledgments
6. 致谢

Thanks to Paul Aitken, Mark Allman, Francois Audet, Iljitsch van Beijnum, Stewart Bryant, Remi Denis-Courmont, Lisa Dusseault, Wesley Eddy, Pasi Eronen, Sally Floyd, Robert Hancock, Jeffrey Hutzelman, Cullen Jennings, Tero Kivinen, Peter Koch, Jukka Manner, Philip Matthews, Joerg Ott, Colin Perkins, Tom Petch, Carlos Pignataro, Pasi Sarolahti, Pascal Thubert, Joe Touch, Dave Ward, and Magnus Westerlund for their comments on this document.

多亏了保罗·艾特肯、马克·奥尔曼、弗朗索瓦·奥德特、伊尔吉茨·范·贝伊纳姆、斯图尔特·布莱恩特、雷米·丹尼斯·库尔蒙、丽莎·杜肖奥、卫斯里·艾迪、帕西·埃伦、萨莉·弗洛伊德、罗伯特·汉考克、杰弗里·哈泽尔曼、卡伦·詹宁斯、泰罗·基维宁、彼得·科赫、朱卡·韦德、菲利普·马修斯、约格·奥特、科林·珀金斯、汤姆·佩奇、卡洛斯·皮纳塔罗、帕西·萨洛拉蒂、,Pascal Thubert、Joe Touch、Dave Ward和Magnus Westerlund感谢他们对本文件的评论。

The middlebox traversal guidelines in Section 3.5 incorporate ideas from Section 5 of [BEHAVE-APP] by Bryan Ford, Pyda Srisuresh, and Dan Kegel.

第3.5节中的中间箱穿越指南包含了Bryan Ford、Pyda Srisuresh和Dan Kegel在[BEHAVE-APP]第5节中的观点。

Lars Eggert is partly funded by [TRILOGY], a research project supported by the European Commission under its Seventh Framework Program. Gorry Fairhurst was partly funded by the EC SatNEx project.

拉尔斯·艾格特(Lars Eggert)的部分资金来自于[三部曲],这是一个由欧盟委员会第七框架计划支持的研究项目。Gorry Fairhurst的部分资金来自EC SatNEx项目。

7. References
7. 工具书类
7.1. Normative References
7.1. 规范性引用文件

[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, August 1980.

[RFC0768]Postel,J.,“用户数据报协议”,STD 6,RFC 768,1980年8月。

[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, September 1981.

[RFC0793]Postel,J.,“传输控制协议”,标准7,RFC 793,1981年9月。

[RFC1122] Braden, R., "Requirements for Internet Hosts - Communication Layers", STD 3, RFC 1122, October 1989.

[RFC1122]Braden,R.,“互联网主机的要求-通信层”,标准3,RFC 1122,1989年10月。

[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, November 1990.

[RFC1191]Mogul,J.和S.Deering,“MTU发现路径”,RFC1191,1990年11月。

[RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery for IP version 6", RFC 1981, August 1996.

[RFC1981]McCann,J.,Deering,S.,和J.Mogul,“IP版本6的路径MTU发现”,RFC 1981,1996年8月。

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2119]Bradner,S.,“RFC中用于表示需求水平的关键词”,BCP 14,RFC 2119,1997年3月。

[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998.

[RFC2460]Deering,S.和R.Hinden,“互联网协议,第6版(IPv6)规范”,RFC 2460,1998年12月。

[RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, RFC 2914, September 2000.

[RFC2914]Floyd,S.,“拥塞控制原则”,BCP 41,RFC 2914,2000年9月。

[RFC2988] Paxson, V. and M. Allman, "Computing TCP's Retransmission Timer", RFC 2988, November 2000.

[RFC2988]Paxson,V.和M.Allman,“计算TCP的重传计时器”,RFC 2988,2000年11月。

[RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., and G. Fairhurst, "The Lightweight User Datagram Protocol (UDP-Lite)", RFC 3828, July 2004.

[RFC3828]Larzon,L-A.,Degermark,M.,Pink,S.,Jonsson,L-E.,和G.Fairhurst,“轻量级用户数据报协议(UDP Lite)”,RFC 38282004年7月。

[RFC4787] Audet, F. and C. Jennings, "Network Address Translation (NAT) Behavioral Requirements for Unicast UDP", BCP 127, RFC 4787, January 2007.

[RFC4787]Audet,F.和C.Jennings,“单播UDP的网络地址转换(NAT)行为要求”,BCP 127,RFC 4787,2007年1月。

[RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU Discovery", RFC 4821, March 2007.

[RFC4821]Mathis,M.和J.Heffner,“打包层路径MTU发现”,RFC 48212007年3月。

[RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP Friendly Rate Control (TFRC): Protocol Specification", RFC 5348, September 2008.

[RFC5348]Floyd,S.,Handley,M.,Padhye,J.,和J.Widmer,“TCP友好速率控制(TFRC):协议规范”,RFC 5348,2008年9月。

7.2. Informative References
7.2. 资料性引用

[BEHAVE-APP] Ford, B., "Application Design Guidelines for Traversal through Network Address Translators", Work in Progress, March 2007.

[BEHAVE-APP]Ford,B.,“通过网络地址转换器进行遍历的应用程序设计指南”,进展中的工作,2007年3月。

[CCID4] Floyd, S. and E. Kohler, "Profile for Datagram Congestion Control Protocol (DCCP) Congestion ID 4: TCP-Friendly Rate Control for Small Packets (TFRC-SP)", Work in Progress, February 2008.

[CCID4]Floyd,S.和E.Kohler,“数据报拥塞控制协议(DCCP)拥塞ID 4的配置文件:小数据包的TCP友好速率控制(TFRC-SP)”,正在进行的工作,2008年2月。

[FABER] Faber, T., Touch, J., and W. Yue, "The TIME-WAIT State in TCP and Its Effect on Busy Servers", Proc. IEEE Infocom, March 1999.

[FABER]FABER,T.,Touch,J.,和W.Yue,“TCP中的时间等待状态及其对繁忙服务器的影响”,Proc。IEEE信息网,1999年3月。

[GIST] Schulzrinne, H. and R. Hancock, "GIST: General Internet Signalling Transport", Work in Progress, July 2008.

[GIST]Schulzrinne,H.和R.Hancock,“GIST:通用互联网信号传输”,正在进行的工作,2008年7月。

[ICE] Rosenberg, J., "Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols", Work in Progress, October 2007.

[ICE]Rosenberg,J.,“交互式连接建立(ICE):提供/应答协议的网络地址转换器(NAT)遍历协议”,正在进行的工作,2007年10月。

[NSLP] Stiemerling, M., Tschofenig, H., Aoun, C., and E. Davies, "NAT/Firewall NSIS Signaling Layer Protocol (NSLP)", Work in Progress, September 2008.

[NSLP]Stieemerling,M.,Tschofenig,H.,Aoun,C.,和E.Davies,“NAT/防火墙NSIS信令层协议(NSLP)”,正在进行的工作,2008年9月。

[POSIX] IEEE Std. 1003.1-2001, "Standard for Information Technology - Portable Operating System Interface (POSIX)", Open Group Technical Standard: Base Specifications Issue 6, ISO/IEC 9945:2002, December 2001.

[POSIX]IEEE标准1003.1-2001,“信息技术标准-便携式操作系统接口(POSIX)”,开放组技术标准:基本规范第6版,ISO/IEC 9945:2002,2001年12月。

[RFC0896] Nagle, J., "Congestion control in IP/TCP internetworks", RFC 896, January 1984.

[RFC0896]Nagle,J.,“IP/TCP网络中的拥塞控制”,RFC 896,1984年1月。

[RFC0919] Mogul, J., "Broadcasting Internet Datagrams", STD 5, RFC 919, October 1984.

[RFC0919]Mogul,J.,“广播互联网数据报”,STD 5,RFC 919,1984年10月。

[RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, RFC 1112, August 1989.

[RFC1112]Deering,S.,“IP多播的主机扩展”,STD 5,RFC11121989年8月。

[RFC1536] Kumar, A., Postel, J., Neuman, C., Danzig, P., and S. Miller, "Common DNS Implementation Errors and Suggested Fixes", RFC 1536, October 1993.

[RFC1536]Kumar,A.,Postel,J.,Neuman,C.,Danzig,P.,和S.Miller,“常见DNS实现错误和建议修复”,RFC 1536,1993年10月。

[RFC1546] Partridge, C., Mendez, T., and W. Milliken, "Host Anycasting Service", RFC 1546, November 1993.

[RFC1546]帕特里奇,C.,门德斯,T.,和W.米利肯,“主持任意广播服务”,RFC15461993年11月。

[RFC2309] Braden, B., Clark, D., Crowcroft, J., Davie, B., Deering, S., Estrin, D., Floyd, S., Jacobson, V., Minshall, G., Partridge, C., Peterson, L., Ramakrishnan, K., Shenker, S., Wroclawski, J., and L. Zhang, "Recommendations on Queue Management and Congestion Avoidance in the Internet", RFC 2309, April 1998.

[RFC2309]Braden,B.,Clark,D.,Crowcroft,J.,Davie,B.,Deering,S.,Estrin,D.,Floyd,S.,Jacobson,V.,Minshall,G.,Partridge,C.,Peterson,L.,Ramakrishnan,K.,Shenker,S.,Wroclawski,J.,和L.Zhang,“关于互联网中队列管理和拥塞避免的建议”,RFC 2309,1998年4月。

[RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., and W. Weiss, "An Architecture for Differentiated Services", RFC 2475, December 1998.

[RFC2475]Blake,S.,Black,D.,Carlson,M.,Davies,E.,Wang,Z.,和W.Weiss,“差异化服务架构”,RFC 24751998年12月。

[RFC2675] Borman, D., Deering, S., and R. Hinden, "IPv6 Jumbograms", RFC 2675, August 1999.

[RFC2675]Borman,D.,Deering,S.,和R.Hinden,“IPv6巨型程序”,RFC 26751999年8月。

[RFC2743] Linn, J., "Generic Security Service Application Program Interface Version 2, Update 1", RFC 2743, January 2000.

[RFC2743]Linn,J.,“通用安全服务应用程序接口版本2,更新1”,RFC 2743,2000年1月。

[RFC3048] Whetten, B., Vicisano, L., Kermode, R., Handley, M., Floyd, S., and M. Luby, "Reliable Multicast Transport Building Blocks for One-to-Many Bulk-Data Transfer", RFC 3048, January 2001.

[RFC3048]Whetten,B.,Vicisano,L.,Kermode,R.,Handley,M.,Floyd,S.,和M.Luby,“一对多批量数据传输的可靠多播传输构建块”,RFC 3048,2001年1月。

[RFC3124] Balakrishnan, H. and S. Seshan, "The Congestion Manager", RFC 3124, June 2001.

[RFC3124]Balakrishnan,H.和S.Seshan,“拥堵管理者”,RFC31242001年6月。

[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002.

[RFC3261]Rosenberg,J.,Schulzrinne,H.,Camarillo,G.,Johnston,A.,Peterson,J.,Sparks,R.,Handley,M.,和E.Schooler,“SIP:会话启动协议”,RFC 3261,2002年6月。

[RFC3303] Srisuresh, P., Kuthan, J., Rosenberg, J., Molitor, A., and A. Rayhan, "Middlebox communication architecture and framework", RFC 3303, August 2002.

[RFC3303]Srisuresh,P.,Kuthan,J.,Rosenberg,J.,Molitor,A.,和A.Rayhan,“中间箱通信架构和框架”,RFC 33032002年8月。

[RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. Stevens, "Basic Socket Interface Extensions for IPv6", RFC 3493, February 2003.

[RFC3493]Gilligan,R.,Thomson,S.,Bound,J.,McCann,J.,和W.Stevens,“IPv6的基本套接字接口扩展”,RFC 3493,2003年2月。

[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, July 2003.

[RFC3550]Schulzrinne,H.,Casner,S.,Frederick,R.,和V.Jacobson,“RTP:实时应用的传输协议”,STD 64,RFC 35502003年7月。

[RFC3551] Schulzrinne, H. and S. Casner, "RTP Profile for Audio and Video Conferences with Minimal Control", STD 65, RFC 3551, July 2003.

[RFC3551]Schulzrinne,H.和S.Casner,“具有最小控制的音频和视频会议的RTP配置文件”,STD 65,RFC 3551,2003年7月。

[RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. Norrman, "The Secure Real-time Transport Protocol (SRTP)", RFC 3711, March 2004.

[RFC3711]Baugher,M.,McGrew,D.,Naslund,M.,Carrara,E.,和K.Norrman,“安全实时传输协议(SRTP)”,RFC 37112004年3月。

[RFC3738] Luby, M. and V. Goyal, "Wave and Equation Based Rate Control (WEBRC) Building Block", RFC 3738, April 2004.

[RFC3738]Luby,M.和V.Goyal,“基于波动和方程的速率控制(WEBRC)构造块”,RFC 3738,2004年4月。

[RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. Conrad, "Stream Control Transmission Protocol (SCTP) Partial Reliability Extension", RFC 3758, May 2004.

[RFC3758]Stewart,R.,Ramalho,M.,Xie,Q.,Tuexen,M.,和P.Conrad,“流控制传输协议(SCTP)部分可靠性扩展”,RFC 3758,2004年5月。

[RFC3819] Karn, P., Bormann, C., Fairhurst, G., Grossman, D., Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. Wood, "Advice for Internet Subnetwork Designers", BCP 89, RFC 3819, July 2004.

[RFC3819]Karn,P.,Bormann,C.,Fairhurst,G.,Grossman,D.,路德维希,R.,Mahdavi,J.,黑山,G.,Touch,J.,和L.Wood,“互联网子网络设计师的建议”,BCP 89,RFC 3819,2004年7月。

[RFC3851] Ramsdell, B., "Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.1 Message Specification", RFC 3851, July 2004.

[RFC3851]Ramsdell,B.,“安全/多用途Internet邮件扩展(S/MIME)版本3.1消息规范”,RFC 38512004年7月。

[RFC3852] Housley, R., "Cryptographic Message Syntax (CMS)", RFC 3852, July 2004.

[RFC3852]Housley,R.,“加密消息语法(CMS)”,RFC3852,2004年7月。

[RFC4301] Kent, S. and K. Seo, "Security Architecture for the Internet Protocol", RFC 4301, December 2005.

[RFC4301]Kent,S.和K.Seo,“互联网协议的安全架构”,RFC 43012005年12月。

[RFC4302] Kent, S., "IP Authentication Header", RFC 4302, December 2005.

[RFC4302]Kent,S.,“IP认证头”,RFC43022005年12月。

[RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", RFC 4303, December 2005.

[RFC4303]Kent,S.,“IP封装安全有效载荷(ESP)”,RFC 4303,2005年12月。

[RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", RFC 4306, December 2005.

[RFC4306]Kaufman,C.,“互联网密钥交换(IKEv2)协议”,RFC43062005年12月。

[RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram Congestion Control Protocol (DCCP)", RFC 4340, March 2006.

[RFC4340]Kohler,E.,Handley,M.和S.Floyd,“数据报拥塞控制协议(DCCP)”,RFC 43402006年3月。

[RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 2: TCP-like Congestion Control", RFC 4341, March 2006.

[RFC4341]Floyd,S.和E.Kohler,“数据报拥塞控制协议(DCCP)拥塞控制ID 2的配置文件:类似TCP的拥塞控制”,RFC 43412006年3月。

[RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 3: TCP-Friendly Rate Control (TFRC)", RFC 4342, March 2006.

[RFC4342]Floyd,S.,Kohler,E.,和J.Padhye,“数据报拥塞控制协议(DCCP)拥塞控制ID 3的配置文件:TCP友好速率控制(TFRC)”,RFC 43422006年3月。

[RFC4347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer Security", RFC 4347, April 2006.

[RFC4347]Rescorla,E.和N.Modadugu,“数据报传输层安全”,RFC 4347,2006年4月。

[RFC4654] Widmer, J. and M. Handley, "TCP-Friendly Multicast Congestion Control (TFMCC): Protocol Specification", RFC 4654, August 2006.

[RFC4654]Widmer,J.和M.Handley,“TCP友好多播拥塞控制(TFMCC):协议规范”,RFC 4654,2006年8月。

[RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R. Thayer, "OpenPGP Message Format", RFC 4880, November 2007.

[RFC4880]Callas,J.,Donnerhacke,L.,Finney,H.,Shaw,D.,和R.Thayer,“OpenPGP消息格式”,RFC 48802007年11月。

[RFC4960] Stewart, R., "Stream Control Transmission Protocol", RFC 4960, September 2007.

[RFC4960]Stewart,R.,“流控制传输协议”,RFC 49602007年9月。

[RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4 Reassembly Errors at High Data Rates", RFC 4963, July 2007.

[RFC4963]Heffner,J.,Mathis,M.,和B.Chandler,“高数据速率下的IPv4重组错误”,RFC 4963,2007年7月。

[RFC4987] Eddy, W., "TCP SYN Flooding Attacks and Common Mitigations", RFC 4987, August 2007.

[RFC4987]Eddy,W.“TCP SYN洪泛攻击和常见缓解措施”,RFC 4987,2007年8月。

[RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., and C. Pignataro, "The Generalized TTL Security Mechanism (GTSM)", RFC 5082, October 2007.

[RFC5082]Gill,V.,Heasley,J.,Meyer,D.,Savola,P.,和C.Pignataro,“广义TTL安全机制(GTSM)”,RFC 5082,2007年10月。

[STEVENS] Stevens, W., Fenner, B., and A. Rudoff, "UNIX Network Programming, The sockets Networking API", Addison-Wesley, 2004.

[STEVENS]STEVENS,W.,Fenner,B.,和A.Rudoff,“UNIX网络编程,套接字网络API”,Addison Wesley,2004年。

[TRILOGY] "Trilogy Project", <http://www.trilogy-project.org>.

[三部曲]“三部曲项目”<http://www.trilogy-project.org>.

[UPnP] UPnP Forum, "Internet Gateway Device (IGD) Standardized Device Control Protocol V 1.0", November 2001.

[UPnP]UPnP论坛,“互联网网关设备(IGD)标准化设备控制协议V1.0”,2001年11月。

Authors' Addresses

作者地址

Lars Eggert Nokia Research Center P.O. Box 407 Nokia Group 00045 Finland

芬兰诺基亚集团00045诺基亚研究中心邮政信箱407

   Phone: +358 50 48 24461
   EMail: lars.eggert@nokia.com
   URI:   http://people.nokia.net/~lars/
        
   Phone: +358 50 48 24461
   EMail: lars.eggert@nokia.com
   URI:   http://people.nokia.net/~lars/
        

Godred Fairhurst University of Aberdeen Department of Engineering Fraser Noble Building Aberdeen AB24 3UE Scotland

GoRead FelHurt阿伯丁大学工程系弗雷泽贵族大厦阿伯丁A24 24苏格兰

   EMail: gorry@erg.abdn.ac.uk
   URI:   http://www.erg.abdn.ac.uk/
        
   EMail: gorry@erg.abdn.ac.uk
   URI:   http://www.erg.abdn.ac.uk/