TCP Wave

Introduction

TCP Wave is a new transport protocol designed as alternative to the standard TCP versions for current broadband networks where a set of challenging communication aspects can impair performance: i.e. large latency links, handovers, and dynamic network switching. A full protocol algorithm and specification is presented [1].

The performance has been assessed under different network and application configurations in [2] [3]. TCP Wave envisages sender-side only modifications, guaranteeing fairness when sharing the bottleneck with standard TCP flows. From the design point of view, TCP Wave is based on burst transmission paradigm. Sender sends packets in bursts at time intervals scheduled by an internal timer (TxTime). This approach allows the TCP receiver triggering acknowledgement (ACK) in trains, which carry information about the network congestion (from RTT measurements) and the link capacity (by measuring the ACK train dispersion). The TCP Wave sender relies on the ACK-based measurements to update its internal TxTime to achieve the optimal transmission rate. This approach allows TCP Wave to overcome the ACK-clocked window-based transmission followed by other TCP variants. in fact, decoupling of the packet transmission from the experienced RTT, allows TCP Wave sender to have a proactive rate control with a fast tracking into the available end-to-end capacity.

TCP Wave code is available for ns-3 discreet network simulator (ver. 3.23), its code is not yet implemented and validated on later versions of ns-3.

ns-3 installation

  1. Download the ns-3 allinone-3.23 source code and extract it:
  2. wget http://www.nsnam.org/release/ns-allinone-3.23.tar.bz2
    tar xf ns-allinone-3.23.tar.bz2
    cd ns-allinone-3.23
  3. Download the latest TCP Wave source code, and extract it:
  4. wget  tcp_wave-1.0.tar.gz
    tar xf tcp_wave-1.0.tar.gz
    You should have three files in the extracted directory: tcp-wave.cc, tcp-wave.h, and the reference script tcp-variants-comparison.cc
  5. Copy both tcp-wave.cc and tcp-wave.h files from TCP Wave folder into the internet model of ns-3, where other TCP files are placed:
  6. cp tcpwave-1.0/tcp-wave.* src/internet/model/
  7. open the wscript file of internet module, (/src/internet/wscript) in your favourite text editor to include the tcp-wave source files.
    Add model/tcp-wave.cc into the obj.source section, and model/tcp-wave.h into the headers.source sestion.
  8. Now configure and build ns-3 including tcp-wave code. from the ns-allinone-3.23 directory, run:
  9. ./waf configure --enable-tests --enable-examples
    ./waf build
    when completed, proceed to test the reference script.

Run the reference script

TCP Wave can be added to any ns3 script like any other TCP variants using GetTypeId. i.e.:

