This project implements a TCP-like protocol over UDP with reliability and congestion control mechanisms at the application layer.
It was developed as part of the COL334/672 (Computer Networks) course assignment at IIT Delhi.
The system extends raw UDP with:
- Reliable transmission (ACKs, retransmissions, fast recovery, cumulative ACKs).
- Congestion control (TCP Reno & TCP CUBIC).
- Performance analysis (loss, delay, fairness) using Mininet and Ryu controller.
-
Reliability over UDP
- Packet sequencing, ACKs, retransmissions.
- Fast retransmit & recovery.
- Timeout estimation for packet loss recovery.
- Performance evaluation under varying loss/delay.
-
Congestion Control (TCP Reno)
- Slow start, congestion avoidance.
- Fast recovery & timeout handling.
- Throughput and fairness analysis using dumbbell topology.
-
Bonus: TCP CUBIC
- Cubic window growth function.
- Comparative analysis vs TCP Reno for efficiency & fairness.
- Language: Python 3
- Topology Simulation: Mininet with Ryu SDN controller
- Packet Serialization: JSON format
- Protocols Implemented:
- Reliability (ACKs, retransmissions, fast recovery)
- TCP Reno congestion control
- TCP CUBIC congestion control
- Loss vs Transmission Time: Effect of fast recovery under 0–5% loss.
- Delay vs Transmission Time: Performance with 0–200 ms delay.
- Throughput Analysis: TCP Reno throughput under varying loss/delay.
- Fairness: Jain’s fairness index for Reno/Reno and Reno/CUBIC competition.
Run server:
python3 p1_server.py <SERVER_IP> <SERVER_PORT> <FAST_RECOVERY_BOOL>
Run client:
bash
Copy
Edit
python3 p1_client.py <SERVER_IP> <SERVER_PORT>
Part 2: Congestion Control (TCP Reno)
Run server:
bash
Copy
Edit
python3 p2_server.py <SERVER_IP> <SERVER_PORT>
Run client:
bash
Copy
Edit
python3 p2_client.py <SERVER_IP> <SERVER_PORT> --pref_outfile <PREFIX>
Part 3: TCP CUBIC
Similar usage as Part 2 with congestion control flag set to CUBIC.