During the Fall ‘22 semester, I took a class on the basics of computer networks. This page aims to provide insight on the motivation, process, and results for two of the larger assignments I completed during the course.
For each project, I was given a broad outline of a topic I should write a report on, and a list of steps on how to collect data for the report. For data collection, I learned to use a variety of tools, including but not limited to Wireshark,
rvictl, Ubuntu, and UTM (for creating VMs on the new silicon chip Apple laptops). I wrote some Python scripts to make this process easier which can be found here.
I researched and collected data for a handful of different topics such as TCP/UDP transfer speed, TCP flavors, RTS/CTS signals, and variable/constant bitrates. An in-depth analysis and discussion of these topics can be found in their respective papers.
The part of the project that I found the most interesting was collecting data on the network in real time. A lot of the project-based assignments that I’ve come across are somewhat isolated — you develop a small codebase on your own, and then it runs on your machine on a static and local copy of the data. While this is a great way to learn, I think it misses some aspects of the big picture. Analyzing the network data in real time was cool because it felt like my code was observing something far beyond itself. I have a lot of respect and admiration for the researchers who created the standards for these protocols to run efficiently on such a large scale.
Project-wise, I believe that there is more to be done which could improve the quality of these reports. There are some siginificant errors in Project 2 which affected the average throughput calculations, and my measurements for TCP channels in Project 3 were outright wrong. In Project 2, I tried to mention possible sources of error and bias and how I would correct for it in the future. I think those ideas are a good starting point and I would definitely encorporate stricter rules on how I collect data and correct for biases if I were to do this again.
That being said, I don’t believe I will revisit these projects as they are now. My primary takeaway from these reports was learning how to use Wireshark, understanding the packet/traffic flow graphs, and utilizing command line tools and scripts. Redoing these projects would not teach me as much as they did the first time around. However, I am interested in learning how to use a Raspberry Pi, and I recently learned that you can install Wireshark on a Pi. It could be an interesting thing to work on in the future, maybe as a long-term data collection project, but I’d have to get my hands on a Pi first…