zoukankan      html  css  js  c++  java
  • 计算机网络之TCP拥塞控制

    1.  首先,拥塞控制和流量控制是不一样的。

       拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。 
       流量控制是点对点通信量的控制,是一个端到端的问题,主要就是抑制发送端发送数据的速率,以便接收端来得及接收。

    2.  拥塞的标志:1.重传计时器超时 2.接收到三个重复确认

    3.  发送方维持一个叫做拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞程度,且动态地在变化。

       慢开始和拥塞避免:

       1.慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大(指数的增长)逐渐增加拥塞窗口的大小。拥塞避免则是让拥塞窗口缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞控制窗口加一

       

       为了防止拥塞窗口增长过大引起网络拥塞,设置一个慢开始门限(ssthresh状态变量) 
       当拥塞窗口<ssthresh,使用慢开始算法(指数增长) 
       当拥塞窗口=ssthresh,既可使用慢开始算法,也可以使用拥塞避免算法(线性增长)
       当拥塞窗口>ssthresh,使用拥塞避免算法

       但是无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做拥塞来处理),就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。 

    4.  快速恢复(与快速重传配合使用)

       1.采用快速恢复算法时,慢开始只在TCP连接建立时和网络出现超时时才使用。
       2.当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法。
       3.考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/jkzr/p/10477871.html
Copyright © 2011-2022 走看看