TCP协议拥塞控制算法
tcp数据传输的拥塞控制中的快重传算法和快恢复算法

tcp数据传输的拥塞控制中的快重传算法和快恢复算法一、TCP数据传输中的拥塞控制TCP协议是一种可靠的传输协议,它通过拥塞控制机制来保证网络的可靠性和稳定性。
在TCP数据传输过程中,如果网络出现拥塞,就会导致数据包丢失或延迟,从而影响数据传输的效率和质量。
因此,TCP 协议需要通过拥塞控制机制来避免网络拥塞,并确保数据传输的顺利进行。
二、快重传算法快重传算法是TCP协议中常用的一种拥塞控制算法,它主要用于解决网络中出现丢包现象时的重传问题。
当一个发送方发现自己发送了一个分组后没有收到对应的确认消息时,它会认为该分组已经丢失,并立即重新发送该分组。
但是,在某些情况下,接收方其实已经正确地接收了该分组,并向发送方发送了确认消息。
这时,如果发送方继续重复发送该分组,就会导致网络拥塞。
快重传算法通过检测是否连续收到3个相同序号的确认消息来判断是否出现了丢包现象。
如果出现了丢包,则立即重发该分组,并不等待超时时间到达再进行重传。
这样可以避免网络拥塞,并提高数据传输的效率。
三、快恢复算法快恢复算法是TCP协议中另一种常用的拥塞控制算法,它主要用于解决网络中出现拥塞窗口减小时的问题。
当网络出现拥塞时,TCP协议会将拥塞窗口减小,并重新开始慢启动过程。
但是,在某些情况下,网络并没有真正出现拥塞,而是由于其他原因导致了数据包丢失或延迟,这时重新开始慢启动过程会导致数据传输效率降低。
快恢复算法通过检测是否连续收到3个相同序号的确认消息来判断是否出现了拥塞窗口减小的情况。
如果出现了该情况,则将拥塞窗口增加1,并进入快恢复状态。
在快恢复状态下,TCP协议会继续发送数据包,并等待接收方发送确认消息。
如果连续收到3个相同序号的确认消息,则说明网络已经恢复正常,TCP协议会退出快恢复状态,并将拥塞窗口设置为新的值。
四、总结快重传算法和快恢复算法是TCP协议中常用的拥塞控制算法,它们可以有效地避免网络拥塞,并提高数据传输的效率。
计算机网络中的拥塞控制算法

计算机网络中的拥塞控制算法引言计算机网络中的拥塞控制算法是保证网络运行高效稳定的关键之一。
随着网络规模和传输速率的不断增长,拥塞控制算法的研究与优化也变得日益重要。
本文将介绍计算机网络中常见的拥塞控制算法及其工作原理,包括TCP Reno,TCP New Reno,TCP Vegas以及流行的基于反馈的拥塞控制算法。
TCP RenoTCP Reno是传输控制协议(TCP)中最常用的拥塞控制算法之一。
其目标是通过动态调整拥塞窗口大小以保持网络的稳定性和公平性。
TCP Reno通过两个主要机制来实现拥塞控制:拥塞避免和拥塞恢复。
在拥塞避免阶段,TCP Reno使用加法增速和乘法减速两种方法来控制数据包的发送。
当网络传输没有发生丢包时,拥塞窗口大小以每轮递增一个MSS(最大报文段长度)的方式进行。
当网络出现拥塞时,即出现丢包情况,TCP Reno将减小拥塞窗口大小,并进入拥塞恢复阶段。
在拥塞恢复阶段,TCP Reno使用快速重传和快速恢复机制来处理丢包情况。
当发送方接收到三个重复的ACK(确认应答)时,它将立即重传丢失的数据包,并将拥塞窗口减半。
然后,TCP Reno将进入拥塞避免阶段,重新增加拥塞窗口的大小。
TCP New RenoTCP New Reno是TCP Reno的改进版本,在丢包情况下的行为上有所优化。
相比于TCP Reno只能重传一个丢失的数据包,TCP New Reno在接收到三个重复的ACK时也会重传后续的丢失数据包。
这样可以更有效地利用网络的带宽资源,提高传输效率。
TCP VegasTCP Vegas是另一种常见的拥塞控制算法,相较于TCP Reno,TCP Vegas更加注重网络时延的控制。
TCP Vegas通过实时检测网络端到端的往返时间(RTT)来判断网络的拥塞状态。
如果RTT增加且超过某个阈值,说明网络可能有拥塞发生,TCP Vegas将减小窗口大小以缓解拥塞。
相反,如果RTT保持较低水平,TCP Vegas将适度增加窗口大小以提高网络的利用率。
TCP拥塞控制算法理论及调优实践

