我是靠谱客的博主 健忘铅笔,最近开发中收集的这篇文章主要介绍TCP拥塞控制和流量控制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

定义

TCP作为面向连接的提供全双工可靠服务协议,具有差错控制、拥塞控制和流量控制等功能。此处所谓的拥塞控制和流量控制,就是将发送端发送能力、接收端接收信息的能力以及当前的网络环境参与考虑,在网络拥塞情况严重或者接收端接收能力有限的情况下,减缓或暂停消息发送,当情况改善时,增强消息发送能力,加上超时/丢失重发的机制,共同提供可靠传输。

流量控制

流量控制以动态调整发送空间大小(滑动窗口)的形式来反映接收端接收消息的能力,反馈给发送端以调整发送速度,避免发送速度过快导致的丢包或者过慢降低整体性能。

这里采用滑动窗口机制,一是不用每次发送完成都需要等待收到确认消息才能继续发送,二是参考接收端的接收能力,限制发送数据段大小,避免丢失现象。

典型行为如下:


虽然接收端可以将通过ACK确认消息(或者直接发送给发送端消息,TCP连接全双工,报头有seq和ack),来反馈待接收能力,但是发送端要考虑的却不只是接收端的接收能力,还要考虑网络环境。

拥塞控制

拥塞控制也就是考虑当前的网络环境,动态调整窗口大小,没有发生拥塞情况,则窗口增大,拥塞了窗口减小,如此往复,最终应该接近与接收端的窗口大小。

具体的拥塞控制算法如下:

慢启动和拥塞避免

在开始发送信息时,由于不知道具体的网络环境,为避免大量信息造成的拥塞现象,此时的拥塞窗口以最小值(即拥塞窗口和接收端窗口中的较小值)进行数据发送,并设定门限值作为慢启动算法和拥塞避免算法的分割点。慢启动是指以最小的拥塞窗口按照指数形式递增,达到门限值后,以拥塞避免算法,即线性递增方式增大拥塞窗口(这里递增时间间隔为一个往返时间RTT)。

在上述过程中,无论是窗口大小指数递增或者线性递增,当发生拥塞现象,则门限值更新为当前窗口大小的一半,拥塞窗口大小变为最小值,重复上述递增过程(此时属于网络环境限制,所以在接收端和拥塞窗口两个限制条件中选择拥塞窗口作为限制)。

如图所示


快速重发和快速恢复

当发送端连续收到三个重复的ack时,表示该数据段已经丢失,需要重发。当收到三个表示同一个数据段的ack时,不需要等待计时器超时,即重新发送数据段(当时这三个ack要在超时之前到达发送端),因为能够收到接收端的ack确认信息,所以数据段只是单纯的丢失,而不是因为网络拥塞导致,所以此时不需要拥塞窗口更新为最小值进行慢启动(如果这样的话,反倒因为拥塞窗口的增长需要时间,可能导致性能降低),此时需要设置拥塞窗口大小为:门限值大小+3,当然此处的门限值已经更新为拥塞窗口值的一半大小,该行为也就是所谓的“乘法减少”,更新之后按照拥塞避免算法继续进行。

如图所示


总结

TCP协议属于全双工协议,以上所说的发送端同样也是接收端,传输中不仅需要考虑两个端主机的发送接收能力,同样需要考虑网络所处环境。



最后

以上就是健忘铅笔为你收集整理的TCP拥塞控制和流量控制的全部内容,希望文章能够帮你解决TCP拥塞控制和流量控制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部