TCP协议的拥塞控制

众所周知,TCP协议是一种面向连接的、可靠的传输层协议,那么它的可靠性是通过很多功能来实现的,“拥塞控制”就是其中一种功能。

拥塞控制,简单来说,就是控制传输过程中出现的网络拥堵的问题,例如,两台主机在传输数据包的时候,由于发送发一直没有接收到接受方反馈的确认信号,那么发送方就会认为它发送的数据包丢失了,进而会重新传输这个丢失的数据包。如果重新传输发送的数据包数量过多,就会导致网络的拥堵,从而瘫痪。因此,TCP协议增加了“拥塞控制”这个功能,拥塞控制主要是通过慢开始、拥塞避免、快重传、快恢复四个算法来控制避免产生拥塞。

TCP要通过慢开始、拥塞避免、快重传、快恢复四个算法来实现拥塞控制,发送方就必须先维护一个叫做拥塞窗口(cwnd)的状态变量,拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的还是发送方窗口。

首先,我们来说一下这四个算法的功能:

1、慢开始

在这里,有人会想为什么要慢开始呢?为什么不直接发送窗口的最大值呢?其实是因为如果刚开始就立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况,所以就采用了慢开始算法。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。

发送最初执行慢开始,令 cwnd​​​​​​​=1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd加倍,因此之后发送方能够发送的报文段数量为:248 ......

当然,我们也不会让cwnd无限增长下去,否则很快就会造成网络拥塞,因此,我们又引入了第二种算法——拥塞避免。

2、拥塞避免

拥塞避免算法就是专门用来控制慢开始导致的​​​​​​​ cwnd增长速度过快,从而使得发送方发送的速度增长过快,出现网络拥塞的的问题。拥塞避免的做法是设置一个慢开始门限ssthresh,当cwnd>=ssthresh 时,则进入拥塞避免,每个轮次只将 cwnd加 1,降低拥塞窗口的增长速度。如果出现了超时,则令 ssthresh= cwnd/2,然后开始执行快恢复算法。

3、快重传

在执行拥塞避免算法时,很有可能会触发重传机制,如果接收方连续三次都给发送方发去了相同的确认号,那么发送方会立即采用快重传算法,重新传输对方尚未收到的报文段。

4、快恢复

当发送方连续三次收到相同的确认时,就会执行“乘法减小”算法,将当前cwnd的值减半作为新的慢开始门限值ssthresh,由于发送方现在认为网络很可能没有发生拥塞,因此不会执行慢开始算法,而是让cwnd的值等于这个新的门限值ssthresh,随后,进入拥塞避免算法,每个轮次只将 cwnd加 1,使拥塞窗口缓慢地线性增大,这就是快恢复算法

快恢复算法是配合着快重传算法使用的,快恢复算法是相对于慢开始算法而言的。

使用快恢复算法时,cwnd 从较大值开始,通过拥塞避免算法逐渐线性增大,经过较短时间便能恢复到比较快的传输速度;如果使用慢开始算法,cwnd从1开始,需要较长的时间才能达到较快的传输速度,如果每次都用慢开始算法恢复,就会产生一些没必要的性能开销,从而影响传输效率

TCP要通过慢开始、拥塞避免、快重传、快恢复四个算法来保证网络通畅和传输效率,最终实现拥塞控制。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值