The paper introduces TCP Vegas and compares it against TCP Reno in terms of throughput and retransmission rate. The results show that Vegas makes uses of available bandwidth and avoids congestion (indeed avoids creating congestion) more effectively than Reno. Furthermore, these results are not at the expense of other non-Vegas TCP flows. TCP Vegas achieves these results even when all the flows are TCP Vegas flows.
The major contributions of Vegas are a new algorithm for determining retransmission, a new measurement for detecting (and thus avoiding) congestion, and a modified slow start mechanism that avoids overrunning bottleneck router buffers.
The new retransmission algorithm uses system clock timestamps to estimate RTTs instead of the BSD-based 500ms “ticks”. This means RTT estimates are more accurate. Further, Vegas uses ACKs to check if a timeout has occurred instead of waiting for a “tick” to pass. Lastly, instead of waiting for n (3) duplicate ACKs to be received before retransmitting, Vegas retransmits after the RTT has been exceeded.
The second contribution is the new congestion avoidance mechanism. Using a base RTT and accurately measuring the change in RTTs between segment sends and ACKs, Vegas can calculate an expected and actual throughput. Vegas then defines two thresholds, a lower and upper threshold. By adjusting the send window size to keep the throughput between the lower and upper thresholds, Vegas can keep between 1 and 3 segments in the bottleneck router’s buffer full. This means Vegas can effectively utilize available bandwidth without overrunning the bottleneck router’s buffer.
Lastly, Vegas uses the expected and actual throughput measurements to avoid overrunning the bottleneck router’s buffers during slow start. Instead of doubling the window size every RTT, Vegas doubles every other RTT. Every other RTT, it measures the throughput. If the throughput begins to decrease, Vegas switches to linear growth mode to avoid causing congestion in the network.
It seems clear from the results presented that TCP Vegas is a better implementation of TCP than TCP Reno. However, it would also seem that TCP Vegas is considerably more difficult to implement. The algorithms for the improved features are more complex than even TCP Reno (which is by no means simple).
I’d like see how quality of service implementations/mechanisms work with Vegas. Because Vegas is very adept at consuming available bandwidth without causing congestion, I expect that some QoS implementations will suffer because of the lack of “slack” bandwidth now available.