TCP的拥塞控制机制

TCP的滑动窗口的可靠性也是建立在“确认重传”基础上的。
发送窗口只有收到对端对于本端发送窗口内字节的ACK确认,才会移动发送窗口的左
边界。 接收端可以根据自己的状况通告窗口大小,从而控制发送端的接收,进行流量
控制。滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗
口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己
被淹没的目的。拥塞窗口是发送方使用的流量控制,而滑动窗口则是接收方使用的流
量控制。

什么是流量控制
防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理

流量控制的一些知识点
(1)接收端抑制发送端的依据:接收端缓冲区的大小
(2)流量控制的目标是接收端,是怕接收端来不及处理
(3)流量控制的机制是丢包

在确认应答策略中,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点,就是性能比较差,尤其是数据往返的时间长的时候
使用滑动窗口,就可以一次发送多条数据,从而就提高了性能

拥塞控制的一般原理

在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏-产生拥塞。
出现网络拥塞的条件:对资源需求的总和 > 可用资源
若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增发而下降。

拥塞控制与流量控制的关系

拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路过载。
拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
流量控制往往指在给定的发送端和接受端之间点对点通信量的控制。
流量控制所要做的就是抑制发送端发送数据的速率,以便使接受端来得及接收数据。

窗口滑动关键字

  • 传输层接收方流控措施
  • 防止发送的太快,耗尽消费方资源,导致接收方处理不及时
  • 认应答策略的缺点
    • 一问一答, 性能差,吞吐量小
  • ACK消息TCP首部中的“窗口大小”字段
  • 高效可靠的发送大量的数据

拥塞窗口关键字

  • 传输层发送方使用的流控措施

发送端如何知道已经丢包?

1.tcp超时重传定时器超时
2.收到三个重复的ack  

为什么会有拥塞控制?

流量控制虽然可以高效可靠的传送大量的数据,但是如果在刚开始阶段就发送大量的数据,可能会导致网络拥堵,因为网络上的计算机太多了

TCP的拥塞控制

拥塞控制主要包含四个方面:
img.png

  • 慢开始
    • 指数增加 -> 拥塞避免(线性增加) -> 发生拥塞(除法减少)
  • 拥塞避免
    • 线性增加
  • 快重传
    • 快重传规定,发送端只要一连收到三个重复的ACK即可断定有分组丢失了,就应立即重传丢失的报文而不必继续等待为该报文段设置重传计时器的超时
    • 快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失地报文段
  • 快恢复
    • 当发送端收到连续三个重复地ACK使,就重新设置开始门限 ssthresh。变为原来的一半
    • 与慢开始不同之处使拥塞窗口 cwnd不是设置为 1 ,而是设置为ssrhresh + 3 × MSS (而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法)
    • 若收到地重复地 ACK 为 n个 。则将cwnd 设置为 ssthresh + n × MSS
    • 若发送窗口值还容许发送报文段,就按照拥塞避免算法继续发送报文段
    • 若收到了确认新地报文段地 ACK ,就将 swnd 缩小到 ssthresh。(直至收到对丢失报文段和其后若干报文段的累积确认后,置cwnd=ssthresh,进入拥塞避免阶段。)

指数增长到阈值 -> 线性增加(CWND) -> 出现拥塞 -> 除法减少(1/2) -> 重置阈值

接收窗口RWnd:是指就手段根据其目前的最大缓存大小所许诺的最新的窗口值,是来自接受端的流量控制
拥塞窗口CWnd:是发送端根据自己估计的网络拥塞程序而设置的窗口值,是来自发送端的流量控制。
发送端的发送窗口的上限值应当取为接收端窗口RWnd和拥塞窗口CWnd这两个变量中较小的一个。 即:Swnd = Min(RWnd, CWnd)

流量控制和拥塞控制的区别

相同点

(1)现象都是丢包;
(2)实现机制都是让发送方发的慢一点,发的少一点

不同点

(1)丢包位置不同
流量控制丢包位置是在接收端上
拥塞控制丢包位置是在路由器上
(2)作用的对象不同
流量控制的对象是接收方,怕发送方发的太快,使得接收方来不及处理
拥塞控制的对象是网络,怕发送发发的太快,造成网络拥塞,使得网络来不及处理

联系

拥塞控制

  • 拥塞控制通常表示的是一个全局性的过程,它会涉及到网络中所有的主机、
  • 所有的路由器和降低网络传输性能的所有因素

流量控制

  • 流量控制发生在发送端和接收端之间,只是点到点之间的控制

结尾

参考资料
https://blog.csdn.net/qq_45795744/article/details/123083507
https://blog.csdn.net/A_FEI_LINUX/article/details/114776693

作者:BK

简书地址:https://www.jianshu.com/u/a5230c4f0b7a

鉴于本人才疏学浅,不足之处还望斧正,也欢迎关注我,无特殊说明的都是自己一字一句码出来的,尊重原创,如果转载请说明出处!