PNG-24 image with transparency
PNG-24 image with transparency

Clean Slate Research Projects

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

10.) Rate Control Protocol

Started: May 2006


Rate Control Protocol (RCP) is a new congestion control algorithm designed for fast download times (i.e. aka user response times, or flow-completion times). Whereas other modifications to TCP (e.g. STCP, Fast TCP, XCP) are designed to work for specialized applications that use long-lived flows (scientific applications and super computer centers), RCP is designed for the typical flows of typical users in the Internet today. For example, a mid-size flow in the Internet today contains 1000 packets and TCP typically makes them last 10x longer than need-be (XCP is even worse). RCP makes flows finish close to the minimum possible, leading to a perceptible improvement for web users, distributed computing, and distributed file-systems. We believe RCP is the only congestion control algorithm to do this. The main properties of RCP are:

  • Typical Internet flows will see 10 times faster download times than TCP and 30 times faster than XCP. Winners are the greater than 90% of sessions that never leave slow-start today.
  • Efficiently uses high bandwidth-delay product networks such as the long haul optical links
  • Provably stable network independent of link-capacities, round-trip times and number of flows
  • Flows are easy to police, to ensure they adhere to congestion control (not generally possible with other schemes)
  • Network operators can give preference (or weighted preference) to some flows/aggregates.


RCP has two components: (1) End-host congestion control layer that sits between IP and TCP/UDP. During introduction, the end-host could adapt by testing for RCP at each end and along the path, falling back to TCP if need-be. (2) Each router maintains a single fair-share rate per link. Each packet carries the rate of the bottleneck link. For each packet, the router compares the two values. If the router's fair-share rate is smaller, it overwrites the value in the packet. This way, the source learns the fair-share rate of bottleneck link. It is simple, requires a very minor change to switches/routers, requires no per-flow state or per-packet computation.


Nick McKeown
(Faculty) Faculty Director, Clean Slate Program, Associate Professor of EE and CS

Nandita Dukkipati
(Student) Electrical Engineering



This research is funded in part by NSF under ITR award ANI-0331653. RCP is part of the 100x100 Clean Slate Design Project.


  • We have a RCP implementation in ns-2.28. Download RCP files rcp-v1.tar.gz (also includes sample .tcl files for RCP, TCP and XCP used in RCP papers).
  • Glen Gibb (EE, Stanford) is implementing the RCP router module in hardware on NetFPGA.
  • We have the RCP end-host implementation in the Virtual Network System (VNS) and are working on a Linux implementation.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10