TCPLS vs MPTCP experiments
This repository is a fork of Quentin DeConinck's ACM SIGCOMM 2020 Tutorial on Multipath Transport Protocols. It contains topologies and scripts to reproduce results from the paper:
TCPLS: Modern Transport Services with TCP and TLS
Prerequisites and Setup
To benefit from the hands-on, you need recent versions of the following software installed on your local computer:
The remaining of this hands-on assumes that your host is running a Linux-based system. However, the commands to run on your local machine are only limited to interactions with vagrant.
To setup the vagrant box, simply cd
to this folder and run the following commands on your host
# The first `vagrant up` invocation fetches the vagrant box and runs the provision script.
# It is likely that this takes some time, so launch this command ASAP!
# The following `vagrant reload` command is required to restart the VM with the Multipath TCP kernel.
$ vagrant up; vagrant reload
# Now that your VM is ready, let's SSH it!
$ vagrant ssh
Once done, you should be connected to the VM. To check that your VM's setup is correct, let's run the following commands inside the VM
$ cd ~; ls
# iproute-mptcp mininet minitopo oflops oftest openflow picotls pox pquic
$ uname -a
# Linux ubuntu-bionic 4.14.146.mptcp #17 SMP Tue Sep 24 12:55:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Starting from now, we assume that otherwise stated, all commands are run inside the vagrant box.
The experiments
folder is shared with the vagrant box, such as the VM can access to this folder containing the experiment files through the /tcpls_experiments
folder.
The network experiments that we will perform in the remaining of this tutorial rely on minitopo which itself is a wrapper of Mininet. This repository is installed within the Virtual Machine during the provision phase.
How to run the TCPLS and MPTCP experiments?
We will use the tool mprun
that stems from minitopo's installation.
This tools allows to launch scripted experiments over a given topology,
doing:
mprun -t topo_file -x xp_file
Where topo_file
is the file containing the description of a network
scenario and xp_file
the one with the description of the experiment to
perform.
Generating TCPLS vs MTPCP results (Fig 11.)
So, in the VM, go into /tcpls_experiments/tcpls and let's start with the MPTCP aggregation experiment (Figure 11 Bandwidth Aggregation, comparing MPTCP with TCPLS). You'll run an experiment outputing two log files, one containing the transfert goodput, and one containing a tcpdump trace.
mprun -t topo_aggregation -x xp_mptcp_aggregation
Wait until it completes (~20 to 30 seconds). You'll get the file
client_tcpdump.log
. move this file to another directory. You'll need
to convert it to the right format for the plot script, using
convert_tcpdump.py.
Name the coverted file mptcp_client_tcpdump_pruned_aggregation.log
if
you want a drop in replacement for the global plot script (plots.sh,
calling all .py plot scripts). The name of the goodput file generated is
written in xp_mptcp_aggregation (should be
mptcp_client_goodput_aggregation.log
).
Now to generate TCPLS' result, first deactivate MPTCP on the Vagrant box:
sysctl net.mptcp.mptcp_enabled=0
Then launch the TCPLS bandwidth aggregation experiment:
mprun -t topo_aggegation -x xp_tcpls_aggregation
Again, that will spin the experiment in the background and give you a
client_tcpdump.log
and a goodput .log file. The tcpdump one needs also
to be converted.
Generating Recovery Stress-test (Fig. 9) results
Let's start with MPTCP first. Enable MPTCP back :)
sysctl net.mptcp.mptcp_enabled=1
Then you may run the following automated experiment:
mprun -t topo_two_client_paths_two_server_paths -x xp_mptcp_drop
This script will also output a client_tcpdump.log to convert, and a goodput file.
Now disable MPTCP, and do the same for TCPLS:
mprun -t topo_two_client_paths_two_server_paths -x xp_tcpls_drop
In total, you should get 4 .log files, and the tcpdump ones need to be converted using convert_tcpdump.py before using the plot script.