TCP is a sliding-window protocol. The receiver tells the sender the available buffer space at the receiver (TCP header field "window"). The total window size is the minimum of sender buffer size, advertised receiver window size and congestion window size.
The sender can transmit up to this amount of data before having to wait for further buffer update from the receiver and should not have more than this amount of data in transit in the network. The sender must buffer the sent data until it has been ACKed by the receiver, so that the data can be retransmitted if neccessary. For each ACK the sent segment left the window and a new segment fills the window if it fits the (possibly updated) window buffer.
Due to TCP's flow control mechanism, TCP window size can limit the maximum theoretical throughput regardless of the bandwidth of the network path. Using too small a TCP window can degrade the network performance lower than expected and a too large window may have the same problems in case of error recovery.
The TCP window size is the most important parameter for achieving maximum throughput across high-performance networks. To reach the maximum transfer rate, the TCP window should be no smaller than the bandwidth-delay product.
Window size (bytes) => Bandwidth (bytes/sec) x Round-trip time (sec)
window size: 8192 bytes
round-trip time: 100ms
maximum throughput: < 0.62 Mbit/sec.
- Factors limiting bandwidth, another TCP maximum-throughput calculator by P. Lorier, University of Waikato (NZ), http://wand.net.nz/~perry/max_download.php
- Bandwidth-delay product, Wikipedia article, http://en.wikipedia.org/wiki/Bandwidth-delay_product