TCP拥塞控制算法(Tahoe/Reno/Newreno)

TCP拥塞控制算法(Tahoe/Reno/Newreno)TCP拥塞控制算法(Tahoe/Reno/Newreno)前言TCP(TransmissionControlProtocol),传输控制协议,是目前__Internet__上最重要的一个通信协议之一,其作用是对数据的传输进行一定的控制;而拥塞控制算法又是TCP中最重要的一个算法之一,接下来我们先来了解一下基本概念,再来详细介绍3个协议中的拥塞控制算法以及他们之间的区别。前期知识储备及名词…

大家好,又见面了,我是你们的朋友全栈君。

TCP拥塞控制算法(Tahoe/Reno/Newreno)

前言

TCP(Transmission Control Protocol),传输控制协议,是目前__Internet__上最重要的一个通信协议之一,其作用是对数据的传输进行一定的控制;而拥塞控制算法又是TCP中最重要的一个算法之一,接下来我们先来了解一下基本概念,再来详细介绍3个协议中的拥塞控制算法以及他们之间的区别。

前期知识储备及名词解释

拥塞:
拥塞是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。可以想象在网络中出现了拥塞会造成多么严重的后果。

滑动窗口协议:Sliding Window Protocol,属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量。

拥塞窗口(cwnd):congestion window,当前端在一个RTT内能发送的窗口大小。

接收窗口&&发送窗口:例如,A向B发送数据,B的接收窗口大小会通过ACK返回给A,A的就会选择拥塞窗口和对端的接收窗口中小的一个作为发送窗口的门限值(最大)。

RTO:Retransmission Time Out,超时重传

RTT:Round-trip time,往返时间

ACK:Acknowledgement,我们知道TCP是一个具有可靠性的协议,发送方给接收方发送数据,每收到一个数据包,接收方就会给发送方发送一个确认tcp报文,置ACK为1(ACK是TCP报文中flags之一)
MSS:maximum segment size,最大报文段长度


Tahoe

Tahoe是TCP的最早版本,其主要有三个算法去控制数据流和拥塞窗口。

  • Slow Start(慢启动)
    ssthresh:slow start thresh,慢启动门限值)
    cwnd的值小于ssthresh时,TCP则处于slow start阶段,每收到一个ACK,cwnd的值就会加1。
    仔细分析,其实慢启动并不慢,经过一个RTT的时间,cwnd的值就会变成原来的两倍,实为指数增长。
  • Congestion Avoidance(拥塞避免)
    cwnd的值超过ssthresh时,就会进入Congestion Avoidance阶段,在该阶段下,cwnd以线性方式增长,大约每经过一个RTT,cwnd的值就会加1
  • Fast Retransmit(快重传)
    按照拥塞避免算法中cwnd的增长趋势,迟早会造成拥塞(一般通过是否丢包来判断是否发生了拥塞)。
    如果中网络中发生了丢包,通过等待一个RTO时间后再进行重传,是非常耗时的,因为RTO通常设置得会比较大(避免伪重传:不必要的重传)。
    快重传的思想是:只要发送方收到了三个重复的ACK(如果不了解三个重复ACK如何产生,请温故一下滑动窗口协议),就会立马重传,而不用等到RTO到达(如果没有3个重复的ACK而包丢失了,就只能超时重传);
    并且将ssthresh的值设置为当前cwnd的一半,而cwnd减为1,重回slow start阶段。

Reno

除了包含Tahoe的三个算法,Reno多了一个Fast Recovery(快速恢复)算法。

当收到三个重复的ACK或是超过了RTO时间且尚未收到某个数据包的ACK,Reno就会认为丢包了,并认定网络中发生了拥塞。
Reno会把当前的ssthresh的值设置为当前cwnd的一半,但是并不会回到slow start阶段,而是将cwnd设置为(更新后的)ssthresh+3MSS,之后cwnd呈线性增长。

NewReno

NewReno是基于Reno的改进版本,主要是改进了快速恢复算法。

Reno提出的快速恢复算法提高了包丢失后的吞吐量和健壮性,但缺陷是它只考虑了只丢失一个包的情形,只要丢失了一个包,就被认为是发生了一次拥塞。

