I was going through the text Computer Networking- A Top-Down Approach by Kurose and Ross, there I found subtleties with the TCP congestion control FSM which is shown below:
Mainly I am having difficulty in understanding the action transmit new segment(s), as allowed and transition to the Fast Recovery state.
I have read the equivalent portions from the textbook Data Communications and Networking by Forouzan but there though the explanation is easy but there is no FSM or a programmatic approach.
Now let us consider the slow start phase as shown in the Kurose & Ross text:
The time diagram which they explain about the $cwnd$ doubling after each transmission round is easy and is just like what the Forouzan text says. But I find it difficult to understand the implementation based on the arc labeled with :
in the slow start phase.
- Suppose the sender starts with $cwnd = 1$ $MSS$ then sends this (1st) segment to the network layer and awaits the acknowledgment.
- The sender gets "new ACK" for the previous packet and increases $cwnd$ to $2$ $MSS$. Then in accordance to "transmit new segment(s), as allowed", the sender sends $2$ segments (2nd and 3rd) to the network layer and awaits the acknowledgments.
- Now the sender receives "new ACK" corresponding to 2nd segment and increases $cwnd$ to $3$ $MSS$. Then in accordance to "transmit new segment(s), as allowed", the sender sends $3$ segments to the network layer and awaits the acknowledgments.
- Now the sender receives "new ACK" corresponding to 3rd segment and increases $cwnd$ to $4$ $MSS$. Then in accordance to "transmit new segment(s), as allowed", the sender sends $4$ segments to the network layer and awaits the acknowledgments.
From points 3 and 4, I find that the situation does not match with the slow start phase as shown in Fig 3.51. (i.e. the no. of segments sent are 1,2, 3,4 instead of 1,2,4)
I cannot understand the Fast recovery state's action. Specifically the Forouzan text says :
Most TCP implementations have two reactions:
If a time-out occurs, there is a stronger possibility of congestion; a segment has probably been dropped in the network, and there is no news about the sent segments. In this case TCP reacts strongly:
a. It sets the value of the threshold to one-half of the current window size.
b. It sets cwnd to the size of one segment.
c. It starts the slow-start phase again.
If three ACKs are received, there is a weaker possibility of congestion; a segment may have been dropped, but some segments after that may have arrived safely since three ACKs are received. This is called fast transmission and fast recovery. In this case, TCP has a weaker reaction:
a. It sets the value of the threshold to one-half of the current window size.
b. It sets cwnd to the value of the threshold (some implementations add three segment sizes to the threshold).
c. It starts the congestion avoidance phase.
In the Forouzan text, there is no such transition to the Fast Recovery state. But here in Kurose there is such a state and there is an arc labeled :
whose working I do not quite understand in detail.
What extra work is the version in Kurose doing as compared to the one given in the Forouzan text? Can anyone explain me the subtleties with a comprehensive example covering all the cases of the FSM, so that I can understand the thing better.
Transmit a segment, if allowed by the new value of cwnd and the receiver's advertised window.
It also talks aboutartificially inflating
thecwnd
and alsodeflating
them in the fast recovery phase, but without a numerical illustration I cannot quite understand it. Even Kurose uses these terms but sadly do not provide illustrations. $\endgroup$