在广域网,TCP报文可能要经过多个路由器和速率较慢的链路。如果发送方一开始就向网络
发送多个报文段,则中间路由器的缓冲负担会立刻加重,很可能致使路由器缓存空间耗尽,
引发丢包。
举例说明:假设中间路由存储空间可以缓存3个报文段(这是作了简化的假设),发送端连续发
出了编号为1,2,3,4,5的报文段,中间路由可能来不及一次性全部转发,于是先将转发1和2,
缓存3,4,5,此时路由器存储空间耗尽。这时发送方又有新报文6,7到达,于是来不及转发的3,
4被丢弃,6,7被缓存,这样不可避免地导致了重传发生。
为了解决这一问题,TCP需要支持“慢启动”算法,该算法通过观察到新分组进入网络的速
率应该与另一端返回确认的速率相同而进行工作。
慢启动算法在发送方TCP增加了一个拥塞窗口,记为cwnd,它与通告窗口相互配合来完成
慢启动过程。
当TCP连接建立成功以后,开始阶段,cwnd为1个报文段。发送方每收到一个ack,cwnd都
会增加。收到第一个ack时,cwnd = 2;收到第2个ack时,cwnd = 4,如此这般以指数关系
增加,直到cwnd = 通告窗口或者发送报文的速率达到了网路的容量,中间路由器开始丢弃
分组,这就通知发送方拥塞窗口开得过大。
需要注意的是:
1.发送方发送上限是cwnd和通告窗口的最小值(单位是字节)。
2.cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加
阅读(1120) | 评论(0) | 转发(0) |