TCP的拥塞控制
慢开始与拥塞避免算法(TCP Tahoe版本)
在分析慢开始和拥塞避免进行拥塞控制之前,需要先了解几个变量
慢开始门限值、拥塞窗口、发送窗口。发送窗口的值等于拥塞窗口的值,当拥塞窗口值小于慢开始门限值时,采用慢开始算法;当拥塞窗口值等于慢开始门限值时,可以采用慢开始算法或者拥塞避免算法;当拥塞窗口值大于慢开始门限值时,采用拥塞避免算法。
下面以一个例子来进一步介绍:
假设发送方最开始的慢开始门限值为16,拥塞窗口为1,那么发送窗口也为1。
- 第一次发送,只能发送一个字节的报文段,当发送方收到接收方的确认报文后,采取慢开始算法,拥塞窗口值呈指数增长,1*2=2
- 第二次发送,发送两个字节的报文段,当发送方收到接收方的确认报文后,拥塞窗口值呈指数增长,2*2=4
- 如此往复,直到某次发送后拥塞窗口增大到了与慢开始门限值相同的数16,开始采取拥塞避免算法,拥塞窗口值每次加一
- 之后的发送都在前一次的基础上加一个字节的报文段
- 直到某次报文段接收方并未接收到,发送方的重传计时器过期,此时判断可能出现了拥塞情况
- 将慢开始门限值减少为发生拥塞情况时拥塞窗口的一半,而拥塞窗口、发送窗口减少到1,重新开始进行慢开始算法,增加到慢开始门限值后采用拥塞避免算法。。
注意:慢开始并不是指一开始的拥塞窗口增加速率小,而是指拥塞窗口的起点值小;拥塞避免并不能完全避免拥塞情况的发生,而是在拥塞避免阶段,将拥塞窗口控制为线性增长,减小拥塞的可能。
快重传与快恢复算法(TCP Reno版本)
在之前的拥塞避免算法中,只要重传计时器超时就会进行慢开始值和拥塞窗口大幅度减小的情况。但是有时候并没有发生拥塞,这样就极大地减小了发送速率。而快重传算法,是当发送方发现数据丢失后立即重发数据,并不使重传计时器超时,就不会大幅减小慢开始值和拥塞窗口。
下面还是用一个例子来解释:
- 首先慢开始门限值为16,拥塞窗口为1,
- 发送方第一次发送数据
- 在收到第一次的确认报文之前,第二次发送数据。。。
- 在收到第二次的确认报文之前,第三次发送数据,此时第三次的数据丢失了,接收方并未收到
- 发送方又接连发送了第四、五、六次报文段,每次接收方收到时都会发现报文段未按序发送,都会返回一个对第二次报文段的重复确认包
- 当收到的重复确认包为3个时,发送方就知道第三次的数据丢失,立马进行重传,避免了重传计时器超时
- 而重传后,就会进行快恢复算法
- 有的快恢复算法是将慢开始门限值和拥塞窗口都减小为原本拥塞窗口的一半。转而执行拥塞避免算法。
- 有的快恢复算法是将拥塞窗口+3,因为收到了三次重复确认,所以有三个字节的报文段不存在于网络中,因此可以+3