# TCP Westwood

TCP Westwood (TCPW) is a sender-side-only modification to TCP New Reno that is intended to better handle large bandwidth-delay product paths (large pipes), with potential packet loss due to transmission or other errors (leaky pipes), and with dynamic load (dynamic pipes).
TCP Westwood relies on mining the ACK stream for information to help it better set the congestion control parameters: Slow Start Threshold (ssthresh), and Congestion Window (cwin). In TCP Westwood, an "Eligible Rate" is estimated and used by the sender to update ssthresh and cwin upon loss indication, or during its "Agile Probing" phase, a proposed modification to the well-known slow start phase. In addition, a scheme called Persistent Non Congestion Detection (PNCD) has been devised to detect persistent lack of congestion and induce an Agile Probing phase to expeditiously utilize large dynamic bandwidth.
The resultant performance gains in efficiency, without undue sacrifice of fairness, friendliness, and stability have been reported in numerous papers that can be found on The TCP WESTWOOD Home Page. Significant efficiency gains can be obtained for large leaky dynamic pipes, while maintaining fairness. Under a more appropriate criterion for friendliness, i.e. "opportunistic friendliness", TCP Westwood is shown to have good, and controllable, friendliness.

## Development

The main idea of Westwood TCP, which is an end-to-end bandwidth estimation for setting control windows after congestion, was proposed by Saverio Mascolo. He came out with the idea after reading the chapter on TCP congestion control in the book Data Networks by Larry Peterson. The first implementation of TCP Westwood in ns2 was done at University of California, Los Angeles (UCLA) in 1999. The name "Westwood" was chosen by S. Mascolo as due homage to the home of UCLA where he was a visiting researcher at that time. Main collaborators were prof. Mario Gerla, Dr. Claudio Casetti and Dr. Medy Senadidi.

## TCP Westwood plus

TCP Westwood+ is an evolution of TCP Westwood. TCP Westwood+ is a sender-side only modification of the TCP Reno protocol stack that optimizes the performance of TCP congestion control over both wireline and wireless networks. TCP Westwood+ is based on end-to-end bandwidth estimation to set congestion window and slow start threshold after a congestion episode, that is, after three duplicate acknowledgments or a timeout. The bandwidth is estimated by properly low-pass filtering the rate of returning acknowledgment packets. The rationale of this strategy is simple: in contrast with TCP Reno, which blindly halves the congestion window after three duplicate ACKs, TCP Westwood+ adaptively sets a slow start threshold and a congestion window which takes into account the bandwidth used at the time congestion is experienced. TCP Westwood+ significantly increases throughput over wireless links and fairness compared to TCP Reno/New Reno in wired networks.
When Saverio Mascolo returned to Italy and "his evolution of Westwood TCP" was named Westwood+. The main novelty of Westwood+ was the algorithm used to estimate the available bandwidth end-to-end. In fact, it was soon discovered that the Westwood bandwidth estimation algorithm did not work well in the presence of reverse traffic due to ack compression. This phenomenon was explained in terms of aliasing effects. The new version Westwood+ was implemented for the first time in the kernel of Linux 2.2 by Roberto Ferorelli and in the kernel of Linux 2.4 and 2.6 by Angelo Dell'Aera, both working at Politecnico di Bari as undergraduate students in 2003 and 2004.