XCP's scalability results from the fact that it requires no per-flow state in the router to calculate the feedback. Most router-assisted congestion control systems maintain per-flow information used to allocate the resources. XCP keeps very little information in the router, and this information is chosen to minimize both the amount of router state and the per-packet operations needed to update that state.
For generality, XCP divides the resource allocation function between two controllers: a congestion controller that ensures that flows use all available capacity, and a fairness controller that ensures that flows are allocated the capacity fairly. Most congestion control systems fail to make this division, much less to implement as two conceptually distinct systems. This division allows a clear exposition and implementation of two basic resource allocation functions in XCP. XCP sources send additional information about their current round-trip times and router-assigned throughput in each packet. XCP routers insert feedback into the packets that is interpreted by the sources.
Although XCP may be implemented for any transport protocol, however as an initial test it has been implemented in TCP. The next section gives details of the way XCP is implemented in ns.
Tom Henderson 2011-11-05