Project 1
An in-depth analysis of congestion control algorithms
In this project, the goal is to compare at least 3 congestion control algorithms (CCAs). TCP Reno, and CUBIC need to be implemented and be compared with each other as well as with BBR. You will compare the CCAs through experiments on Wide-Area networks. A fourth CCA can be implemented and compared with the other three CCAs as a bonus.
Implementation
The two (or three, if you are going for the bonus) CCAs can be implemented using simple socket-based communication. The algorithms can be coded in Python or C/C++. Docker-based testing scripts are optional. However, it is recommended that you make some automated testing scripts to verify that your CCAs are working as expected before you move on to experimenting on FABRIC.
You can simulate packet loss a few ways such as including a function on the server side that randomly drops an incoming packet according to an input parameter. Another way could be to have a proxy server that the client talks to and this proxy server either drops the packet or forwards it to the actual server.
Experiments
The experiments would be performed on FABRIC testbed. Through FABRIC, it is possible to run these experiments on servers that are far apart, geographically. You need to use your own implementation of the two CCAs for these experiments. BBR can either be used through the built-in implementation in Linux or you can also go through their GitHub repository and set up BBR through there.
For the experiments, select at least two nodes (a client and a server) that are some distance apart. Select a third node that is further apart from the server as compared to the first client. Mention the node placement and average latency and the standard deviation of latency between the two clients and the server.
Using the first client and server node, conduct experiments by measuring throughput, latency, and congestion window sizes while varying packet loss between the values 0% (i.e., no packet loss), 1%, 5%, 10%, and 50%.
Repeat the experiments with the other client to see if that affects the results. If this client is further away from the server as compared to the first client, then on average the latency would be greater for this client-server pair. We are trying to see the effect of this. You may perform additional experiments for more insight into this by adding a third client in the network or emulating latency, such as by adding a delay on server side. However, this is not required as part of the project.
Create graphs and/or tables, as appropriate for the data that you collect from the experiments. Average out results and include the average as well as standard deviation.
Report
You need to submit a final report for the project. The report would include (but is not limited to):
· Your hypotheses i.e., what do you expect to see before you run the experiments
· Your experimental set-up i.e., node placement, average latencies, etc.
· Experimental results such as data and/or graphs
· Explanation of results.
· Whether your hypotheses were validated or not
· Brief overview of your CCA implementation such as Data Structures used, Packet Headers, any challenges, improvements that you could make, etc.
It is possible that for some of the experiments, you get results that seem odd. You should still attempt to explain what happened there.
The report does not have a page limit. However, 3-4 pages are recommended. Please be concise. Please explain your experiment results.
A template could be as follows:
Title:
Your name, email, and Pitt ID
Experiment setup: also briefly explain these baseline algorithms;
Experiment results and explanation:
Final Submission and grading:
Submit the following for the final submission:
· TCP Reno and CUBIC implementation code (required)
· Data collected (required)
· Report (required)
· CCA testing scripts (optional)
· Bonus CCA code (optional)
The final grading would be as follows:
· TCP Reno implementation -- 25%
· TCP CUBIC implementation -- 25%
· Report (includes experiments and data) -- 50%.
· Bonus – 10%
Deadline: by the end of 11/10/2023
Resources
Samples of how such experiments can be performed:
· Link 1
· Link 2
BBR:
A list of some algorithms for the bonus:
· link