I took the Computer Networks course in the OMSCS program.
Overall
This course is one of the popular offerings in OMSCS, and I enrolled with the expectation of gaining in-depth knowledge about networks. In modern society, networks are essential for nearly everything, so it was anticipated that the knowledge from this course would be beneficial in professional settings. According to review sites, the course’s difficulty level was not particularly high, but there were comments about the content being monotonous and redundant. Indeed, the course was primarily text-based, and there were no easily understandable explanatory videos, which made the weekly workload higher than I expected.
Content
Grades were determined through five assignments, a midterm exam, a final exam, and weekly quizzes. Each week, we progressed through content divided by themes, and there were quizzes that tested our understanding of the material covered. I have summarized the course content and exam preparation below. The assignments primarily involved implementing and simulating algorithms used in networking, typically using Python. Additionally, there was an extra credit assignment related to Internet-Wide Events, but I did not pursue this opportunity this time.
CS 6250 Computer Networks Exam 1
CS 6250 Computer Networks Exam 2
Assigment
HW0 (Optional) Simulating Networks
The results of this assignment are not evaluated, but it serves to learn how to use Mininet for network simulation, which will be utilized in future assignments. Open vSwitch was used for emulating network devices. By defining routers and switches in code, I was able to create a virtual network on a Linux OS and replicate its behavior. The goal of the assignment was to reproduce a specified network topology, and I was able to achieve a configuration that mimicked a data center on a single machine. In practical applications such as SDN Firewall and BGP Hijacking, I configured the firewall based on this setup, which allowed for a smoother implementation.
Introduction to Mininet
Open vSwitch
HW1 Spanning Tree Protocol for Network Switches
This assignment involved implementing the Spanning Tree Protocol, an algorithm that prevents loops in Layer 2 switches. The implementation of the algorithm itself did not take much time; however, during the submission tests, it was tested against a non-public network topology, and I spent a considerable amount of time fixing edge cases to pass these tests. It was challenging because I was unaware of which test cases were failing, making it difficult to identify the issues.
HW2 Distance Vector Routing
In this assignment, I implemented Distance Vector Routing, used in the Routing Information Protocol (RIP), which is a type of Interior Gateway Protocol (IGP) for routing within the same Autonomous System (AS). This algorithm solves the Bellman-Ford equation to find the shortest path. Since it is a distributed algorithm like the Spanning Tree Protocol, the key was how switches and nodes share information. As a result, the concepts were quite similar to those in the Spanning Tree Protocol. Again, it took a lot of time to pass the test cases that used a non-public network topology.
HW3 SDN Firewall
Unlike the previous assignments focused on algorithm implementation, this assignment aimed to understand Software Defined Networks (SDN). Using a switch with OpenFlow enabled, I implemented a firewall. OpenFlow is widely used as a Southbound API between the data plane and control plane in SDN. I utilized the POX controller, an open-source OpenFlow SDN controller based on Python, to control traffic. Specifically, I created a Flow Modification object to add rules for handling traffic to the OpenFlow controller. Additionally, I defined a Match object with specific IP addresses and attached it to the Flow Modification object. If the input packet matches the Match object, the corresponding action is executed. By defining this in code, I could alter the behavior of the network devices, which provided a glimpse into the world of SDN.
pox-doc
Performance Evaluation of POX Controller and OpenFlow in Software Defined Networks using Mininet Emulator
HW4 BGP Hijacking
BGP Hijacking is an attack method that maliciously advertises routes in BGP to achieve an attacker’s intended routing. I replicated this attack by running the BGP protocol locally. Quagga was used to configure the BGP router, and for each AS, bgpd was used as the talking BGP, while zebra was utilized for Linux kernel routing configuration. This assignment was based on a demo of BGP Hijacking in Mininet.
BGP Path Hijacking Attack Demo
[Setting Up BGP with Quagga](https://komeiy.hatenablog.com/entry/2014/11/23/014757#google
Sample code for BGP Hijacking was provided based on a sample topology, which I used to implement BGP Hijacking in a more complex specified topology. Once I understood how the sample code operated, the implementation itself was not particularly difficult.
HW5 BGP Measurements (BGPM)
The purpose of this assignment was to analyze BGP data using BGPStream to deepen my understanding of the BGP protocol. As internet usage has expanded in recent years, analyzing the data generated daily has proven effective for understanding it. In this instance, I used PyBGPStream, the Python interface for BGPStream, for the analysis. The BGP data analyzed was quite large in total, giving me the impression that it was akin to big data analysis challenges. By handling BGP announcement data, I believe my understanding of the BGP protocol has significantly improved.
BGPStream
Additionally, the paper proposing BGPStream can be found here:
BGPStream: A Software Framework for Live and Historical BGP Data Analysis
Reflection
In modern society, networks have become indispensable, making it increasingly difficult to go about daily life without them. However, perhaps due to my daily exposure to them, I found it challenging to concretely visualize how they operate. Through this course, I gained a deeper understanding of networks, and my internal resolution regarding how networks function has improved compared to before. Particularly, I had little prior knowledge about interdomain topics, but I was able to gain experience through Mininet simulations and BGP exercises.
From a workload perspective, the course involved considerable content each week, spanning many pages, and the monotonous text-based format was challenging. Regarding assignments, the focus was on learning the essence, as programs were provided in a functioning state, requiring partial implementations. Therefore, completing the assignments themselves was relatively easy. However, I felt there was a lack of awareness about the purpose of the assignments and how to implement the simulations. Thus, I made an effort to delve deeper into understanding the details of the simulation implementations, and the summary above reflects that focus.