How does TCP handle timeouts with cwnd?

I recently studied TCP congestion control, but one question bothers me ...

If I understand everything correctly, TCP will not send NEW data if it is allowed by cwnd (overload window) and rwnd (receive side window). In other words:

if(flightSize < MIN(cwnd, rwnd))
{
    // Send some new data (if possible)
    // Taking into account other details that we don't need
    // to get into such as Nagle algorithm, etc.
}

Where flightSize is the amount of data that has been sent but not yet acknowledged.

Suppose TCP goes by sending data and increasing cwnd accordingly. Say cwnd = [10 full packages] and flightSize == cwnd. Then there is packet loss on the network, and the sender retransmission timer goes off. How / When does New Reno retransmit unconfirmed data?

Here is my current understanding / misunderstanding:

When the timer goes off, cwnd will reset to [1 full packet], the oldest sent but unconfirmed packet will be resent, rto will be doubled, and the retransmit timer will reset. Therefore, if we say that rto was 1 second, when the timer went out, it will be updated to 2 seconds, and the retransmission timer will start again with a wait time of 2 seconds.

This is why I am confused:

TCP . ACKed, TCP - , cwnd , FlightSize. ? , , ? , ? reset FlightSize ?

RFC, , TCP. , , - ...


: , TCP SACK.

, TCP ack ack ( retrasmit) 4- ack ( ). , , TCP 3 ?

+3
2

"TCP/IP Illustrated, 2", 25.11, . 842-844:

[ - ] (snd_nxt) (snd_una).... snd_nxt , [TCP ].

, FlightSize reset, ( ). , . , .

+3

: ? ?

, - , . , New Reno ( " " ) . -.

0

Source: https://habr.com/ru/post/1703012/


All Articles