跳到主要内容

1. 简介

1. 简介

我们首先描述 TCP 使用数据包丢弃作为拥塞指示的机制. 接下来, 我们说明通过向互联网基础设施加入主动队列管理 (Active Queue Management, AQM, 如 RED), 路由器可以在队列溢出之前检测拥塞, 因而不再局限于把数据包丢弃作为拥塞指示. 路由器可以转而在来自 ECN-capable 传输协议的数据包 IP 头部中设置 Congestion Experienced (CE) codepoint. 我们描述路由器何时设置 CE codepoint, 并描述使 TCP 具备 ECN 能力所需的修改. 对其他传输协议的修改 (例如不可靠单播或组播, 可靠组播, 其他可靠单播传输协议) 可以在这些协议开发并进入标准化流程时加以考虑. 本文档还描述在 IP 隧道内使用 ECN 的相关问题, 特别是在 IPsec 隧道内的问题.

本文档的一项指导原则是, 在可能的范围内, 这里规定的机制应当能够增量部署. 对增量部署原则的一项挑战是, 某些既有 IP 隧道与 ECN 的使用不兼容. 随着 ECN 部署, 不兼容的 IP 隧道必须升级, 以符合本文档中的规范.

本文档废止 RFC 2481 "A Proposal to add Explicit Congestion Notification (ECN) to IP", 后者将 ECN 定义为互联网社区的实验性协议. 本文档还更新 RFC 2474 "Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers" 中关于 IP 头部 ECN 字段的定义, 更新 RFC 2401 "Security Architecture for the Internet Protocol", 改变隧道模式头部构造中 IPv4 TOS 字节和 IPv6 Traffic Class 八位字节的处理以兼容 ECN 的使用, 并更新 RFC 793 "Transmission Control Protocol" 中关于 TCP 头部两个新标志的定义.

TCP 的拥塞控制和避免算法基于将网络视为黑盒的概念 [Jacobson88, Jacobson90]. 网络中的拥塞或其他状态由端系统探测网络状态来确定, 即逐步增加网络负载 (增加网络中未完成数据包的窗口), 直到网络发生拥塞并丢包. 对 TCP 承载的纯 best-effort 数据而言, 将网络视为 "black-box" 并将丢包作为网络拥塞指示是合适的, 因为这类数据对单个数据包的延迟或丢失很少敏感或完全不敏感. 此外, TCP 的拥塞管理算法纳入了 Fast Retransmit 和 Fast Recovery 等技术, 以便从吞吐量角度最小化丢包影响. 然而, 这些机制并不是为帮助那些实际上对一个或多个单个数据包的延迟或丢失敏感的应用而设计的. 交互式流量 (如 telnet, web 浏览, 音频和视频数据传输) 可能对丢包敏感 (特别是在使用 UDP 等不可靠数据传输协议时), 或对丢包后需要重传而导致的数据包延迟增加敏感 (在 TCP 提供的可靠数据传输语义中).

由于 TCP 通过逐步增加窗口大小直到遇到丢包来确定适当的拥塞窗口, 这会导致瓶颈路由器处的队列积累. 对多数不感知各个流所施加负载的路由器丢包策略而言 (例如队列溢出时的 tail-drop), 这意味着某些延迟敏感流的数据包可能被丢弃. 此外, 这类丢包策略会造成多个流之间的丢失同步.

主动队列管理机制在队列溢出之前检测拥塞, 并向端节点提供该拥塞的指示. 因此, 主动队列管理可以减少共享该队列的所有流量的不必要排队延迟. RFC 2309 [RFC2309] 讨论了主动队列管理的优点. 主动队列管理避免了队列溢出时丢包的一些不良性质, 包括多个流之间不希望出现的丢失同步. 更重要的是, 主动队列管理意味着具有拥塞控制机制的传输协议 (例如 TCP) 不必仅依赖缓冲区溢出作为唯一的拥塞指示.

主动队列管理机制可以使用几种方法之一向端节点指示拥塞. 一种方法是使用数据包丢弃, 这是当前实践. 然而, 主动队列管理允许路由器将排队或丢弃数据包的策略与指示拥塞的策略分离. 因此, 主动队列管理允许路由器使用数据包头部中的 Congestion Experienced (CE) codepoint 作为拥塞指示, 而不是仅依赖数据包丢弃. 这有可能降低丢包对延迟敏感流的影响.

互联网中存在一些中间盒 (例如防火墙, 负载均衡器或入侵检测系统), 它们会丢弃配置为协商 ECN 的 TCP SYN 数据包, 或用 RST 响应. 本文档规定了 TCP 实现可用于在存在这类设备时提供稳健连通性的过程.