TCP的拥塞控制

为了避免发送方无节制地发送数据,从而造成网络拥堵,所以 TCP 有一个拥塞控制。

  • 流量控制:作用于接收方控制发送者发送速度,从而使接收者来得及接收,防止分组丢失。

  • 拥塞控制:作用于网络防止过多数据发送到网络,避免网络负载过大。

TCP的拥塞控制

关于拥塞

拥塞窗口:大小根据网络拥堵程度动态变化。本质:使用算法控制拥塞窗口,避免过多的数据注入到网络。

拥塞窗口cwnd:网络没有出现拥塞,拥塞窗口增大一些,以便把更多的分组发送出去。网络出现拥塞或有可能出现拥塞,拥塞窗口减小一些,以减少注入到网络中的分组数,缓解网络出现的拥塞。

发送方如何知道是否拥塞:是否出现超时。

网络拥塞的时候,路由器会丢弃分组。如果没有收到确认报文,说明出现了丢弃分组的现象,也就是拥塞超时了。

如何控制拥塞:

TCP拥塞控制算法:慢开始拥塞避免快重传和快恢复

慢开始:先试探一下网络的负荷,由小到大逐渐增大发送窗口,也就是说,由小到达逐渐增大拥塞窗口值。指数增长。设立慢启动门限 ssthresh(slow start threshold)初始值。

拥塞避免:从指数增长变为线性增长

TCP重传:超时重传和快重传

超时重传:网络拥塞,导致规定时间未收到ACK确认包,此时超时重传。时间设置为之前的2倍,2次超时就说明网络差,不适合频繁反复发送,重新慢启动。ssthresh=cwnd/2。cwnd 重置为初始值。

快重传:个别报文丢失,但是网络没有拥塞。此时接收方对上一个报文一直发送确认包,发送了3次重复的确认包,接收方立即重传丢失的报文。

快恢复:调整门限值为ssthresh/2,然后执行拥塞避免算法。

实例1(出现网络拥塞导致报文丢失):

1.TCP连接进行初始化的时候,cwnd=1,ssthresh=16。

2.慢启动算法开始:cwnd初始值是1,每次发送方收到一个ACK拥塞窗口按照指数增长,2的指数倍。如下图1-2-4-8-16。

3.当ssthresh=cwnd时,启动拥塞控制算法,拥塞窗口按照规律线性增长,每收到一个确认包,cwnd加1。

4.当cwnd=24时,假设网络出现超时,发送方收不到确认ACK,网络拥塞了。此时设置ssthresh=12,(cwnd/2)

5.设置cwnd=1,开始慢启动算法,当cwnd=ssthresh=12,慢启动算法变为拥塞控制算法。

实例2(非网络拥塞产生的丢包):

1.接收方成功的接受了发送方发送来的M1、M2并且分别给发送了ACK。

2.接收方没有收到M3,而接收到了M4,显然,M4是失序报文段,接收方不能确认M4。

3.实行快重传算法,收到M4、M5等报文段时,不断重复的向发送方发送M2的ACK。

4.接收方收到3个重复的ACK,那么发送方不等重传计时器到期,由发送方尽早重传未被确认的报文段。

 

网络未拥塞,但个别报文在网络中丢失,发送方迟迟收不到确认,就会超时。误认为拥塞。重新满开始算法,拥塞窗口设为1,降低传输效率。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值