TCP拥塞控制算法理论及调优实践TCP(Transmission Control Protocol)是当前Internet上最重要的传输协议之一,其主要特点是提供了可靠的数据传输服务。
然而,在高负载情况下,TCP数据传输过程中容易出现拥塞现象,导致网络性能下降、数据丢失等问题。
因此,TCP拥塞控制算法成为网络性能优化中的重要一环。
TCP拥塞控制算法的原理TCP拥塞控制算法主要基于网络反馈机制实现,在网络出现拥塞时,TCP协议会相应地降低发送数据的速度,以此来缓解网络负载压力。
TCP拥塞控制算法主要包括四种基本算法:Slow Start、Congestion Avoidance、Fast Retransmit和Fast Recovery。
Slow Start算法是TCP拥塞控制算法中最基本的算法之一,其主要原理是当TCP协议开始发送数据时,先以一个较小的速率进行发送,逐渐递增发送速率,同时不断根据网络反馈调整发送速率,直到网络达到拥塞阈值时,TCP协议则根据反馈信息逐渐降低发送速率,以缓解网络拥塞压力。
Congestion Avoidance算法主要是在Slow Start算法的基础上进一步进行优化,其主要想法是当网络出现拥塞时,不仅仅是降低发送速率,同时也要通过降低拥塞窗口大小来减少拥塞现象的发生。
Fast Retransmit算法主要是当发送方在经过一段时间后始终没有收到确认数据包时,则会认为数据包已经丢失,此时会立即重发数据包以避免数据包过多地停留在网络中发生拥塞现象。
这种方式可以大大缩短丢包重传的时间,提高数据传输的时效性。
Fast Recovery算法主要是在Fast Retransmit中进一步进行优化,当收到重复的确认数据包时,TCP协议会认为数据包已经被正确接收,此时会立即完成重传操作并根据网络反馈情况以逐渐增加发送速率的方式来提高数据传输效率。
TCP拥塞控制算法的调优实践TCP拥塞控制算法的调优是一项非常复杂的工作,需要综合考虑网络拓扑结构、流量类型、网络负载情况等多个因素。
计算机网络中的拥塞控制算法

