Compound TCP (CTCP) is a Microsoft algorithm that was introduced as part of the Windows Vista and Window Server 2008 TCP stack. It is designed to aggressively adjust the sender's congestion window to optimise TCP for connections with large bandwidth-delay products while trying not to harm fairness (as can occur with HSTCP). It is also available for Linux, as well as for Windows XP and Windows Server 2003 via a hotfix.[1]

Principles of operation

edit

Like FAST TCP and TCP Vegas, Compound TCP uses estimates of queuing delay as a measure of congestion; if the queuing delay is small, it assumes that no links on its path are congested, and rapidly increases its rate. Unlike them, it does not seek to maintain a constant number of packets queued.

Compound TCP maintains two congestion windows: a regular AIMD window and a delay-based window. The size of the actual sliding window used is the sum of these two windows. The AIMD window is increased the same way that TCP Reno increases it. If the delay is small, the delay-based window increases rapidly to improve the utilisation of the network. Once queuing is experienced, the delay window gradually decreases to compensate for the increase in the AIMD window. The aim is to keep their sum approximately constant, at what the algorithm estimates is the path's bandwidth-delay product. In particular, when queuing is detected, the delay-based window is reduced by the estimated queue size to avoid the problem of "persistent congestion" reported for FAST and Vegas. Thus, unlike TCP-Illinois and its precursor TCP Africa, Compound TCP can reduce its window in response to delay. This increases its fairness to Reno.[citation needed]

Descriptions of Compound TCP can be found in a conference paper,[2] an Internet-Draft,[3] and a US patent.[4]

Windows 2003 and XP x64

edit

A hotfix is available that adds CTCP support to 64 bit Windows XP and Windows Server 2003.[1]

The following registry key can be set to 1 to enable, or 0 to disable:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TCPCongestionControl

Windows Vista/2008/7

edit

CTCP is enabled by default in computers running beta versions of Windows Server 2008 and disabled by default in computers running Windows Vista and 7.

CTCP can be enabled with the command:

netsh interface tcp set global congestionprovider=ctcp 

or disabled with the command:

netsh interface tcp set global congestionprovider=none

To display the current setting for CTCP use:

netsh interface tcp show global

Parameter "Add-On Congestion Control Provider" will either have a value of "none" if CTCP is disabled or "ctcp" if it is enabled.

Windows 8 and up

edit

Since Windows 8, Windows uses PowerShell command Set-NetTCPSetting to modify the congestion control algorithm. Around 2018, Microsoft moved from CTCP to using CUBIC in Windows 10 and the Xbox, because it was seen as very delay sensitive and also worked poorly in data centre, where delay variation was an issue.

Linux

edit

CTCP was ported to Linux by Angelo P. Castellani[citation needed]. A patch derived from this was developed at Caltech, which included CTCP's TUning By Emulation (TUBE, and only released to researchers due to software patents.[5][better source needed] Since kernel version 2.6.17 the module has been incompatible and fails to compile due to kernel API changes.

See also

edit

References

edit
  1. ^ a b A hotfix that adds Compound TCP (CTCP) support to computers that are running Windows Server 2003 or Windows XP is available
  2. ^ Tan, K.; Song, J.; Zhang, Q.; Sridharan, M. (2006). "A Compound TCP Approach for High-Speed and Long Distance Networks". Proceedings IEEE INFOCOM 2006. 25TH IEEE International Conference on Computer Communications. pp. 1–12. doi:10.1109/INFOCOM.2006.188. ISBN 1-4244-0221-2. S2CID 1741788.
  3. ^ Tan, Kun; Sridharan, Murari; Bansal, Deepak; Thaler, Dave. "Compound TCP: A New TCP Congestion Control for High-Speed and Long Distance Networks". Ietf Datatracker.
  4. ^ "Compound transmission control protocol [US7577097B2]". Google Patents. March 22, 2005.
  5. ^ "Compound TCP in Linux". Archived from the original on August 2, 2008. Retrieved January 4, 2011.
edit