上次我们讲到24个数据报文段在传输过程中丢了4个该怎么办?我们继续按流程走,接收方收到20个数据报文段,给发送方一次发回20个确认报文段,一段时间后之前丢失的那4个数据报文段的重传计时器超时了,发送方就判断网络可能出现了拥塞,因此进行以下工作。
第一,将慢开始门限值更新为发生拥塞时的拥塞窗口cwnd的一半。
第二,将拥塞窗口cwnd的值减少为一,并重新开始执行慢开始算法。当慢开始算法执行到拥塞窗口cwnd增长到了新的慢开始门权限值时,停止使用慢开始算法,转而执行拥塞避免算法。
通过本例可以看出,TCP发送方一开始使用慢开始算法,让拥塞窗口cwnd的值从一开始按指数规律增长。当拥塞窗口cwnd的值增长到初始的慢开始门限值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口cwnd的值按线性加一的规律增长。当发生超时重传时,就要判断网络可能出现了拥塞,采取相应的措施,一方面将慢开始门限值更新为发生拥塞时的拥塞窗口cwnd的一半,另一方面将拥塞窗口cwnd的值减少为一,并重新开始执行慢开始算法,拥塞窗口cwnd的值,又从一开始按指数规律增长,当增长到了新的慢开始门限值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口cwnd的值按线性加一的规律增长。
需要注意的是慢开始是指一开始向网络注入的报文段少,而并不是指拥塞窗口cwnd的增长速度慢,拥塞地面也并非指完全能够避免云塞,而是指在拥塞避免阶段,将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
慢开始和拥塞避免算法是1988年就提出的TCP拥塞控制算法,也就是TCP的它后版本,1990年又增加了两个新的拥塞控制算法,以便改进TCP的性能。这就是快重传和快恢复,被称为TCP的Reno版本。
有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞,这将导致发送方超时重传,并误认为网络发生了拥塞。例如在之前的例子中,当拥塞窗口增大到24时,发生了超时重传,而网络此时并没有发生拥塞,但是发送方却误认为网络发生了拥塞,于是发送方错误的重新启动慢开始算法,并把拥塞窗口cwnd又设置为最小值一,因而降低了传输效率,采用快重传算法,可以让发送方尽早知道发生了个别报文段的重传。所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器,超时再重传。
这就要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认。即使收到了失去的报文段,也要立即发出对已收到的报文段的重复确认。发送方一旦收到三个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的重传计时器超时时再重传。
下面我们会举例说明快重传算法。我们讲依旧采取图表的方式来进行讲述。这就放到最后一篇文章里就来讲了,下期再见。