Projects for Computer Networks

12/15/2024

Computer Networks (EECS 489)

In-depth course on computer networking with a top-down approach, covering foundational and advanced concepts across the network stack. Gained strong theoretical understanding and practical skills related to how modern networked applications operate and how data is transmitted over the Internet.

Key Learning Outcomes:

This course equipped me with both conceptual frameworks and practical experience to understand, analyze, and build efficient networked systems that underpin today’s Internet and cloud infrastructure.


Projects

Project 1: Network Measurement Tool

Project Overview

Developed a TCP-based network measurement tool, iPerfer, inspired by iPerf, to estimate throughput between two hosts. The tool operates in two modes:

The project involved implementing precise round-trip time (RTT) estimations and throughput calculations using TCP sockets and system-level timing mechanisms (std::chrono::high_resolution_clock). The tool was tested on a virtual network using Mininet to analyze link and path latency and throughput under various traffic conditions.

Key Contributions

Through this project, I gained hands-on experience in low-level network programming, mastering TCP socket communication and precise timing for network measurements. I deepened my understanding of how RTT and throughput relate to underlying network properties such as propagation delay and bandwidth. The process of building iPerfer reinforced concepts around reliable data transmission, congestion effects, and measurement challenges in distributed systems. Conducting experiments in a simulated network environment taught me how concurrent flows and multiplexing influence performance, connecting theoretical knowledge with practical observations. Overall, this project enhanced my ability to design, implement, and evaluate network tools critical for diagnosing and optimizing real-world network behavior.


Project 2: Video Streaming HTTP Proxy w/ DNS

Implemented miProxy, a custom HTTP proxy server that enables adaptive video bitrate streaming without modifying the video client. The proxy intercepts browser requests for video content, measures client throughput, and dynamically modifies video segment requests to deliver the highest quality encoding the client's network supports.

Load Balancer: DNS-Style Load Balancing Server

To distribute video streaming load across replicated video servers, developed a load balancer implementing two load balancing strategies inspired by CDN DNS techniques:

Key Contributions

This project deepened my understanding of core networking concepts including TCP socket programming, multiplexed I/O, HTTP protocol intricacies, and real-world CDN load balancing techniques. Implementing the proxy sharpened my skills in protocol parsing, request transformation, and adaptive streaming algorithms informed by live throughput measurements. Building the load balancer exposed me to distributed system design and efficient network-aware decision making using graph algorithms for geo-aware routing. Working with these interconnected components enhanced my ability to integrate systems, design custom network protocols, and deliver scalable solutions that improve user experience in video streaming. This project also reinforced best practices for network byte order handling, concurrency, and state management across networked services—key competencies for network software engineering roles.


Project 3: Reliable Transport Protocol (TCP Implementation)

Developed a custom transport protocol named WTP to ensure reliable, in-order delivery over UDP in the presence of loss, duplication, delay, corruption, and reordering. The system consists of two core components:

The protocol mimics core functionalities of TCP, implementing a sliding window mechanism, ACK handling, and timeout-based retransmission to guarantee reliability.

In the final part of the project, optimized versions of both programs were implemented:

Key Contributions

Through this project, I gained a deeper understanding of how reliable transport protocols like TCP are built on top of unreliable channels such as UDP. I learned how to implement sliding window mechanisms, timeout-based retransmissions, and error detection using checksums. Additionally, I explored the tradeoffs between cumulative and individual acknowledgments, and how protocol optimizations can reduce unnecessary retransmissions and improve performance. This hands-on experience gave me a practical foundation in designing robust, low-level network protocols.


Project 4: Static Router

Built a fully functioning software router that processes and forwards real Ethernet and IP packets using a static routing table. The router handled packet forwarding, ARP resolution, and ICMP messaging to enable end-to-end delivery of data between application servers and the internet in a real network environment.

Key Contributions:

Gained hands-on experience implementing a real-world router using core layer 2 and layer 3 networking concepts. Learned how ARP, IP forwarding, and ICMP protocols interact to enable communication, and developed a strong understanding of efficient packet processing, protocol compliance, and debugging raw network traffic.