计算机网络基础(十九)---传输层-TCP的拥塞控制

书旅

文章内容概览

TCP的拥塞控制

当网络中的数据报文过多的时候,就会造成网络的拥塞

网络拥塞的根源

  • 一条数据链路经过非常多的设备
  • 数据链路的各个部分都可能成为网络传输的瓶颈(网络中各种路由器的性能可能不一样、或者传输媒介性能有差别)
  • 网络对一些硬件设备的性能要求,大于可用资源,因此就导致了拥塞

TCP的拥塞控制和TCP的流量控制有什么区别?

  • 流量控制考虑点对点的通信量控制(主要是通过窗口来控制通信量,考虑接收方的接收性能)
  • 拥塞控制考虑整个网络,是全局性的考虑(它会感知到整个网络是否发生拥塞)

拥塞控制是一个很庞大的问题,因为它考虑到了整个网络,并且对于拥塞控制,很难有最优解。这里只对拥塞控制有一个简单的认识

如果要进行拥塞控制,首先需要有一个方法去判断网络是否发生拥塞。判断的方法简单粗暴,如果发送方发送的报文发生了超时,就认为网络发生了拥塞。但是,通过报文超时来判断网络是否一定拥塞是不成立的

如果在传输的某一个阶段,把光纤给断了,这个也会导致报文超时,这时就不是因为拥塞所造成的了,而是网络故障所造成的。所以,报文超时只是判断网络拥塞的一个方法(下边的内容先不考虑网络故障的情况)

拥塞控制的两个算法

慢启动算法
  • 由小到大逐渐增加发送的数据量
  • 每收到一个确认报文就加一(假如第一次收到了1个确认报文,下一次就发送2个报文;如果第二次收到2个确认报文,下一次就发送4个报文,依次1、2、4、8)

可以看到发送的报文是按指数增长的,指数增长的增长速率是非常快的。慢启动算法,它的指数增长会有一个阈值,称为慢启动阈值(ssthresh),增长到这个慢启动阈值之后就不再增长了。增长到这个阈值之后,它就会进行第二个算法

拥塞避免算法
  • 维护一个拥塞窗口的变量(这个变量大于慢启动阈值)
  • 只要网络不拥塞(即只要报文不超时),就试探着增大拥塞窗口(每次加一)

假设慢启动到达了阈值(假设是16),此时就会启动拥塞避免算法,它会试探着将拥塞窗口调大,如果16个报文都收到了确认,它就会再发送17个报文,如果没有发生超时,下一次就会发送18个报文。一直这样一个一个的调大,直到发生拥塞。这就是拥塞避免算法

拥塞避免算法可以保证在网络不发生拥塞的情况下,更多的发送数据

这是一张慢启动算法和拥塞避免算法的图(纵坐标:每一次发送数据报文的数量;横坐标:发送的轮次)

在到达阈值之前,数据报文的数量是指数增长的。当数据报文的数量达到阈值的时候就会启动拥塞避免算法,之后数据报文的数量就是线性增长的

阅读 299

个人微信公众号:IT猿圈

18 声望
16 粉丝
0 条评论

个人微信公众号:IT猿圈

18 声望
16 粉丝
宣传栏