21.TCP协议-拥塞控制概述

前言

       假设,接收方有足够的缓存空间,接收方的接收窗口大小很大;也就是说接收方对数据来者不拒;

       在上述的这种情况下,如果发送方发送的数据,接收方没有收到,那么就可以认为网络出现了拥塞;

网络为什么会发生拥塞

这里写图片描述

        上图所示的是一个典型的小型局域网,SW 表示交换机,R 表示路由器;

        基于前言中的假设,如果 PC1 给主机 PC3 发送 TCP 报文的时候,出现了丢失,我们大抵上就可以猜测:PC1—SW1—R1—R2—PC3 这条网络路径,出现了拥塞;

        为什么会出现这种情况呢?可能是:PC1 发送数据的速度太快了,导致了 SW1、R1、R2 忙不过来;

        实际上,无论是交换机也好,路由器也好,他们转发数据都是按照“存储+转发”的方式进行的,即接收到数据后先保存到自己的缓存,然后再挨个处理,发送到对应的接口。

        所谓的 SW1、R1、R2 忙不过来,就是指这些设备的缓存有限,你发送太快,我没地方进行缓存,导致的结果就是将数据丢弃;

如何避免拥塞

从上图中可以看到,路径上的任意一个节点都有可能“忙不过来”,那么发送方如何才能知道按照什么样的速度发送数据呢?

唯一的方法就是尝试各种不同的发送速度。比如一开始以100kb/s 的速率发送数据,如果没问题,再将速率提高到200kb/s,再没问题继续提升发送速率。一旦达到某个上限后,便开始出现丢包现象,发送方就可以认为,网络已经拥塞了,于是降低发送速率,减轻网络负担。

我们将上面这种探测网络拥塞的方法称为拥塞控制。当然了,上面这种方法实在是太简单了。

早在 1999 年,RFC 2581 就定义了四种拥塞控制算法:

  • 慢启动(slow-start)
  • 拥塞避免(congestiono avoidance)
  • 快重传(fast retransmit)
  • 快恢复(fast recovery)

猜你喜欢

转载自blog.csdn.net/regemc/article/details/80808454
今日推荐