Skip to content

RohitPatidar123-hub/tcp-like-udp-reliability-congestion-control

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📌 Overview

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.

🗂 Assignment Parts

  1. Reliability over UDP

    • Packet sequencing, ACKs, retransmissions.
    • Fast retransmit & recovery.
    • Timeout estimation for packet loss recovery.
    • Performance evaluation under varying loss/delay.
  2. Congestion Control (TCP Reno)

    • Slow start, congestion avoidance.
    • Fast recovery & timeout handling.
    • Throughput and fairness analysis using dumbbell topology.
  3. Bonus: TCP CUBIC

    • Cubic window growth function.
    • Comparative analysis vs TCP Reno for efficiency & fairness.

⚙️ Implementation Details

  • 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

🧪 Experiments & Results

  • 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.

▶️ How to Run

Part 1: Reliability

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.

About

Reliable Transport Protocol over UDP with TCP Reno & CUBIC Congestion Control (Python, Mininet)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages