The eXplicit Control Protocol (XCP) was released as an RFC draft on October 17, 2004. In this paper we have looked into the theory behind the development of XCP. In addition, we created a working Linux implementation of XCP as part of our investigation of theprotocol. This paper also discusses the performance results we got by using our implementation of XCP, and compares them to TCP and other papers regarding XCP.
The XCP protocol has been developed as a new way to improve the congestion control, bandwidth utilization and congestion avoidance algorithm in TCP. In contrast to most other enhancements of the TCP protocol, XCP does not try to be backward compatible with existing TCP implementations. XCP introduces a new layer in the TCP/IP stack, which is used to add an XCP header in front of the regular TCP packet. The main difference between TCP and XCP is that an XCP stream allows routers to explicit set how much bandwidth to allow in the XCP packets passing through them. By using explicit feedback from the network, XCP promises to prevent queue buildup in routers and packet drops caused by congestion. XCP allows the use of more aggressive algorithms, than in use by TCP, in order to quickly distribute any available bandwidth amongst XCP-enabled TCP-flows.
Our Linux implementation was based on the original XCP RFC draft. We implemented XCP as a separate protocol, situated between TCP and IP in the Linux kernel. Our goal was to create an implementation of XCP that would run without the need to change the existing TCP or IP code. By creating the XCP protocol as a Linux kernel module, we managed to achieve this goal. However, the very nature of XCP made implementing it as a separate protocol difficult, as the XCP protocol needed intimate knowledge of various TCP concepts; such as the congestion window and TCP-flows.
Simulations have shown XCP to be able to prevent queue buildup in routers, while at the same time maximizing throughput. Our tests managed to confirm these results, showing that XCP can be superior to TCP in some environments. However, our tests also show that XCP is vulnerable to a number of common scenarios, where it fails to work as intended. Scenarios such as half-duplex links, bursty applications and incorrect router setup make the XCP routers return invalid feedback back to the XCP hosts. Incorrect feedback from the XCP routers can lead to queue build-up, packet drops and oscillatorybehavior, which are the same problems as XCP set out to solve.