I've learned that the congestion window is the maximum amount of packets that can be sent in one transmission round. Now TCP seems to acknowledge the packets in bytes, so wouldn't it make more sense to define the congestion window in bytes. So how can the acknowledgments and the congestion window work together?
I hoped to find more information in the according RFC 5681 but after reading I still don't have an answer.
The RFC seems to measure the congestion window based on the SMSS (Senders Maximum Segment Size) which would be bytes and not a package amount.
Besides that the RFC mentions that the congestion windows increases by max SMSS which wouldn't really allow a exponential growth.
So how does congestion control really work in slow start?
- Following part of the RFC confuses me:
During slow start, a TCP increments cwnd by at most SMSS bytes for each ACK received that cumulatively acknowledges new data. Slow start ends when cwnd exceeds ssthresh (or, optionally, when it reaches it, as noted above) or when congestion is observed. While traditionally TCP implementations have increased cwnd by precisely SMSS bytes upon receipt of an ACK covering new data, we RECOMMEND that TCP implementations increase cwnd, per:
cwnd += min (N, SMSS)
It says that the congestion window increases by N which has been referred to as
the number of previously unacknowledged bytes acknowledged in the incoming ACK. or SMSS depending on which one is smaller. This would imply the congestion window is in bytes? And how can it be exponential then?