For our first update, we have currently created a server and a client with a simple UI. The application
can send text files from sender to receiver on different devices over the same network via TCP. We are
currently working on adding UDP to the application, as well as functionality to send data over different
networks on separate devices. For this project, our goal is to compare between UDP/TCP/QUIC, and if time
permits we would like to add different congestion control algorithms to see how file transfer performs. We will
be using graphs such as line graphs or scatter plots to observe the changes, such as comparing speeds,
delays, capacity of data, etc... between the different protocols.
Overview
For this project, our goal is to compare the performance of UDP, TCP, and QUIC, and if time permits, we would like to add different congestion control algorithms to see how file transfer performs. We will be using graphs such as line graphs or scatter plots to observe the changes, such as comparing speeds, delays, capacity of data, file size, etc, between the different protocols. By analyzing the different scenarios, such as speed, delay, or size, we can assess the strengths and weaknesses of each protocol under different conditions.
Progress
With the application we have right now, we have been able to successfully transfer files across different devices of various sizes, as well as any file type. To visualize our results, we will be generating graphs, such as line graphs, to display the time it took for the application to complete the file transfer with certain protocols.
Challenges
One of the challenges we encountered was translating theory from class into working code. While we have in-depth knowledge of how TCP and UDP work, implementing them requires deeper knowledge and more research. In addition, another hurdle we overlooked was NAT blocking our connection. We had to think and explore different ways to bypass the NAT restrictions at UVic, but what we came up with was just using a mobile hotspot for now. We have also realized that there could be human error in our implementation.
During our testing of TCP and UDP, we found that TCP was much faster than UDP. From our research, it seems that locahost and smaller networks have optimisations for TCP compared to UDP. We hope that by using Pico Net or another controlled environment, we can measure this more and see if UDP is slower due to these optimisations or if our implementation is what is slowing down the process.
Next Steps
Moving forward, we would like to focus more on optimizing UDP and implementing QUIC. Once we have fully developed our protocols, we would like to test out the protocols under different network conditions, which will give us a clear understanding of which protocol adapts better in which scenarios. To achieve this, we are hoping to use PicoNet for our controlled environment.
Figures
The Figures below illustrate our first test of our application. These times were collected using a mobile hotspot from a phone as our network to hopefully avoid any delay or optimisations caused by a traditional router. We also avoided localhost to give more real world authenticity to our results.
TCP
UDP
User Interface (Tkinter)
For the last two weeks, we have been focusing on getting Pico Lab and QUIC running to start collecting data. QUIC is connecting, but we still have some minor problems with sending. We plan to figure these out this weekend as we would like to compile our tests. As for Pico Lab, we are having difficulties getting the program to run a newer version of Python, which supports TKinter, which we are using for our frontend interface. We started by trying to tear apart Pico Lab, but the docker container makes this a more complex process than we thought. Currently, we are looking into other options than Pico Lab, such as Pumba. Pumba will allow us to use docker containers to emulate two computers and a network. After this, it is easy to use Pumba to introduce delays. The docker containers are made and running, but we have problems getting them to display TKinter Gui. We hope to have this running soon and start testing.