Homework 5: a reliable transport protocol (part 2)

Due date: Apr. 8, 2019 start of class

Starting with either your Homework 4 solution, or the student-provided Homework 4 solution provided (here), this assignment extends the solution to improve throughput (by implementing a transmission window, rather than a single outstanding packet), and to ensure that links are shared (reasonably) fairly between flows.

The transmission window

Extend the homework 4 solution to support more than one outstanding packet, using a "transmission window". Given a fixed window size, start the window at the beginning of the file, and transmit all of the packets that fit within the window. Move the window toward the end of the file (to the right) once each packet at the beginning (the left) of the window is acknowledged. Remember to use cumulative acks to reduce the impact of occasional ack losses. Use triple acknowledgment of the same packet to indicate a packet loss.

In the case of a loss, recommended operation is to restart transmission of the entire window at the lost packet. If you want, you may choose to implement selective acknowledgment instead, improving efficiency.

Congestion control

Following the TCP design, start with a small congestion window and slow-start until the first packet loss. This quickly estimates the available capacity. After this, now in congestion avoidance mode, use additive increase, multiplicative decrease congestion control to manage the window size: increase the window size by one MSS every RTT, and halve the window size for every lost packet.

Things we will test for

  • end-to-end throughput with combinations of high/low latency, high/low bandwidth, no/1%/2%/4% packet losses, using the command line tools described in hw4
  • fairness between 2 and 3 separate pairs of receivers/senders over the same link. Given a sufficiently long transfer, each pair should receive roughly the same throughput.
  • fairness between a TCP flow and one of your pairs. Given a sufficiently long transfer, each flow should receive roughly the same throughput.

Turn-in instructions

Use this invitation link to submit your work to your personal github classroom repository. Don't forget to test your submission to make sure it builds and works the way you expected.