计算机网络中的拥塞控制算法一、引言计算机网络中的拥塞控制算法是指在网络传输数据时,为了避免网络拥塞导致传输性能下降、数据丢失等问题,采用的一种控制方法。
拥塞控制算法包括多种,如TCP的拥塞控制算法、UDP 的拥塞控制算法、RED算法等,本文将重点介绍TCP的拥塞控制算法。
二、TCP的拥塞控制算法TCP的拥塞控制算法主要包括四种:慢启动、拥塞避免、快速重传、快速恢复。
1. 慢启动慢启动是TCP连接刚开始传送数据时启用的一种算法。
慢启动将初始窗口大小设为一个很小的值,然后每经过一个往返时间RTT,增加窗口的大小,直到达到一个拥塞阈值(cwnd)。
超过拥塞阈值后,进入拥塞避免算法。
慢启动中主要涉及两个参数:拥塞窗口大小(cwnd)和拥塞阈值(ssthresh)。
慢启动的主要思想是控制发送方数据速率,使其不断逼近网络的传输极限。
通过控制拥塞窗口大小,发送方可以平衡网络吞吐量和丢包率,避免网络拥塞。
慢启动算法的伪代码如下:if (cwnd <= ssthresh) {cwnd = cwnd + 1;} else {cwnd = cwnd + 1/cwnd;}2. 拥塞避免拥塞避免算法是在慢启动后,当拥塞窗口大小超过拥塞阈值时启用的一种算法。
拥塞避免算法中,每经过一个RTT,拥塞窗口的大小增加一个MSS(最大分段大小),从而每个RTT可以传输更多的数据。
当出现拥塞情况时,TCP会将拥塞阈值减半,同时进入慢启动算法。
拥塞避免算法的伪代码如下:if (cwnd > ssthresh) {cwnd = cwnd + 1/cwnd;}3. 快速重传快速重传算法是当TCP收到重复的数据时,立即发送重复的确认,而不等待超时重传计时器,从而提高数据传输的速率。
当收到重复的确认后,TCP会将拥塞窗口大小减半并重新进入拥塞避免算法。
快速重传算法的伪代码如下:if (duplicate_ack_received) {cwnd = cwnd/2;ssthresh = cwnd;}4. 快速恢复快速恢复算法是在快速重传算法后,立即发送数据而不等待拥塞避免算法重新检查网络,从而提高数据传输的速率。
网络拥塞控制算法总结

网络拥塞控制算法总结网络拥塞控制是指在网络通信过程中,通过合理的算法和策略来控制网络中数据流量的流动,以避免网络拥塞的发生。
网络拥塞会造成数据包丢失、延迟增加以及网络性能下降等问题,因此拥塞控制算法的设计和实现对于网络的稳定运行至关重要。
下面将会介绍几种常见的网络拥塞控制算法及其特点。
第一种算法是最早采用的拥塞控制算法——慢开始(Slow Start)。
慢开始算法是由Van Jacobson在TCP/IP协议中提出的,用于在开始发送数据时快速扩大拥塞窗口,同时在网络出现拥塞时快速减小拥塞窗口。
具体实现方式是通过指数增加拥塞窗口的大小,直到遇到拥塞发生为止。
慢开始算法的特点是能够快速适应网络环境的变化,但容易引起网络拥塞。
第二种算法是拥塞避免(Congestion Avoidance)。
拥塞避免算法是在慢开始算法的基础上进行改进的,主要解决了慢开始算法容易引发网络拥塞的缺点。
拥塞避免算法通过线性增加拥塞窗口的大小来避免网络拥塞的发生。
具体实现方式是每次接收到一个确认ACK就递增拥塞窗口的大小,从而平滑地增大网络的负载,减小拥塞的可能性。
拥塞避免算法相对于慢开始算法,能够更加稳定地控制网络拥塞,但是在网络拥塞后仍然需要通过慢开始算法来恢复网络的稳定性。
第三种算法是快重传(Fast Retransmit)。
快重传算法是一种TCP 数据传输的拥塞控制算法,主要用于解决包丢失问题。
当发送方连续接收到三个相同的ACK确认报文时,就会触发快重传算法。
快重传算法的基本原则是,当接收到重复的ACK报文时,会认为已经丢失的报文已经到达接收方,而不是等待超时重传。
通过快速重传概念,可以减少数据传输的延迟,提高网络的传输效率。
第四种算法是拥塞避免和快重传的综合算法——TCP Tahoe。
TCP Tahoe是一种动态调整拥塞窗口的算法,能够根据网络拥塞程度来灵活调整数据传输速度。
TCP Tahoe的核心思想是通过快重传和拥塞避免算法相结合来进行拥塞控制。
tcp的拥塞控制方法

