TCP的拥塞控制 (二)
TCP Reno
TCP Reno引入了ssthresh(Slow Start threshold)变量,作为TCP的Slow Start和Congestion Avoidance两个阶段的分界线。
当cwnd < ssthresh时,TCP保持在Slow Start阶段;
当cwnd >= ssthresh时,TCP进入Congestion Avoidance阶段。
ssthresh实际上影响着TCP的性能,但其初始值在RFC中没有明确定义,可以为任意大的值,在实现时一般初始化为rwnd。
TCP Reno拥塞控制算法继承了“数据包守恒准则”,保证处于网络中的packet的总量是守恒的。它通过4个算法保证这一点:
1. Slow Start
在TCP连接建立之后,由于不知道实际可用的网络带宽,因此采用Slow Start算法,小心翼翼地对网络情况进行探测。
进入Slow Start阶段,首先设置cwnd=1,接着cwnd会随着时间的推进呈指数级增加(因此,其过程并不slow)。具体做法是每收到一个ACK,就对cwnd+1,这样相当于每经过一个RTT,cwnd就翻一番。
在遇到两种情况时,Slow Start阶段会截止:
(1)当cwnd达到ssthresh时,此时TCP会进入Congestion Avoidance阶段。
(2)当拥塞发生时,此时又分两种情况:
(2.1)如果是超时,会重传未被响应的packet,并将ssthresh设置为cwnd/2,并将cwnd重置为1,然后重新进入Slow Start阶段。
(2.2)如果是3个重复ACK,会先进行Fast Retransmit,然后进入Fast Recovery阶段。
2. Congestion Avoidance
在该阶段,cwnd不再像Slow Start那样指数级增长,而是线性增长。具体做法是每收到一个ACK,就对cwnd+1/cwnd,这样相当于每过一个RTT,cwnd都加1。
当拥塞发生时,Congestion Avoidance阶段即截止,接下来的过程与Slow Start处理拥塞的方式相同:
(1)如果是超时,会重传未被响应的packet,并将ssthresh设置为cwnd/2,并将cwnd重置为1,然后进入Slow Start阶段。
(2)如果是3个重复ACK,会先进行Fast Retransmit,最后进入Fast Recovery阶段。
3. Fast Retransmit
当检测是否丢包时,每次都要等待超时的发生,会浪费很长时间,因此引入了Fast Retransmit机制。
通过TCP的机制可知,sender只要收到3个重复ACK,即认为丢包发生,此时会立即重传丢失的包,而不再等待超时的出现。
4. Fast Recovery
为了解决丢包后进入Slow Start引起的效率降低,在Fast Retransmit的基础上,又引入了Fast Recovery机制。
该阶段首先将ssthresh设置为cwnd/2,然后重传丢失的包,再对cwnd进行充气(而不是SlowStart那样将cwnd重置为1),具体做法是在cwnd=ssthresh+3(用以反映3个packet正常离开了network)。
之后,每当再次收到一个重复ACK时,sender都会对cwnd+1,这是为了反映一个packet正常离开了network。
这里可能有两个疑问:
(1)怎么得知一个packet正常离开了network呢?这是因为receiver只有在收到packet之后,才会回复ACK,既然sender收到了ACK,说明有一个packet被receiver接收,即正常离开了network。
(2)那么,为什么需要对cwnd+1呢?这是因为一个packet离开了network,使得network不再饱和,为了使network重新平衡,需要发送新的packet到network中,这就必须通过增大cwnd来实现。
随着cwnd的增大,会将新进入窗口的packet发送出去。这个过程称为inflating。
直到收到新的ACK之后,inflating截止,进入deflating过程。所谓deflating,即将cwnd设置为ssthresh。
为什么收到新的ACK后,需要进行deflating呢?这是因为,新的ACK意味着,刚进入Fast Recovery时重传的packet已经被接收,该ACK即是receiver对重传packet的回应。可以认为lost packet已经恢复了,可以结束Fast Recovery阶段。
值得注意的是,该ACK可能一次性响应了多个连续的packet。这是因为,从lost packet发生时起,到lost packet恢复为止,期间sender发送了多个后续packet,因此在receiver回复ACK时,会指明已接收到的最末端的packet的sequence number。
TCP的拥塞控制 (二)的更多相关文章
- 上位机面试必备——TCP通信灵魂二十问【上】
关注公众号获取更多干货 TCP通信协议应该是上位机开发中应用最广泛的协议,无论是西门子S7协议.三菱MC协议或者是欧姆龙的Fins-TCP协议等,都是TCP通信协议的典型应用.很多人在上位机面试时,都 ...
- 计算机网络(10)-----TCP的拥塞控制
TCP的拥塞控制 拥塞(congestion) 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏. 拥塞控制 拥塞控制就是防止过多的数据注入到网络中,这样可以使网 ...
- TCP网络拥塞控制
拥塞控制过程 数据吞吐量 TCP窗口大小,窗口流量控制,慢启动对TCP的成块数据传输综合作用,可能对TCP的数据传输有意想不到的影响. RTT(Round-Trip Time) :往返时间.是指一个报 ...
- TCP/IP拥塞控制
TCP/IP拥塞控制包括:慢启动和拥塞避免.其操作流程如下所述: 初始化.拥塞窗口cwnd = 1,慢启动门限ssthresh = 65535 如果没有发生拥塞 若 cwnd < ssthres ...
- 上位机面试必备——TCP通信灵魂二十问【下】
上篇文章跟大家介绍了TCP通信常见的前10个面试题,没看过的小伙伴可以点击下方链接进行查看: 上位机面试必备——TCP通信灵魂二十问[上] 今天就后面的10个面试题接着做下说明:欢迎关注[dotNet ...
- TCP的拥塞控制
1.引言 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止 ...
- TCP的拥塞控制(转载)
1.引言 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止 ...
- TCP/IP(二)物理层详解
前言 在前面说了一下,计算机网络的大概内容,没有去深刻的去了解它,这篇文章给大家分享一下物理层! 我们知道ISO模型是七层,TCP/IP模型是五层,而tcp/ip协议只将七层概括为4层,我们将学习其中 ...
- 【TCP/IP】二、协议的概念
一.概念 1.tcp/ip是通信协议的统称. 2.协议就是计算机与计算机之间通过网络实现通信时,事先达成的一种约定.这种约定,使那些不同厂商的设备,不同的CPU以及不同的操作系统组成的计算机之间,只要 ...
随机推荐
- [CF1042D] Petya and Array
题面 题解 这道题目到底叫什么好呢?? 史上最短CDQ分治题 记一个前缀和,然后CDQ分治即可. 代码 #include<cstdio> #include<algorithm> ...
- Yii 2.0 使用验证码
Yii2.0 提供了验证码组件.调用起来比较方便.以登录页面添加验证码为例. 1. 模型中添加字段和验证规则. common\models\LoginForm 添加如下代码 public $captc ...
- Shiro 修改权限,刷新权限
shiro 访问鉴权:Realm AuthorizingRealm->doGetAuthorizationInfo doGetAuthorizationInfo protected abstra ...
- fastCMS数据库相关操作类
fastCMS针对数据库的操作有以下几个类: 1.[paging_Class]分页类 此类用于分页检索数据库内符合条件的记录 1) 支持百万级数据分页 2) 支持多种类型的SQL语法,比如 Left ...
- Hbase 教程-安装
HBase安装 安装前设置 安装Hadoop在Linux环境下之前,需要建立和使用Linux SSH(安全Shell).按照下面设立Linux环境提供的步骤. 创建一个用户 首先,建议从Unix创建一 ...
- 4星|《财经》2018年第13期:年轻人大多从大三和大四起开始就从QQ向微信转移
<财经>2018年第13期 总第530期 旬刊 本期主要话题是快递业,其他我感兴趣的重要话题还有:香港9价HPV疫苗断供风波:华盛顿邮报被贝佐斯收购后这几年的变化:北京二中朝阳学校的划片风 ...
- Paper Reading - Im2Text: Describing Images Using 1 Million Captioned Photographs ( NIPS 2011 )
Link of the Paper: http://papers.nips.cc/paper/4470-im2text-describing-images-using-1-million-captio ...
- Python-2.7 配置tab自动补全功能
作者博文地址:http://www.cnblogs.com/spiritman/ 之前一直使用shell编程,习惯了shell的 tab 自动补全功能,而Python的命令行却不支持 tab 自动补全 ...
- 大数据-spark-hbase-hive等学习视频资料
不错的大数据spark学习资料,连接过期在评论区评论,再给你分享 https://pan.baidu.com/s/1ts6RNuFpsnc39tL3jetTkg
- 《构建之法》6-7章读后感、问题及对Scrum的理解
第6章读后感: 看完第六章后了解什么是敏捷流程.“敏捷流程”在软件工程的语境中是一系列价值观和方法论的集合.我觉得敏捷是比较人性化而且让人比较轻松的的一种团队做项目的方法吧,它会比较注重交流,而不是硬 ...