The primary objective of this course is to equip students with foundational knowledge of computer networks and develop their practical and analytical skills in this domain. Students gain hands-on experience with various Linux-based networking tools, including packet capture utilities, to configure, troubleshoot, measure, and analyze network performance issues. Through programming assignments, they are required to capture packets from real networks under a variety of emulated network conditions. Additionally, students learn to develop simple networking applications using sockets (e.g., a basic web server, a music streaming server, a multiplayer networked ping-pong game etc.).
The course also provides students with a broader perspective on the hardware and software infrastructure underpinning the Internet, including its inherent bottlenecks. For instance,
What stops the Internet operating at the speed of light? ,
What is the significance of layering in the network stack? , or
How the reliable transport software operating on inherently unreliable network infrastructure provides guarantees to application performance? The goal is to educate students appreciate the design principles behind architecting an extremely complex system like the Internet, develop some analytical skills to analyze network protocols (e.g., Why is TCP AIMD fair (say compared to MIAD)?) and lastly, some hands-on skills to actually interact with the network. By the end of the course, students will have developed a solid foundation in network principles, practical expertise in network tools and programming, and an appreciation for the complexities of modern networked systems. The course materials are only available via
Moodle.