TCP Congestion Avoidance Algorithms

Introduction

The TCP congestion avoidance algorithm affects how fast the throughput is able to recover after packet loss. There's no ideal solution, and over time several approaches have been described.

The ByteBlower GUI implements a couple of the most popular ones, you can choose from the following list: “None”, “New Reno”, “New Reno with Cubic”, “SACK” and “SACK with Cubic”.

Regardless of the option, ByteBlower’s TCP implementation will always perform the basic congestion avoidance measures like exponential backoff and slow start. (See Wikipedia’s article on TCP congestion control for more information.).

None

When selecting “None” then no fast recovery algorithm will be used. It does, however, implement fast retransmit.

New Reno

“New Reno” is a loss recovery algorithm that improves recovery speed when multiple packets have been dropped.

SACK

“SACK” (short for “selective ack”) is an even faster recovery algorithm where the receiver can tell the sender which segments are missing. This algorithm can only be used if both sides support it. This is negotiated during connection establishment using the “SACK Permitted” option in the TCP header. If one of the sides does not support SACK then ByteBlower will use New Reno instead.

Cubic

Cubic” improves the TCP recovery speed on high-latency networks while still providing good performance on low-latency networks. It can be combined with SACK and New Reno (by selecting "SACK with cubic" or "New Reno with Cubic")

Sack with cubic

“SACK with cubic” is the option that should provide the best performance in most situations.