tcp的拥塞控制方法TCP的拥塞控制方法TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它在互联网中扮演着重要的角色。
在TCP协议中,拥塞控制是一项非常重要的功能,它可以避免网络拥塞,保证网络的稳定性和可靠性。
本文将介绍TCP的拥塞控制方法。
TCP的拥塞控制方法主要包括四个方面:慢启动、拥塞避免、快重传和快恢复。
下面将分别介绍这四个方面的内容。
一、慢启动慢启动是TCP的一种拥塞控制算法,它的目的是在TCP连接开始时,尽可能快地找到网络的最大带宽。
在慢启动阶段,TCP发送方会将拥塞窗口cwnd的大小从一个初始值开始逐渐增加,直到网络出现拥塞为止。
具体来说,TCP发送方会将cwnd的大小设置为一个初始值(通常为2个MSS),然后每经过一个往返时间RTT(Round Trip Time),cwnd的大小就会翻倍。
例如,如果初始值为2个MSS,第一个RTT结束后cwnd的大小为4个MSS,第二个RTT 结束后cwnd的大小为8个MSS,以此类推。
这样做的目的是为了尽可能快地找到网络的最大带宽,从而提高TCP连接的传输效率。
二、拥塞避免拥塞避免是TCP的另一种拥塞控制算法,它的目的是在TCP连接运行过程中,尽可能地避免网络拥塞。
在拥塞避免阶段,TCP发送方会将拥塞窗口cwnd的大小逐渐增加,但是增加的速度会比慢启动阶段慢一些。
具体来说,TCP发送方会在每个RTT结束后将cwnd 的大小增加1个MSS,而不是翻倍。
这样做的目的是为了避免网络拥塞,从而保证TCP连接的稳定性和可靠性。
三、快重传快重传是TCP的一种拥塞控制算法,它的目的是在TCP连接出现数据包丢失时,尽可能快地重传丢失的数据包,从而避免网络拥塞。
在快重传算法中,TCP发送方会在接收到三个重复的ACK (Acknowledgement)时,立即重传丢失的数据包,而不是等待超时后再重传。
这样做的目的是为了尽可能快地恢复丢失的数据包,从而避免网络拥塞。
拥塞控制的四种典型方法

拥塞控制的四种典型方法1. 慢启动算法(Slow Start Algorithm):慢启动算法是TCP拥塞控制中的一种经典方法。
在慢启动阶段,发送方每经过一个往返时间(RTT),就将发送窗口的大小加倍。
这样,发送方可以利用较小的窗口先探测网络的拥塞程度,逐渐增加发送窗口,直到遇到网络拥塞的状况。
一旦发现网络拥塞,发送方会根据拥塞信号减少发送窗口的大小,从而达到拥塞控制的目的。
2. 拥塞避免算法(Congestion Avoidance Algorithm):拥塞避免算法是TCP拥塞控制中的另一种重要方法。
在拥塞避免阶段,发送方将发送窗口的大小按线性方式递增,而不是指数增长。
这种线性增长能够更好地避免网络拥塞的发生。
同时,发送方也会周期性地检测网络的拥塞程度,根据情况调整发送窗口的大小。
如果发现网络出现拥塞,发送方会采取相应的措施,如减小发送窗口等。
3. 快速重传算法(Fast Retransmit Algorithm):快速重传算法是TCP拥塞控制的一种补充方法,用于解决发送方超时重传的问题。
当接收方在收到数据包之后发现连续的数据包丢失,则会立即发送一个重复ACK(Acknowledgement)给发送方,告诉它有一个数据包丢失。
发送方在收到重复ACK之后,会判断是否有丢失的数据包,如果有,则会立即进行快速重传,而不是等待超时重传定时器到期。
通过快速重传,可以更快地恢复丢失的数据包,从而减少拥塞的发生。
4. 拥塞恢复算法(Congestion Recovery Algorithm):拥塞恢复算法是TCP拥塞控制中的一种重要方法。
它用于在网络出现拥塞时,恢复正常的数据传输速率。
当发送方发现网络拥塞时,会将发送窗口的大小减半,以降低数据传输的速率。
然后,发送方会进入拥塞避免阶段,以线性的方式增加发送窗口的大小。
当网络拥塞情况改善后,发送方会逐渐增加发送窗口的大小,最终恢复到网络的正常传输速率。
以上是拥塞控制的四种典型方法,它们在TCP协议中被广泛应用。
linux tcp默认拥塞控制算法

