I'm struggling to understand what happens when a sender receives a triple duplicate ACK from the receiver and what happens when a timeout occurs.
My understanding so far is that:
Upon a triple duplicate ACK: (1) set threshold to half of the size of the sender window, (2) set receiver window size to 1 MSS
I'm not really sure about what happens when a timeout occurs besides a retransmit.
I am working on this problem listed below. If someone could help me confirm what happens when a triple ACK occurs and when a timeout occurs it would be much appreciated.
Consider a TCP connection has an initial Threshold of 24 kB and a Maximum Segment Size (MSS) of 4 kB. The receiver advertised window is 40 kB. Suppose all transmission attempts are successful except for a triple duplicate ACK received (for the same previously transmitted data) on the number 7 transmission and a timeout at transmission number 12. The first transmission attempt is number 0. Find the size of the sender’s congestion window for the first 18 transmission attempts (number 0-17) assuming the sender’s TCP implementation is using the slow-start congestion control scheme
Trans. # Sender wnd. (kb) Threshold (kb) Receiver wnd. (kb)
0 4 24 40
1 8 24 40
2 16 24 40
3 24 24 40
4 28 24 40
5 32 24 40
6 4 16 40
7 8 16 40
8 12 16 40
9 16 16 40
10 20 16 40
11 24 16 40
12 40
13 40
14 40
15 40
16 40
17 40
For future readers, the correct answer for TCP Reno is below:
Upon a triple duplicate ACK, the threshold is set to half of the sender window size and the sender window size is halved.
Upon a timeout, the threshold is set to half of the sender window size and the sender window is reset to 1 MSS and uses slow start.
For TCP Tahoe:
Upon a triple duplicate ACK the threshold is sent to half of the sender window size and the sender window size is reset to 1 MSS. Slow start is then used until the sender hits the threshold.
Upon a timeout, Tahoe and Reno perform the same function.
The correct answer: (for TCP Reno)
Trans. # Sender wnd. (kb) Threshold (kb) Receiver wnd. (kb)
0 4 24 40
1 8 24 40
2 16 24 40
3 24 24 40
4 28 24 40
5 32 24 40
6 36 24 40
7 40 24 40 <- tripple duplicate ack after attempting to transmit
8 20 20 40
9 24 20 40
10 28 20 40
11 32 20 40
12 36 20 40 <- timeout after attempting to transmit
13 4 18 40
14 8 18 40
15 16 18 40
16 18 18 40
17 22 18 40