This comprehensive networking systems project covers multiple practical implementations and analyses:
- iPerf UDP Client/Server: Python-based UDP client-server for measuring throughput.
- Proxy Server: TCP proxy that forwards client messages to the server with IP blocking.
- DNS Client from Scratch: Custom DNS client implementing DNS request and response parsing.
- Congestion Control Protocols: Implementation and analysis of Stop-and-Wait, Sliding Window, and TCP Reno protocols.
- BGP Analysis: Examination and analysis of BGP Routing Information Base (RIB).
Through this project, I'm gaining experience in:
- Socket Programming (TCP & UDP)
- Throughput and Performance Measurement
- Proxy Server Architecture & Security Measures
- DNS Protocol Implementation
- Congestion Control Mechanisms
- BGP Routing Analysis
- UDP Server: Receives data, calculates throughput, returns results.
- UDP Client: Sends data payloads (25-200 MB) and displays received throughput.
- TCP Proxy: Forwards messages from client to server.
- IP Blocking: Rejects requests based on a configurable IP blocklist.
- JSON Data Exchange: Structured message transmission.
- Custom DNS Requests: Constructs DNS queries from scratch.
- RTT Measurement: Calculates round-trip times to DNS resolvers and web servers.
- Response Parsing: Extracts DNS records and associated IP addresses.
- Protocols: Implements Stop-and-Wait, Sliding Window, and TCP Reno.
- Performance Metrics: Measures throughput, per-packet delay, and overall performance metrics.
- Statistical Analysis: Reports averages and standard deviations from multiple runs.
- BGP RIB Examination: Parses and analyzes routing tables using data from RouteViews.
- Longest Route Identification: Determines longest AS path from provided BGP data.
project_root/
├── udp_server.py # UDP Server for throughput testing
├── udp_client.py # UDP Client for sending payloads
├── proxy_server.py # TCP Proxy server with IP blocking
├── tcp_server.py # TCP Server receiving via proxy
├── tcp_client.py # TCP Client communicating via proxy
├── dns_client.py # Custom DNS client implementation
├── congestion_control/ # Congestion control protocols implementation
│ ├── stop_and_wait.py
│ ├── sliding_window.py
│ └── tcp_reno.py
└── bgp_analysis.py # BGP routing table analysis
Run UDP server:
python udp_server.pyRun UDP client:
python udp_client.py [payload size in MB]Run TCP server:
python tcp_server.pyRun Proxy server:
python proxy_server.pyRun TCP client:
python tcp_client.py [4-char message]python dns_client.pySelect and run desired protocol (e.g., Stop-and-Wait):
python congestion_control/stop_and_wait.pypython bgp_analysis.py- Implement dynamic IP blocklist updates for proxy.
- Expand DNS client capabilities with additional record types.
- Optimize congestion control protocols for different network scenarios.
- Provide real-time BGP route monitoring and analysis.
Licensed under the MIT License – see LICENSE file for details.