Config::SetDefault("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpWave::GetTypeId()));
To validate the installation, you can run our reference script tcp-variants-comparison.cc
by copying it to the scratch directory, then runnning it using:
./waf configure --run tcp-variants-comparison

This script performs a simple bulk transfer between TCP sender and receiver through a p2p bottleneck channel.

Simulation Results

grep can be used to simply filter output messages related to TCP Wave and study its evolution, i.e.:

./waf configure --run tcp-variants-comparison 2>&1 | grep TCPW

The script outputs some debug messages for the important values of TCP traffic, i.e. the transmitted burst, rate, TxTime, received ACK, and the measured RTT.

Expected output from reference script

./waf configure --run tcp-variants-comparison 2>&1 | grep TCPW
10.2969 [node 1] TCPW BURST from: 2116801 to:
2122401 bytes  mode = tracking 
10.2969 [node 1] TCPW TX-TIME= 28 ms 
10.2969 [node 1] TCPW TX-RATE: 1.56011e+06 bit/s 
10.2987 [node 1] TCPW ACK seq# 2096641 type= single
10.2987 [node 1] TCPW RTT = 111 ms 
10.2987 [node 1] TCPW ACK seq# 2096641 type= single
10.2987 [node 1] TCPW RTT = 111 ms 
10.3036 [node 1] TCPW ACK seq# 2097761 type= single
10.3036 [node 1] TCPW RTT = 116 ms 
10.3036 [node 1] TCPW ACK seq# 2097761 type= single
10.3036 [node 1] TCPW RTT = 116 ms 
10.3085 [node 1] TCPW ACK seq# 2098881 type= single
10.3085 [node 1] TCPW RTT = 121 ms 
10.3085 [node 1] TCPW ACK seq# 2098881 type= single
10.3085 [node 1] TCPW RTT = 121 ms 
10.3134 [node 1] TCPW ACK seq# 2100001 type= single
10.3134 [node 1] TCPW RTT = 126 ms 
10.3134 [node 1] TCPW ACK seq# 2100001 type= single
10.3134 [node 1] TCPW RTT = 126 ms 
10.3183 [node 1] TCPW ACK seq# 2101121 type= single
10.3183 [node 1] TCPW RTT = 104 ms 
10.3183 [node 1] TCPW ACK seq# 2101121 type= single
10.3183 [node 1] TCPW RTT = 104 ms 
10.3232 [node 1] TCPW ACK seq# 2102241 type= single
10.3232 [node 1] TCPW RTT = 109 ms 
10.3232 [node 1] TCPW ACK seq# 2102241 type= single
10.3232 [node 1] TCPW RTT = 109 ms 
10.3256 [node 1] TCPW BURST  from: 2122401 to:2128001 bytes  mode = tracking 
10.3256 [node 1] TCPW TX-TIME= 28 ms 
10.3256 [node 1] TCPW TX-RATE: 1.57563e+06 bit/s 
10.3281 [node 1] TCPW ACK seq# 2103361 type= single
10.3281 [node 1] TCPW RTT = 114 ms 
10.3281 [node 1] TCPW ACK seq# 2103361 type= single
10.3281 [node 1] TCPW RTT = 114 ms 
10.333 [node 1] TCPW ACK seq# 2104481 type= single
10.333 [node 1] TCPW RTT = 119 ms 
10.333 [node 1] TCPW ACK seq# 2104481 type= single
10.333 [node 1] TCPW RTT = 119 ms 
10.3379 [node 1] TCPW ACK seq# 2105601 type= single
10.3379 [node 1] TCPW RTT = 124 ms 
10.3379 [node 1] TCPW ACK seq# 2105601 type= single
10.3379 [node 1] TCPW RTT = 124 ms 
10.3429 [node 1] TCPW ACK seq# 2106721 type= single
10.3429 [node 1] TCPW RTT = 102 ms 
10.3429 [node 1] TCPW ACK seq# 2106721 type= single
10.3429 [node 1] TCPW RTT = 102 ms 
10.3478 [node 1] TCPW ACK seq# 2107841 type= single
10.3478 [node 1] TCPW RTT = 107 ms 
10.3478 [node 1] TCPW ACK seq# 2107841 type= single
10.3478 [node 1] TCPW RTT = 107 ms 
10.3527 [node 1] TCPW ACK seq# 2108961 type= single
10.3527 [node 1] TCPW RTT = 112 ms 
10.3527 [node 1] TCPW ACK seq# 2108961 type= single
10.3527 [node 1] TCPW RTT = 112 ms 
10.354 [node 1] TCPW BURST  from: 2128001 to: 2133601 bytes  mode = tracking

You can now use TCP Wave as replacement of ns-3 standard TCP to run your applications.

Using the code for your research:

The source code and working principles of TCP Wave are designed and developed by Satellite Multimedia Group of university or Rome "Tor Vergata". You must keep within the source code the original copyright notes, including reference to our research group and the contact author roseti .at. ing.uniroma2.it in all extension/modification that will be done. Please, in case of achieving pubblications in journals and/or conferences, cite [1] as reference for your work. TCP Wave code was based on ns-3 TCP Noordwijk code by N. Patriciello.

References

[1] Abdelsalam, A., Luglio, M., Roseti, C. Zampognaro, F., 2017. TCP Wave: A new reliable transport approach for future Internet, Computer Networks, 112, pp.122-143, doi: 10.1016/j.comnet.2016.11.002

[2] Abdelsalam, A., Luglio, M., Roseti, C., Zampognaro, F., A burst-approach for transmission of TCP traffic over DVB-RCS2 links, IEEE 20th International Workshop on Computer Aided Modelling and Design of Communication Links and Networks (CAMAD), 7-9 September 2015, University of Surrey, Guildford, UK, September, 2015, pp. 175-179, DOI: 10.1109/CAMAD.2015.7390504.

[3] A. Abdelsalam, M. Luglio, C. Roseti, F. Zampognaro., TCPWave Resilience to Link Changes - A New Transport Layer Approach Towards Dynamic Communication Environments, 13th International Joint Conference on e-Business and Telecommunications (DCNET 2016), Lisbon, Portugal, July 2016, DOI: 10.5220/0005966700720079.