TCP Startup

Preliminary experiments were aimed at analysing the startup behavior of the Linux and BSD variants of Newreno TCP on a 2 Mb/s satellite link without errors. First results show that real-world TCP stack implementations behavebetter than simulation shows. Here is a short description of the issue.

The experiments were done over the CNIT Skyplex platform. The channel hasshared access from 24 earth stations (the CNIT satellite network), an overall gross bandwidth of 2 Mb/s, an observed net bandwidth of 1.2 Mb/s, link latency of around 420 ms, and a link buffer of 1.5 MB. This is presumably used by the earth station for buffering the input traffic when requesting more bandwidth to the channel access manager. On this system, we made simple experiments with Linux with and without Sack, and more thourough experiments with Linux and BSD without Sack.

Experiments with Linux exhibit bad performance on the first connection, much better on subsequent ones, because the TCP status is cached between subsequent connections. However, performance is better than expected from simulation even on the first connection, for yet unknown reasons. Moreover, simulation and measurements are not readily comparable, as the satellite link size varies during the connection setup because of the dynamic bandwidth allocation performed by Skyplex.

Experiments with BSD exhibit good performance on all connections, because recent BSD kernels do an estimation of the bandwidth*delay product, and prevent the congestion window from exceeding the estimated value. This method produces a slight underutilisation of the satellite channel, while providing excellent startup performance even on the first connection.

We modified the ns-2 FullTcp implementation in order to be able to switch between the "slow but steady" and "impatient" variants of Newreno and prepared web pages to illustrate the patches. We look forward to publishing these patches and proposing them to the ns-2 community for inclusion in the simulator's official version.

For the TCP startup activity, you can find the documentation listed below:

Measurements

NS2 simulations