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.
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
wget tcp_wave-1.0.tar.gz tar xf tcp_wave-1.0.tar.gzYou should have three files in the extracted directory:
tcp-wave.cc
, tcp-wave.h
, and the reference script tcp-variants-comparison.cc
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:cp tcpwave-1.0/tcp-wave.* src/internet/model/
model/tcp-wave.cc
into the obj.source section, and model/tcp-wave.h
into the headers.source sestion../waf configure --enable-tests --enable-examples ./waf buildwhen completed, proceed to test 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
./waf configure --run tcp-variants-comparison
This script performs a simple bulk transfer between TCP sender and receiver through a p2p bottleneck channel.
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.
./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.
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.