在局域网中,发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。但是,如果收发双方不在同一个局域网中,那么发送方一直发送可能会出问题,因为中间路由器有可能发生拥塞,拥塞是指一个或者多个交换点的数据报超载而导致时延剧烈增加的现象。
为了解决这个问题,TCP支持一种被称为“慢启动”的算法,该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。为了控制拥塞,TCP使用了第二个窗口(第一个是控制流量的滑动窗口)限制,即拥塞窗口限制。拥塞窗口是发送方使用的流量控制,而滑动窗口则是接收方使用的流量控制。
刚建立TCP时,拥塞窗口大小为1个报文段。此时,发送方一次只能发送一个报文段。每收到一个ACK,拥塞窗口就增加一个报文段,所以这是一种指数增长。发送方取拥塞窗口与滑动窗口中的较小值作为发送上限。当发送方窗口开得过大时,中间路由器开始丢弃分组,这就通知发送方要它的窗口变小。
对于拥塞窗口大小的限制采用慢开始和乘法减小两种技术:
- 慢启动:拥塞窗口随着一个确认的到达,拥塞窗口的大小每次增加一个报文段,拥塞窗口大小呈指数增长。
- 乘法减小的拥塞避免策略:一旦发现报文段丢失,就把拥塞窗口的大小减半(直到减至最小的窗口,窗口中应至少包含一个报文段)。
下面通过离散的时间序列,观察拥塞控制协议: