TCP的拥塞窗口和快速恢复机制的一些备忘及一点想法

rwnd(窗口,代表接收端的处理能力)、cwnd(拥塞窗口,从发送端看当前网络整体承载能力)、ssthresh(快速增长切换成慢速增长的界限值)

1.慢启动,是指数增长(对面确认多少个包,就增加多少),并不慢,只是它的起点低,所以慢启动阶段仍需要时间。实际是起点低(1),快增长阶段,每一轮将当前拥塞窗口翻倍。
2.拥塞避免,引入了ssthresh(这个是个变量,初始往往是最大值65536,随后续拥塞发生不断调整),控制慢启动阶段区间是在窗口超过ssthresh之后,就开始线性增长(是让cwnd缓慢的增加而不是如慢启动时加倍的增长,每经历过一次往返时间就使cwnd增加1,而不是加倍,这样使cwnd缓慢的增长,比慢启动要慢的多。 一种通用的方法是对于TCP发送方无论何时到达一个新的确认,就将cwnd增加一个MSS(MSS/cwnd))。 实际是慢速逼近最大值。

3.拥塞状态,RTO超时且还没有得到数据确认,TCP就会对该报文段进行重传。 超时重传的发生就是拥塞状态进入标志。
拥塞状态发生后,1.把ssthresh降低为cwnd值的一半 2.把cwnd重新设置为1 3.重新进入慢启动过程。

4.仅存在慢启动和拥塞避免实际TCP也可以工作,不断在慢启动和拥塞避免之间循环:
慢启动出现拥塞(ssthresh初始值65536,不会达到),重新进入慢启动。
慢启动cwnd超过ssthresh(ssthresh此时是上次丢包是cwnd的一般,可以超过),进入拥塞避免。
拥塞避免出现拥塞,重新进入慢启动。
......

5.虽然慢启动和拥塞避免 配合拥塞状态也能工作,但发生拥塞后慢启动的起点低,耗时仍比较长,所以有必要叠加快速重传机制。

6.TCP利用3个相同的ACK来判定数据包丢失,这个可以认为是拥塞状态2,这个拥塞状态由接收端判定触发,此时RTO并未超时,只是接收端认为收到了很多大于某个序号seqx的包,但是seqx本身却没收到。 此时进行快速重传操作(每收到一个后面的包就会发一个未收到包的ack),快速重传机制实际就是拥塞状态2发生时的一个处理机制,或者说,拥塞状态2直接命名为快速重传2也可以。
拥塞状态2发生后,1.把ssthresh设置为cwnd的一半 2.把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3) 3.重新进入拥塞避免阶段。

8.有了拥塞状态2和快速重传机制后,拥塞避免就可以再次进入拥塞避免,这种情况下避免慢启动再次经历耗费时间,对网络的短暂波动适应能力强:
出现拥塞1(超时),则进入慢启动。
出现拥塞2(3ACK),则进入拥塞避免。
可以猜想:
在报文发送较少,低速状态时,发送了一个包,后面又没有什么后续报文。倘若该报文被丢了,此时接收端并不会感知到啥,只能依靠拥塞1来检测进入慢启动了。实际此时慢启动也关系不大,因为本身速率较低。
在报文发送较多,高速状态时,发送了一个包,后续还有很多后续报文。倘若该报文丢了,此时接收端可以更快感知到某个报文被丢弃,因为他会发现后续大部分甚至所有报文都到了,唯独缺了这个报文,就正常分析看,那个报文被丢弃可能性很大。 由于接收端此时对于丢包感知更快,主要会依靠拥塞2来检测,调整ssthresh和cwnd之后再次快速重传进入拥塞避免阶段。 这样避免了重新经历慢启动,节约了部分时间,避免了对速率造成更大影响。

9.通过拥塞2进入拥塞避免会经历快速恢复阶段(也有一种提法根本就没有快速恢复阶段,所谓快速恢复只是指出现拥塞2时直接转入拥塞避免的一个处理机制)。
快速恢复的流程:
1.当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为当前ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络到达对岸。
2.再收到重复的ACK时,拥塞窗口增加1。
3.当收到新的数据包的ACK时,把cwnd设置为第一步中保存的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。

原文地址:https://www.cnblogs.com/dongzhiquan/p/tcp_fast_retransmit.html

时间: 2024-07-31 14:44:52

TCP的拥塞窗口和快速恢复机制的一些备忘及一点想法的相关文章

TCP/IP可靠的原理 滑动窗口 拥塞窗口

TCP和UDP处在同一层---运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个"拨打电话"的过程,等到通信准备结束才开始传输数据,最后结束通话.所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文,这一经时重申了很多遍了. 把TCP保证可靠性的简单工作原理摘抄如下 应用数据被分割成TCP认为最适合发送的数据块.这和

独立双(N)拥塞窗口的TCP单边加速思想

让TCP以流水线方式工作靠谱吗?也许你听说过MPTCP,也许你听过P2P下载是多么的天下人为我而我负天下人.        如果我能将一个TCP流拆分成多个TCP流,理论上来讲传输速度会有很大的提升,因为TCP拥塞控制算法是必须携带公平性收敛特征的(不然paper不会通过...),TCP反馈系统会为每一个加入的流分配一张船票,反馈系统不会管你们几个是不是一伙儿的,它只按人头计数,不会分组,这样就有很多好玩的事情可以做了.        我平时比较喜欢跟一些非工作关系的同行做技术交流,随便找个地方

TCP数据量--滑动窗口、拥塞窗口、慢启动、Negle算法 经受时延的确认等

TCP的数据流大致可以分为两类,交互数据流与成块的数据流.交互数据流就是发送控制命令的数据流,比如relogin,telnet,ftp命令等等:成块数据流是用来发送数据的包,网络上大部分的TCP包都是这种包. 很明显,TCP在传输这两种类型的包时的效率是不一样的,因此为了提高TCP的传输效率,应该对这两种类型的包采用不同的算法. 总之,TCP的传输原则是尽量减少小分组传输的数量. TCP的交互式数据流 ?         经受时延的确认技术 TCP的交互式数据流通常使用"经过时延的确认"

tcp协议头窗口,滑动窗口,流控制,拥塞控制关系

参考文章 TCP 的那些事儿(下) http://coolshell.cn/articles/11609.html tcp/ip详解--拥塞控制 & 慢启动 快恢复 拥塞避免 http://blog.csdn.net/kinger0/article/details/48206999 TCP window Full http://blog.csdn.net/abccheng/article/details/50503457 名词解释 MTU:maximum transmission unit,最大

TCP的滑动窗口机制【转】

原文链接:http://www.cnblogs.com/luoquan/p/4886345.html      TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的传输协议就需要对数据进行确认.TCP协议里窗口机制有2种:一种是固定的窗口大小:一种是滑动的窗口.这个窗口大小就是我们一次传输几个数据.对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送:同时接收方也维持着一个接收窗口,只有落在接收窗口内的帧才允

TCP 滑动窗口和 拥塞窗口

转http://coolshell.cn/articles/11609.html 滑动窗口 -- 表征发送端和接收端的接收能力 拥塞窗口-- 表征中间设备的传输能力 TCP滑动窗口 需要说明一下,如果你不了解TCP的滑动窗口这个事,你等于不了解TCP协议.我们都知道,TCP必需要解决的可靠传输以及包乱序(reordering)的问题,所以,TCP必需要知道网络实际的数据处理带宽或是数据处理速度,这样才不会引起网络拥塞,导致丢包. 所以,TCP引入了一些技术和设计来做网络流控,Sliding Wi

TCP/IP详细说明--滑模、拥塞窗口、慢启动、Negle算法

TCP的数据流大致能够分为两类,交互数据流与成块的数据流. 交互数据流就是发送控制命令的数据流.比方relogin,telnet.ftp命令等等.成块数据流是用来发送数据的包,网络上大部分的TCP包都是这样的包. 非常明显.TCP在传输这两种类型的包时的效率是不一样的,因此为了提高TCP的传输效率,应该对这两种类型的包採用不同的算法. 总之.TCP的传输原则是尽量降低小分组传输的数量. TCP的交互式数据流 ? 经受时延的确认技术 TCP的交互式数据流通常使用"经过时延的确认"技术.通

TCP系列35—窗口管理&流控—9、紧急机制

一.概述 我们在最开始介绍TCP头结构的时候,里面有个URG的标志位,还有一个Urgent Pointer的16bits字段.当URG标志位有效的时候,Urgent Poinert用来指示紧急数据的相对于TCP头中系列号Seq的位置,系列号和紧急指针值的和我们称呼为退出点(exit point).应用程序写入数据的时候可以通过MSG_OOB的socket选项来指定紧急数据.实际上因为紧急数据只有一个指针来指示并没类似长度的字段,因此紧急数据也只能有1bytes.RFC6093已经建议不要在继续使

TCP/IP详细解释--TCP/IP可靠的原则 推拉窗 拥塞窗口

TCP和UDP在同一水平---传输层.但TCP和UDP最不一样的地方.TCP它提供了一个可靠的数据传输服务,TCP是面向连接的,那.使用TCP两台主机通过第一通信"拨打电话"这个过程,等待,直到通信结束就开始准备数据传输,最后,结束通话. 所以TCP比UDP可靠的多,UDP是把数据直接发出去.而无论对方是不是在收信,就算是UDP无法送达.也不会产生ICMP差错报文,这一经时重申了非常多遍了. 把TCP保证可靠性的简单工作原理摘抄例如以下 应用数据被切割成TCP觉得最适合发送的数据块.