在实际的网络中,一旦发生拥塞,会丢弃大量的包。如果采用Reno算法,它会认为网络中发生了多次拥塞,则会多次将cwndssthresh减半,造成吞吐量极具下降,当发送窗口小于3时,将无法产生足够的ACK来触发快重传而导致超时重传,超时重传的影响是非常大的。

在只丢失一个数据包的情况下,NewRenoReno的处理方法是一致的,而在同一个时间段丢失了多个包时,NewReno做出了改进。
Reno快速恢复算法中,发送方只要收到一个新的ACK就会退出快速恢复状态而进入拥塞避免阶段,Neweno算法中,只有当所有丢失的包都重传并收到确认后才退出。
NewReno中,添加了恢复应答判断功能,使得TCP终端可以区分一次拥塞丢失多个包还是发生了多次拥塞。

先了解两个概念:部分应答(PACK)、恢复应答(RACK)
记TCP发送端快速恢复阶段中接收到的ACK报文(非冗余ACK)为ACKx
记在接收到ACKx时TCP终端已发出的序列号(SN)最大的报文是PKTy

  • 如果ACKx不是PKTy的应答报文,则称报文ACKx为部分应答(Partial ACK,简称PACK);
  • 如果ACKx恰好是PKTy的应答报文则称报文ACKx为恢复应答(Recovery ACK,简称RACK)。

NewReno通过以上两种确认应答来判断是否退出快速恢复阶段。
如果收到的PACK并不会退出快速恢复阶段,直到收到RACK(所有丢失的包都被重发且被接受方收到了)才会退出。

总结

以上根据历史发展顺序介绍了TCP的不同版本以及他们之间的区别。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152782.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • UNIX命令

    UNIX命令 一、UNIX命令格式1、UNIX命令提示符   在命令行下,操作系统会显示一提示符,提示用户在此提示符后可以输入一行命令。不同的Shell有不同的缺省提示符:       BShell和KShell的缺省提示符为”$”;       CShell的缺省提示符为”%”;       但当以root用户登录时,系统提示符统一缺省为”#”。用户可以更改自己的缺省Shell和提

  • Pycharm代码设置自动换行[通俗易懂]

    Pycharm代码设置自动换行[通俗易懂]一、当前文件设置自动换行在菜单栏找到View导航一次View->ActiveEditor->UseSoftWraps。点击UseSoftWraps即可。二、统一设置自动换行–所有文件代码都自动换行1、点击File,选择Settings2、点击Editor展开菜单3、找到General菜单并选中,勾选Usesoftwrapsineditor…

  • spring boot 测试的几种写法

    spring boot 测试的几种写法

  • Qmake VS Cmake

    Qmake VS Cmake用cmake构建Qt工程(对比qmake进行学习)cmakevsqmakeqmake是为Qt量身打造的,使用起来非常方便cmake使用上不如qmake简单直接,但复杂换来的是强大的功能内置的out-ofsource构建。(目前QtCreator为qmake也默认启用了该功能。参考:浅谈qmake之sha

  • NodeJS环境下使用axios上传文件

    NodeJS环境下使用axios上传文件最近有个需求,需要在nodejs后端上传图片到云存储服务器,刚好对axios这个库比较熟悉,因此便开始在网上查资料,但是网上大多的都是用axios在前端上传文件的代码,即是基于浏览器环境的。后来找到了基于Nodejs环境的axios上传代码,一番copy后便开始了测试,本以为会一帆风顺,没想到服务器那边却总是返回如下错误,也就是说我们的请求并没有以multipart/form-data的形式封装好…

  • Discuz二次开发基本知识总结

    一)Discuz!的文件系统目录注:想搞DZ开发,就得弄懂DZ中每个文件的功能。a)Admin:后台管理功能模块b)Api:DZ系统与其它系统之间接口程序c)Archiver:DZ中,用以搜索引擎优化的无图版d)Attachments:DZ中,用户上传附件的存放目录e)Customavatars:DZ中,用户自定义头像的目录f)Forumda

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号