linux tcp默认拥塞控制算法TCP(Transmission Control Protocol,传输控制协议)是一种可靠的、面向连接的网络协议,用于在IP网络上进行数据传输。
在Linux系统上,TCP默认使用的拥塞控制算法主要有Reno、Cubic和BBR。
1. Reno算法:Reno算法是TCP最早的拥塞控制算法之一,它是基于丢包的拥塞控制算法。
Reno算法使用了两个阈值来控制发送速率,分别是慢启动阈值和拥塞避免阈值。
在慢启动阶段,发送方每经过一个往返时间RTT (Round Trip Time),就将拥塞窗口大小加倍,这样就能快速适应网络带宽。
一旦出现拥塞,就会触发拥塞避免阶段,发送速率会缓慢增长。
当发生丢包时,发送方会认为发生了拥塞,将拥塞窗口大小减半。
2. Cubic算法:Cubic算法是在Reno算法的基础上进行改进的,主要解决了Reno算法的不足之处。
Cubic算法使用了一个拟合曲线来估计网络的拥塞程度,并根据该拟合曲线调整发送速率。
Cubic算法中的拥塞控制机制是基于时间的,通过跟踪拥塞窗口的快速增长速率来判断网络的拥塞程度。
当网络发生拥塞时,拥塞窗口的增长速率会变得缓慢,从而降低发送速率。
3. BBR算法:BBR(Bottleneck Bandwidth and RTT)算法是Google开发的一种最新的拥塞控制算法,主要用于提高网络的传输效率。
BBR算法通过测量网络的带宽和往返时间来估计网络的拥塞程度,并根据拥塞程度调整发送速率。
BBR算法的特点是能够更精确地估计网络的拥塞程度,从而避免了过度拥塞和欠拥塞的情况,提高了网络的传输速度和稳定性。
总结:Linux TCP默认的拥塞控制算法主要有Reno、Cubic和BBR。
Reno 算法是基于丢包的拥塞控制算法,使用了慢启动和拥塞避免两个阈值来控制发送速率。
Cubic算法在Reno算法的基础上进行改进,使用拟合曲线来估计网络的拥塞程度,并根据拥塞程度调整发送速率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCP协议拥塞控制算法研究摘要:自从1986年互联网出现严重的拥塞崩溃现象后,网络拥塞控制受到了广泛的关注。
随着网络的不断发展,网络用户及需求急剧增加,网络拥塞也越来越严重。
如何有效解决网络拥塞,成为人们急需解决的问题。
TCP作为目前互联网上使用最广泛的一种传输协议,TCP拥塞控制机制对互联网的稳定运行起着重要的作用。
本文阐述了TCP的拥塞控制机制以及几种TCP拥塞控制算法,并对它们进行了仿真,比较了他们各自的优缺点,并指出了进一步改进TCP拥塞控制的必要性。
关键字:互联网;TCP;拥塞控制Abstract:Since the advent of the Internet congestion collapse in 1986, network congestion control has been widespread concern. With the continuous development of the network, network users and the demand are increasing rapidly, network congestion has become increasingly serious. How to effectively solve network congestion become an urgent problem. TCP currently used on the Internet as the most widely used transport protocol, TCP congestion control mechanisms for the stable operation of the Internet plays an important role. This paper describes the TCP congestion control mechanisms as well as several TCP congestion control algorithms, and their simulation to compare their advantages and disadvantages, and pointed out the need for further improvement of TCP congestion control.Keywords:Internet;TCP;Congestion control1 引言近年来以IP为基础的internet呈爆炸式增长,网络用户数量迅速增加,internet 在各个领域也发挥着越来越重要的作用,但随着其流量急剧增加,由此而引发的网络拥塞已经成为制约网络发展和应用的瓶颈问题。
在计算机网络中的宽带、交换节点中的缓存和处理机等,都是网络资源。
如果网络相对于负载需求表现为节点存储空间不足、链路带宽不足、处理器处理速度慢,以及系统各部分性能不匹配等等,从而导致网络上的包时延增加,丢包率上升,吞吐量下降,直接使服务质量下降。
概括来说就是在某一时间段里,如果网络中的某一资源的需求量超过了该网络所能提供的网络资源的可用部分,网络的性能就能变坏。
诸如网络延时加大、丢包率上升、吞吐量下降等。
这种情况就叫做拥塞。
即∑对资源的需求>可用资源。
TCP/IP(Transmission Control Protocol/Internet Protocol)是目前Internet使用最广泛的一组通信协议[1]。
TCP所负责的功能包括:将自应用程序收到的信息分成许多较小的数据区段、提供连接导向的服务、提供可靠性服务、提供应用程序与应用和式之间的流量控制,并依据网络的状况提供拥塞控制。
当应用程序有数据要传送到网上去时,为了希望能和网络上其他的TCP联机公平地共享频宽等资源并避免造成网络拥塞,由TCP通过拥塞控制机制来控制允许传送到网络上的数据量。
因此,在Internet中,拥塞控制的大部分工作是由TCP完成的。
2造成拥塞的原因(1)存储空间不足. 几个输入数据流共同需要同一个输出端口, 在这个端口就会建立排队。
如果没有足够的存储空间存储, 数据包就会丢弃。
对突发数据流更是如此。
增加存储空间在某种程度上可以缓解这一矛盾, 但如果路由器有无限存储量时, 拥塞只会变得更坏, 而不是更好, 因为在网络里数据包经过长时间排队完成转发时, 它们早已超时, 源端认为它们已经被丢弃, 而这些数据包还会继续向下一路由器转发, 从而浪费网络资源, 加重网络拥塞。
(2)带宽容量不足. 低速链路对高速数据流的输入也会产生拥塞。
根据香农信息理论, 任何信道带宽最大值即信道容量C = B log2 (1+ Sö N ) (N 为信道白噪声的平均功率, S 为信源的平均功率,B 为信道带宽)。
所有信源发送的速率R 必须小于或等于信道容量C。
如果R > C, 则在理论上无差错传输就是不可能的, 所以在网络低速链路处就会形成带宽瓶颈, 当其满足不了通过它的所有源端带宽要求时,网络就会发生拥塞。
(3)处理器处理能力弱、速度慢也能引起拥塞。
如果路由器的CPU 在执行排队缓存, 更新路由表等功能时, 处理速度跟不上高速链路, 也会产生拥塞. 同样, 低速链路对高速CPU 也会产生拥塞。
3TCP拥塞控制机制拥塞控制的任务是确保子网能够处理承载所到达的流量,这是全局性的问题。
涉及各方面的行为,包括所有的主机、路由器及内部的存储转发过程等;流量控制只与特定的发送方和接收方之间的点到点流量有关,它的做法是接收方向发送方提供某种直接的反馈以通告发方另一端的情况,使发方动态调整发送速率,以确保一个快速的发送方不会持续地以超过接收方能力的速率传输数据。
Internet拥塞控制的大部分工作是由传输层来完成的,因为解决网络拥塞的真正办法就是降低数据发送速率[2]。
目前,在各种TCP协议实现中,一般都包含有四个相互关联的拥塞控制过程:慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快重传(Fast Retransmit)、快恢复(Fast Recovery)[3]。
TCP拥塞控制四个主要过程如下图1和图2所示,具体如下:1、慢启动阶段:早期开发的TCP应用在启动一个连接时会向网络中发送大量的数据包,这样很容易导致路由器缓存空间耗尽,网络发生拥塞,使得TCP连接的吞吐量急剧下降。
由于TCP源端无法知道网络资源当前的利用状况,因此新建立的TCP连接不能一开始就发送大量数据,而只能逐步增加每次发送的数据量,以避免上述现象的发生。
具体地说,当建立新的TCP连接时,拥塞窗口(congestion window,cwnd)初始化为一个数据包大小。
源端按cwnd大小发送数据,每收到一个ACK确认,cwnd就增加一个数据包发送量,显然,cwnd的增长将随RTT呈指数级(exponential)增长:1个、2个、4个、8个……,所以这样cwnd就将随着回路响应时间(Round Trip Time,RTT)呈指数增长,事实上,慢启动一点也不慢。
2、拥塞避免阶段:如果TCP源端发现超时或收到3个相同ACK副本时,即认为网络发生了拥塞(主要因为由传输引起的数据包损坏和丢失的概率很小(<<1%))。
此时就进入拥塞避免阶段:慢启动阈值(ssthresh)被设置为当前拥塞窗口大小的一半;超时时,拥塞窗口被置1。
如果cwnd<ssthresh,TCP执行拥塞避免算法。
如果cwnd>ssthresh,TCP就执行拥塞避免算法,此时,cwnd在每次收到一个ACK时只增加1/cwnd个数据包,这样,在一个RTT内,cwnd将增加1,所以在拥塞避免阶段,cwnd不是呈指数增长,而是线性增长。
3、快速重传和快速恢复阶段:快速重传是当TCP源端收到到三个相同的ACK 副本时,即认为有数据包丢失,则源端重传丢失的数据包,而不必等待RTO超时。
同时将ssthresh设置为当前cwnd值的一半,并且将cwnd减为原先的一半。
快速恢复是在上述的“快速重传”算法后添加的,当收到3个重复ACK时,TCP 最后进入的不是拥塞避免阶段,而是快速恢复阶段。
快速重传和快速恢复算法一般同时使用。
快速恢复的思想是“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后,才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK,那么根据TCP的ACK机制就表明有一个数据包离开了网络,于是cwnd加1。
如果能够严格按照该原则那么网络中很少会发生拥塞,事实上拥塞控制的目的也就在修正违反该原则的地方。
图1:慢启动和拥塞避免图2:快速重传和快速恢复4 典型TCP拥塞控制算法分析TCP发展到现在已经形成了TCP Tahoe、TCP Reno、TCP NewReno、SACK、Vegas等不同版本,算法各有利弊。
下面简要分析下这几种典型的算法。
4.1 TCP Tahoe算法Tahoe算法是TCP的早期版本。
它的核心思想是:让cwnd以指数增长方式迅速逼进可用信道容量,然后慢慢接近均衡。
Tahoe包括3个基本的拥塞控制算法:”慢启动”、“拥塞避免”和“快速重传”[4]。
Tahoe的缺点体现在快速重传后转向慢启动算法,这样不能有效的利用网络带宽并且还引入较大的延时。
4.2 TCP Reno针对Tahoe算法的不足之处,1990年Jacobson在Tahoe的基础上提出了改进算法Reno。
改进主要有两个方面:一是对于收到连续3个重复ACK,算法不经过慢启动,而直接进入拥塞避免阶段;二是增加了快恢复机制。
和Tahoe相比较,Reno在快重传后并不将cwnd减至1后进入慢启动阶段,而是将拥塞窗口减半,进入拥塞避免阶段。
这是因为与发生超时事件不同,收到冗余的ACK表明发送的其它包已经被接收方收到,两个端系统间仍有数据的流动,网络处于轻度拥塞。
因此,发送端直接将cwnd减至1是不合适的。
从Reno运行机制中很容易看出,为了维持一个动态平衡,必须周期性地产生一定量的丢失,再加上AIMD机制--减少快,增长慢,尤其是在大窗口环境下,由于一个数据报的丢失所带来的窗口缩小要花费很长的时间来恢复,这样,带宽利用率不可能很高且随着网络的链路带宽不断提升,这种弊端将越来越明显。
公平性方面,根据统计数据,Reno的公平性还是得到了相当的肯定,它能够在较大的网络范围内理想地维持公平性原则。
Reno目前被广泛采用,以其算法的简单、有效性成为TCP源算法的主流。
4.3 TCP NewRenoTCP NewReno是基于窗口反馈机制的端到端拥塞控制算法,即发送方根据接收到的反馈包(ACK包)所携带的信息,决定如何调整拥塞窗口的大小。