TCP拥塞控制分析
TCP的流量控制和阻塞控制
![TCP的流量控制和阻塞控制](https://img.taocdn.com/s3/m/7d62470fc4da50e2524de518964bcf84b9d52d14.png)
TCP的流量控制和阻塞控制流量控制和阻塞控制实例:可以⽤⼀个例⼦来说明这种区别。
设某个光纤⽹络的链路传输速率为1000Gbit/s。
有⼀台巨型计算机向⼀台个⼈电脑以1Gbit/s的速率传送⽂件。
显然,⽹络本⾝的带宽是⾜够⼤的,因⽽不存在产⽣拥塞的问题。
但流量控制却是必须的,因为巨型计算机必须经常停下来,以便使个⼈电脑来得及接收。
(流量控制)但如果有另⼀个⽹络,其链路传输速率为1Mbit/s,⽽有1000台⼤型计算机连接在这个⽹络上,假定其中的500台计算机分别向其余的500台计算机以100kbit/s的速率发送⽂件。
那么现在的问题已不是接收端的⼤型计算机是否来得及接收,⽽是整个⽹络的输⼊负载是否超过⽹络所能承受的。
(阻塞控制)TCP流量控制1.什么是流量控制? 所谓的流量控制就是让发送⽅的发送速率不要太快,让接收⽅来得及接受。
2.什么⽅式进⾏流量控制? a.利⽤滑动窗⼝机制可以很⽅便的在TCP连接上实现对发送⽅的流量控制。
b.TCP的窗⼝单位是字节,不是报⽂段,发送⽅的发送窗⼝不能超过接收⽅给出的接收窗⼝的数值。
滑动窗⼝机制⽰意图:1.设A向B发送数据。
在连接建⽴时,B告诉了A:“我的接收窗⼝rwnd = 400”(这⾥rwnd表⽰recevier window)。
2.发送⽅的发送窗⼝不能超过接收⽅给出的接收窗⼝的数值,请注意,TCP的窗⼝单位是字节,不是报⽂段。
3.再设每⼀个报⽂段为100字节长,⽽数据报⽂段序号的初始值设为1(图中第⼀个箭头上⾯的序号为seq=1。
从1开始,data⾥有100个字节的数据。
)4.图中箭头上⾯⼤写ACK表⽰⾸部中的确认位ACK(应答标识,表⽰接收到信息),⼩写ack表⽰确认字段的值(表⽰接收到了哪些具体的数据)。
a.接收⽅的主机N进⾏了三次流量控制,第⼀次把窗⼝减⼩到rwnd =300。
b.第⼆次⼜减⼩到rwnd = 100。
c.最后减到rwnd = 0,即不允许发送⽅再发⽣数据了。
基于TCP的网络拥塞控制研究
![基于TCP的网络拥塞控制研究](https://img.taocdn.com/s3/m/7348ebdc84254b35eefd3456.png)
2 、如没有使用路由器, 就要求 T C P发送端的拥塞控制进行改变, 在拥
塞避免 阶段是共享同一资源的 T C P 连接以相 同速度发送数据。 3 、 可以考虑引入发送优先级的概念, 拒绝大范围的同时发送 同一共享 资源, 而是按照优先级有先后次序的逐个 发送, 优先级的使用 可以仿造 进 程优先级的管理方式, 动态变化, 实时调整以加强有效利用率。
合理的 s s t h r e s h值并不容易, 因此这个方法的效果是有限的。而 S m o o t h —
s t a r t 较为平滑地从慢启动过渡到拥塞避免阶段, 减少 了报文段丢失和突发
传送信息的中介, 以此来达到整个网络资源 的共享。这样 的方式便于在 网 络 中查找某个特定 的主机, 但 随着 主机数量的增多和数据传输量的增大,
一
参考文献
[ 1 】 S T E V E N S W . T C P S I O W S t a r t ,c o n g e s t i o n a v o i d a n c e , f a s t r e t r a n s m i t , a n d f a s t r e c o wr y a l g o r i t h m s 【 E B / 0 L 】 . [ 2 】 A L L M A N M , B A L A K R I S H N A N H , F L O Y D S .E n h a n c i n g T C P’S l o s S r e c o v e r y U S i n g 1 i m i t e d t r a n s m i t [ E B / O L 】 .
TCP拥塞控制
![TCP拥塞控制](https://img.taocdn.com/s3/m/32caba55b307e87101f696fe.png)
计算机网络
往返时延RTT优化
往返时间RTT
往返时间:
往返时间(RTT)是指从数据段发送开始,到接 收到该数据段对应应答所经历的时间,主要由链路传播时 间、端系统处理时间和路由器排队/处理时间组成。 对同一个TCP连接,链路传播时间、端系统处理 时间相对固定,因此,网络拥塞情况可通过路由器排队/ 处理时间的变化而推断。
其中: pi为第i条路径的丢包率, RTTi为第i条路径的往返时延, b为每个ACK应答的分组数, pktsize为分组的大小, n为路径的总数。
基于MFD的多路径算法
可见, 要在给定的网络条件下提高端到端吞吐率, 必须减小往返时延RTTi。路径的往返时延是正向路径时延 以及反向路径时延之和。 第i条路径对应的正向路径时延为fi, 反向路径时延 为ri.不失一般性,假设ri≤ri +1(1≤i≤n)。如果采取MTCP算法, 则RTTi =fi+ri。 为了提高吞吐率,可以采用最小反馈时延MFD的多径 传输协议, 即选取时延最小的反向路径来传输应答分组。 MFD可以减少各条路径的往返时延 RTT‘i=fi+r1<fi+ri=RTTi ,从而提高端到端的吞吐率, 降低拥塞。
Freeze-TCP
Freeze-TCP用于解决主机移动所引起的丢包. 主要思想: 让移动主机监测无线信号的能量,并检测出即将发生 的主机切换事件.当切换即将发生时,移动主机向发送者 发送一个通告窗口为零的反馈,从而迫使发送者进入零窗 口探测模式. 在零窗口探测模式中,发送者不会改变它的拥塞窗口 和超时计时器的时长.
RTT分析
在无线环境下,忽略链路传播时延的前提下,在误码 丢包的作用下,RTT呈现无规律变化,且有趋小趋势. 因此,在无线环境下,考察RTT的变化区分误码丢 包与拥塞丢包进行发送速率的调整是可行的:在RTT变 小时,说明网络拥塞丢包风险小,拥塞窗口向下调整幅度 应较小;在RTT变大时,说明网络拥塞丢包风险大,拥 塞窗口向下调整幅度应较大,是符合无线网络实际情况的。
《TCP的拥塞控制》课件
![《TCP的拥塞控制》课件](https://img.taocdn.com/s3/m/411d7b70b80d6c85ec3a87c24028915f804d841f.png)
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
24 20
ssthresh 的初始值16
拥塞避免 “加法增大”
网络拥塞
拥塞避免 “加法增大” “乘法减小”
新的 ssthresh 值12
慢开始
8
4
指数规律增长
传输轮次
0
0 2 4 6 8 10 12 14 16 18 20 22
慢开始
慢开始
发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端 窗口 rwnd 中的最小值。我们假定接收端窗口足够大, 因此现在发送窗口的数值等于拥塞窗口的数值。
● 使用慢开始算法后,每经过一个传输轮次,拥塞窗 口 cwnd 就加倍。
● 一个传输轮次所经历的时间其实就是往返时间 RTT。
●“传输轮次”更加强调:把拥塞窗口 cwnd 所允许 发送的报文段都连续发送出去,并收到了对已发送 的最后一个字节的确认。
● 例如,拥塞窗口 cwnd = 4,这时的往返时间 RTT 就是发送方连续发送 4 个报文段,并收到这 4 个报 文段的确认,总共经历的时间。
慢开始算法的原理
●在主机刚刚开始发送报文段时可先设置拥塞 窗口 cwnd = 1,即设置为一个最大报文段 MSS 的数值。
●在 每 收 到 一 个 对 新 的 报 文 段 的 确 认 后 , 将 拥 塞窗口加 1,即增加一个 MSS 的数值。
●用 这 样 的 方 法 逐 步 增 大 发 送 端 的 拥 塞 窗 口 cwnd,可以使分组注入到网络的速率更加合 理。
cwnd = 1 cwnd = 2
发送方每收到一个对新报文段的确认 (重传的不算在内)就使 cwnd 加 1。
发送方
接收方
发送 M1
linux tcp默认拥塞控制算法 -回复
![linux tcp默认拥塞控制算法 -回复](https://img.taocdn.com/s3/m/b6bd312249d7c1c708a1284ac850ad02df80074f.png)
linux tcp默认拥塞控制算法-回复Linux TCP默认拥塞控制算法在网络通信中,TCP(Transmission Control Protocol)是一种重要的传输层协议,负责确保数据可靠地传输。
拥塞控制是TCP的一个重要组成部分,它通过控制数据包的发送速率来避免网络拥塞,保证网络的稳定性和可靠性。
Linux作为一种主流的操作系统,采用了多种拥塞控制算法来实现这一目标。
本文将以“Linux TCP默认拥塞控制算法”为主题,以简明的方式一步一步回答,让读者更好地理解Linux TCP默认拥塞控制算法。
1. 什么是拥塞控制算法?拥塞控制算法是一种用于调节数据包发送速率的策略,以确保网络能够处理并传输数据,同时避免引发网络拥塞。
拥塞控制算法通过不断地监测网络的状态,并根据网络的反馈信息(如丢包、延迟等)调整数据包的发送速率,从而保证网络的稳定性。
2. Linux TCP默认拥塞控制算法是什么?Linux操作系统中,默认拥塞控制算法被称为“CUBIC”(Compound TCP)。
CUBIC是一种基于窗口的拥塞控制算法,相对于其他传统算法,如Reno 和New Reno,CUBIC具有更好的网络吞吐量和鲁棒性。
3. CUBIC拥塞控制算法的原理是什么?CUBIC算法通过观察网络传输的RTT(Round-Trip Time)变化来进行拥塞控制。
RTT指的是从数据包发送到接收并返回所需的时间。
CUBIC算法利用TCP拥塞窗口(cwnd)来调整数据包的发送速率。
它通过维护一个“拥塞窗口”的概念,该窗口决定了在每个RTT周期结束时发送的数据包数量。
当网络拥塞时,CUBIC算法将减小拥塞窗口的大小,以避免过多的数据包进入网络导致更严重的拥塞。
当网络恢复时,CUBIC算法会逐渐增加拥塞窗口的大小,以提高发送速率。
4. CUBIC算法与其他拥塞控制算法的区别是什么?相对于传统的Reno和New Reno算法,CUBIC算法在处理长距离和高带宽网络连接时表现更优秀。
TCP拥塞控制算法研究
![TCP拥塞控制算法研究](https://img.taocdn.com/s3/m/3e68062f4b35eefdc8d333c6.png)
to i n.
KEYW ORDS:C n e t n c n r l P c e o s rt s T ru h u o g si o to ; a k tls ae ; h o g p t o
题 , 吐量往往 不能达 到应用 的实际需求 。其 中的 P 吞 C
l 引言
因特 网的迅速发展带 来 了严 重的 网络拥 塞 问题 。其 根 本原因在于用户提供 给网络 的负载大 于网络资 源容 量和处
一
种改进的 T P拥塞控制算法。算法根据 网络拥塞跟 回路响应时间的大小成正比的关 系, 源端检测 回路 响应 时间值 , C 在 同
tcp使用的阻塞控制机制
![tcp使用的阻塞控制机制](https://img.taocdn.com/s3/m/3d2987c99f3143323968011ca300a6c30c22f1c9.png)
tcp使用的阻塞控制机制
TCP使用的阻塞控制机制主要有以下几种:
1.慢启动(Slow Start):这是TCP使用的一种阻塞控制机制,也被称为指数增长期。
在慢启动阶段,TCP每次收到接收窗口的确认时,都会增加已确认段的数目,这种情况一直持续到要么没有新的段收到,要么窗口大小达到预先定义的阈值。
如果发生丢失事件,TCP 就认为这是网络阻塞,就会采取措施减轻网络拥挤。
一旦发生丢失事件或者到达阈值,TCP就会进入线性增长阶段。
2.拥塞控制(Congestion Control):当网络出现拥塞时,TCP 会减少发送的数据量,以避免网络拥塞进一步恶化。
具体来说,当TCP发现网络出现拥塞时,它会将窗口大小减小到1个段,并开始执行“慢启动”算法。
3.快重传(Fast Retransmit):当TCP收到3个以上的相同确认时,就认为数据段丢失了,这时TCP会立即重传丢失的数据段,而不必等待定时器的超时。
4.快恢复(Fast Recovery):在发生数据段丢失后,TCP会立即执行快恢复算法,重新设定拥塞窗口大小,并开始执行“快重传”算法。
这些是TCP主要的阻塞控制机制。
TCPIP详解学习笔记(15)--TCP的流量控制和拥塞控制
![TCPIP详解学习笔记(15)--TCP的流量控制和拥塞控制](https://img.taocdn.com/s3/m/b0646b68178884868762caaedd3383c4bb4cb4de.png)
TCPIP详解学习笔记(15)--TCP的流量控制和拥塞控制TCP的流量控制1.概述所谓的流量控制就是让发送⽅的发送速率不要太快,让接收⽅来得及接受。
利⽤滑动窗⼝机制可以很⽅便的在TCP连接上实现对发送⽅的流量控制。
TCP的窗⼝单位是字节,不是报⽂段,发送⽅的发送窗⼝不能超过接收⽅给出的接收窗⼝的数值。
如图所⽰,说明了利⽤可变窗⼝⼤⼩进⾏流量控制。
设主机A向主机B发送数据。
双⽅确定的窗⼝值是400.再设每⼀个报⽂段为100字节长,序号的初始值为seq=1,图中的箭头上⾯⼤写ACK,表⽰⾸部中的却认为为ACK,⼩写ack表⽰确认字段的值。
接收⽅的主机B进⾏了三次流量控制。
第⼀次把窗⼝设置为rwind=300,第⼆次减⼩到rwind=100最后减到rwind=0,即不允许发送⽅再发送过数据了。
这种使发送⽅暂停发送的状态将持续到主机B重新发出⼀个新的窗⼝值为⽌。
假如,B向A发送了零窗⼝的报⽂段后不久,B的接收缓存⼜有了⼀些存储空间。
于是B向A发送了rwind=400的报⽂段,然⽽这个报⽂段在传送中丢失了。
A⼀直等待收到B发送的⾮零窗⼝的通知,⽽B也⼀直等待A发送的数据。
这样就死锁了。
为了解决这种死锁状态,TCP为每个连接设有⼀个持续计时器。
只要TCP连接的⼀⽅收到对⽅的零窗⼝通知,就启动持续计时器,若持续计时器设置的时间到期,就发送⼀个零窗⼝探测报⽂段(仅携带1字节的数据),⽽对⽅就在确认这个探测报⽂段时给出了现在的窗⼝值。
2.TCP报⽂段发送时机的选择TCP豹纹短短发送时机主要有以下⼏种选择途径。
1)TCP维持⼀个变量,它等于最⼤报⽂段长度MSS,只要缓存中存放的数据达到MSS字节就组装成⼀个TCP报⽂段发送出去。
2)由发送⽅的应⽤程序指明要求发送报⽂段,即TCP⽀持的推送操作3)是发送⽅的⼀个计时器期限到了,这时就把当前已有的缓存数据装⼊报⽂段发送出去。
TCP的拥塞控制1.拥塞控制的原理在某段时间,若对⽹络中的某⼀资源的需求超过了该资源所能提供的可⽤部分,⽹络的性能就要变化,这种情况叫做拥塞。
tcpip拥塞控制、重传、丢包、优化
![tcpip拥塞控制、重传、丢包、优化](https://img.taocdn.com/s3/m/d1b8bc18591b6bd97f192279168884868762b835.png)
tcpip拥塞控制、重传、丢包、优化弱⽹环境是丢包率较⾼的特殊场景,TCP 在类似场景中的表现很差,当 RTT 为 30ms 时,⼀旦丢包率达到了 2%,TCP 的吞吐量就会下降89.9%[3],从下⾯的表中我们可以看出丢包对 TCP 的吞吐量极其显著的影响:概念理解4种计时器1.重传计时器:Retransmission Timer A发报⽂时创建计时器,计时器到期内收到回报⽂ACK,就撤销计时器2.持久计时器:Persistent Timer B告诉A,接收窗⼝填满了(0窗⼝通报),告诉A停⽌发送,进⼊等待,直到B发送报⽂告诉A已有“⾮零窗⼝”,但此时若这个报⽂丢失,B⾃⼰不知道,等着A发数据过来,双⽅都进⼊等待死锁,解决这个问题要在A端创建持久计时器,当收到B发送过来的0窗⼝通报报⽂后,计时器启动,计时器过期后,A发⼀个探测报⽂给B,询问是否有⾮0窗⼝,如果超时还没ack恢复则发探查报⽂,如果超时前收到到ack回复依然是0窗⼝,则将计时器复位并且翻倍时间值(1,2,4,8最⼤60s),如此循环,直到收到B的重开窗⼝确认包。
3.保活计时器:Keeplive Timer 长连接中A发送数据给B,发送⼏个数据包之后,A出故障了,B等待2⼩时后发10个探测报⽂段(每个75分钟发⼀次),如果没有响应就终⽌连接4.时间等待计时器:Timer_Wait Timer time_wati状态下发出的给被关闭端ack报⽂后等待时间(30~120s),⼀般设置⼀个msl(最长报⽂寿命)是60s包重传的原因tcp可靠性通过序列号和ack确认包保障,当tcp发送包之后,将这个包的副本数据段放到重传队列上启动重传计时器1、如果对⽅反馈ack,则销毁数据段和计时器2、如果对⽅没有反馈ack,则在计时器到期后发起重传快速重传:A向B发送4个tcp报⽂段(n1,n2,n3,n4),B只收到(n1,n2,n4),其中n3丢失(也许只是延时到达),B发现失序⽴即⽣成重复ACK包(重复确认n3),且发送三次给A,A重传该数据包超时重传:定时器超时之后,重传包,计时器的时间为“⼤于平均往返延迟”伪超时和重传:过早的判断了超时时间,导致发送⽅触发重传,RTT(连接往返时间)增长超过RTO(重传超时时间)包失序:ip层的包没有按顺序传输,严重失序时,接收⽅误以为包丢失,通知发送端重传,需要设置合理的重传阀值解决包重复:重传包含⼀个数据包,以及两个副本,多次重复会导致B收到过多重复包,从⽽B⽣成重复的ack,容易触发伪快速重传,使⽤sack 避免sack:当出现包失序、⽹络丢包导致的接收⽅数据序队列出现空洞,sack选项可以提供确认信息(描述乱序、空洞),帮助A⽅有效的重传。
TCP慢启动,拥塞控制,ECN笔记
![TCP慢启动,拥塞控制,ECN笔记](https://img.taocdn.com/s3/m/1d489acb51e2524de518964bcf84b9d528ea2c36.png)
TCP慢启动,拥塞控制,ECN笔记TCP慢启动,拥塞控制,ECN 笔记1,TCP慢启动TCP在连接过程的三次握⼿完成后,开始传数据,并不是⼀开始向⽹络通道中发送⼤量的数据包,这样很容易导致⽹络中路由器缓存空间耗尽,从⽽发⽣拥塞;⽽是根据初始的cwnd⼤⼩逐步增加发送的数据量,cwnd初始化为1个最⼤报⽂段(MSS)⼤⼩(这个值可配置不⼀定是1个MSS);每当有⼀个报⽂段被确认,cwnd⼤⼩指数增长。
开始 —> cwnd = 11个RTT后 —> cwnd = 2*1 = 22个RTT后 —> cwnd = 2*2= 43个RTT后 —> cwnd = 4*2 = 82,拥塞避免cwnd不能⼀直这样⽆限增长下去,⼀定需要某个限制。
TCP使⽤了⼀个叫慢启动门限(ssthresh)的变量,⼀旦cwnd>=ssthresh(⼤多数TCP 的实现,通常⼤⼩都是65536),慢启动过程结束,拥塞避免阶段开始;拥塞避免:cwnd的值不再指数级往上升,开始加法增加。
此时当窗⼝中所有的报⽂段都被确认时,cwnd的⼤⼩加1,cwnd的值就随着RTT 开始线性增加,这样就可以避免增长过快导致⽹络拥塞,慢慢的增加调整到⽹络的最佳值。
⾮ECN环境下的拥塞判断,发送⽅RTO超时,重传了⼀个报⽂段;1,把ssthresh降低为cwnd值的⼀半;2,把cwnd重新设置为1;3,重新进⼊慢启动过程。
3,快速重传快速重传,TCP在收到重复的3次ACK时,会认为重传队列中的第⼀个报⽂段被⽹络丢弃,但由于收到的重复的3次ACK,则认为该报⽂段之后的三个报⽂已经被接收端收到,则不等待重传定时器超时,直接重发重传队列中的第⼀个报⽂段。
1,把ssthresh设置为cwnd的⼀半2,把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)3,重新进⼊拥塞避免阶段。
4,快速恢复快速恢复的数据包守恒原则,即同⼀个时刻在⽹络中的数据包数量恒定,“⽼”数据包离开后,才能向⽹络中发送“新”的数据包。
tcp协议拥塞控制策略
![tcp协议拥塞控制策略](https://img.taocdn.com/s3/m/c32ce1750a4c2e3f5727a5e9856a561252d32127.png)
tcp协议拥塞控制策略
TCP协议的拥塞控制策略有以下几种:
1. 慢启动:初始时发送窗口大小较小,随着时间的推移逐渐增大,直到达到网络的拥塞程度为止。
慢启动可以有效地利用网络资源,并在网络拥塞出现时降低发送速率。
2. 拥塞避免:一旦网络发生拥塞,TCP会进入拥塞避免状态。
拥塞避免的原理是通过线性增加发送速率,以减少网络拥塞。
发送方每收到一个确认报文段,就将发送窗口的大小增加一个最大报文段长度(MSS)的值。
3. 快速重传与快速恢复:当发送方发送的数据包超时未收到确认时,发送方会假设数据包丢失,会立即重传该数据包,而不是等待超时。
同时,发送方也会将慢启动门限值设为当前拥塞窗口的一半,并直接进入拥塞避免状态,以加快恢复速度。
4. 拥塞检测:当网络发生拥塞时,接收方会根据接收到的乱序报文段来判断网络是否出现了拥塞。
如果发现有报文段丢失,则发送一个重复确认报文段给发送方,以触发发送方进行拥塞避免。
总结起来,TCP协议的拥塞控制策略通过慢启动、拥塞避免、快速重传与快速恢复以及拥塞检测等机制来动态地调整发送速率,以避免网络拥塞并提高网络性能。
深入理解TCP协议及其源代码-拥塞控制算法分析
![深入理解TCP协议及其源代码-拥塞控制算法分析](https://img.taocdn.com/s3/m/64e5e6d4ba4cf7ec4afe04a1b0717fd5360cb2b6.png)
深⼊理解TCP协议及其源代码-拥塞控制算法分析这是我的第五篇博客,鉴于前⾯已经有很多⼈对前四个题⽬如三次握⼿等做了很透彻的分析,本博客将对拥塞控制算法做⼀个介绍。
⾸先我会简要介绍下TCP协议,其次给出拥塞控制介绍和源代码分析,最后结合源代码具体分析拥塞控制算法。
⼀、TCP协议1.TCP协议产⽣背景:互联⽹络与单个⽹络有很⼤的不同,因为互联⽹络的不同部分可能有截然不同的拓扑结构、带宽、延迟、数据包⼤⼩和其他参数,且不同主机的应⽤层之间经常需要可靠的、像管道⼀样的连接,但是IP层不提供这样的流机制,⽽是提供不可靠的包交换。
2.TCP是能够动态地适应互联⽹络的这些特性,⽽且具备⾯对各种故障时的健壮性,且能够在不可靠的互联⽹络上提供可靠的端到端字节流⽽专门设计的⼀个传输协议。
3.TCP作⽤原理过程:应⽤层向TCP层发送⽤于⽹间传输的、⽤8位字节表⽰的数据流,然后TCP把数据流分区成适当长度的报⽂段(通常受该计算机连接的⽹络的数据链路层的最⼤传输单元(MTU)的限制)。
之后TCP把结果包传给IP层,由它来通过⽹络将包传送给接收端实体的TCP层。
TCP为了保证不发⽣丢包,就给每个包⼀个序号,同时序号也保证了传送到接收端实体的包的按序接收。
然后接收端实体对已成功收到的包发回⼀个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进⾏重传。
TCP⽤⼀个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
4.TCP协议作⽤过程的7个要点:数据分⽚、到达确认、超时重发、滑动窗⼝、失序处理、重复处理、数据校验(具体可参见百度百科对TCP的解释)5.TCP⾸部格式图:⼏个重要参数解释如下:紧急 URG —— 当 URG =1 时,表明紧急指针字段有效。
它告诉系统此报⽂段中有紧急数据,应尽快传送(相当于⾼优先级的数据)。
确认 ACK —— 只有当 ACK = 1 时确认号字段才有效。
TCP系列39—拥塞控制—2、拥塞相关算法及基础知识
![TCP系列39—拥塞控制—2、拥塞相关算法及基础知识](https://img.taocdn.com/s3/m/573b41e67d1cfad6195f312b3169a4517723e5b5.png)
TCP系列39—拥塞控制—2、拥塞相关算法及基础知识⼀、拥塞控制的相关算法早期的TCP协议只有基于窗⼝的流控(flow control)机制⽽没有拥塞控制机制,因⽽易导致⽹络拥塞。
1988年Jacobson针对TCP在⽹络拥塞控制⽅⾯的不⾜,提出了“慢启动(Slow Start)”和“拥塞避免(Congestion Avoidance)”算法。
1990年Jacobson⼜做了两个修正。
在这⼆⼗来年的发展过程中,与拥塞控制相关的有四个⽐较重要的版本:TCP Tahoe、TCP Reno、TCP NewReno和TCP SACK。
TCP Tahoe是早期的TCP版本,它包括了3个最基本的算法-“慢启动”、“拥塞避免”和“快速重传(Fast Retransmit)”,但是在Tahoe版本中对于超时重传和快速重传的处理相同,⼀旦发⽣重传就会开始慢启动过程。
TCP Reno则在TCP Tahoe基础上增加了“快速恢复(Fast Recovery)”算法,针对快速重传作出特殊处理,避免了⽹络拥塞不严重时采⽤“慢启动”算法⽽造成过度减⼩发送窗⼝尺⼨的现象。
TCP NewReno对TCP Reno中的“快速恢复”算法进⾏了修正,它考虑了⼀个发送窗⼝内多个数据包丢失的情况。
在Reno版中,发送端收到⼀个新的ack number后就退出“快速恢复” 阶段,⽽在NewReno版中,只有当所有的数据包都被确认后才退出“快速恢复”阶段。
TCP SACK关注的也是⼀个窗⼝内多个数据包丢失的情况,它避免了之前版本的TCP重传⼀个窗⼝内所有数据包的情况,包括那些已经被接收端正确接收的数据包,⽽只是重传那些被丢弃的数据包。
传统的TCP拥塞控制算法主要就由慢启动、拥塞避免、快速重传、快速恢复这4个基础算法组成,这四个基础算法在RFC5681规范中进⾏了描述。
后续我们将会分别对这些拥塞控制相关的算法做介绍,在介绍这些拥塞控制的相关算法之前我们先介绍⼀下拥塞控制中的数据包守恒原则和linux中拥塞控制的背景知识,以⽅便后⾯进⾏更进⼀步的介绍。
79、TCP四大拥塞控制算法总结?(极其重要)
![79、TCP四大拥塞控制算法总结?(极其重要)](https://img.taocdn.com/s3/m/debafe39f011f18583d049649b6648d7c1c70843.png)
79、TCP四⼤拥塞控制算法总结?(极其重要)四⼤算法拥塞控制主要是四个算法:1)慢启动,2)拥塞避免,3)拥塞发⽣,4)快速恢复。
这四个算法不是⼀天都搞出来的,这个四算法的发展经历了很多时间,到今天都还在优化中。
慢热启动算法 – Slow Start所谓慢启动,也就是TCP连接刚建⽴,⼀点⼀点地提速,试探⼀下⽹络的承受能⼒,以免直接扰乱了⽹络通道的秩序。
慢启动算法:1) 连接建好的开始先初始化拥塞窗⼝cwnd⼤⼩为1,表明可以传⼀个MSS⼤⼩的数据。
2) 每当收到⼀个ACK,cwnd⼤⼩加⼀,呈线性上升。
3) 每当过了⼀个往返延迟时间RTT(Round-Trip Time),cwnd⼤⼩直接翻倍,乘以2,呈指数让升。
4) 还有⼀个ssthresh(slow start threshold),是⼀个上限,当cwnd >= ssthresh时,就会进⼊“拥塞避免算法”(后⾯会说这个算法)拥塞避免算法 – Congestion Avoidance如同前边说的,当拥塞窗⼝⼤⼩cwnd⼤于等于慢启动阈值ssthresh后,就进⼊拥塞避免算法。
算法如下:1) 收到⼀个ACK,则cwnd = cwnd + 1 / cwnd2) 每当过了⼀个往返延迟时间RTT,cwnd⼤⼩加⼀。
过了慢启动阈值后,拥塞避免算法可以避免窗⼝增长过快导致窗⼝拥塞,⽽是缓慢的增加调整到⽹络的最佳值。
拥塞发⽣状态时的算法⼀般来说,TCP拥塞控制默认认为⽹络丢包是由于⽹络拥塞导致的,所以⼀般的TCP拥塞控制算法以丢包为⽹络进⼊拥塞状态的信号。
对于丢包有两种判定⽅式,⼀种是超时重传RTO[Retransmission Timeout]超时,另⼀个是收到三个重复确认ACK。
超时重传是TCP协议保证数据可靠性的⼀个重要机制,其原理是在发送⼀个数据以后就开启⼀个计时器,在⼀定时间内如果没有得到发送数据报的ACK报⽂,那么就重新发送数据,直到发送成功为⽌。
tcp的拥塞控制机制
![tcp的拥塞控制机制](https://img.taocdn.com/s3/m/32d2bc8d1b37f111f18583d049649b6648d709a3.png)
tcp的拥塞控制机制一、概述拥塞控制机制是TCP/IP协议族中极其重要的部分。
它主要是为了解决网络中的拥塞问题,以保证TCP/IP网络中的吞吐量,以及网络中流量过大时的系统可靠性等问题。
针对TCP网络的拥塞控制机制,现在已经有三种主流的算法存在:慢启动算法,拥塞避免算法以及快速重传算法。
二、慢启动算法慢启动算法是TCP网络拥塞控制机制中普遍采用的算法。
TCP的慢启动算法最初由 Van Jacobson提出,它主要是为了处理非拥塞状态出现的情况,也是TCP的最基本算法。
慢启动算法的主要特点是:发送端会根据接收端的ACK消息来确定下一次发送数据报文的数据量大小,ACK消息正常到达,发送端就会继续发送数据,从而实现网络流量的正常控制。
慢启动算法的另一个特点是此算法比较简单,实现成本比较低,但是它的性能也比较低。
三、拥塞避免算法拥塞避免算法是TCP网络拥塞控制机制中普遍采用的算法。
它的主要思想是在同一段时间内,每次发送增量固定的报文,使发送端与接收端的传输速率尽量保持一致,以保证网络中报文的流畅传输。
拥塞避免算法的主要特点是:它可以有效解决网络中链路的拥塞问题,并且比较容易实现,它的性能也比较稳定。
四、快速重传算法快速重传算法是TCP网络拥塞控制机制中普遍采用的算法。
它的主要思想是,当接收端接收到发送端发送过来的数据报文,并且这些数据报文没有收到期望的确认返回时,那么发送端就会认为有数据报文丢失,就会采用快速重传机制重新传输数据。
快速重传算法的主要特点是:它能够有效解决TCP网络中的碰撞及传输延迟问题,弥补慢启动算法和拥塞避免算法的不足,提高网络的传输效率,并且它的实现成本也比较低。
浅谈TCP拥塞控制与其改进思路
![浅谈TCP拥塞控制与其改进思路](https://img.taocdn.com/s3/m/fec4b19c6bec0975f465e295.png)
的一种解决网络拥塞的方法,但如何适应 当今 网络发展的需求相信还是靠人们不断的探索来寻找合适的答案。本文致力于 对 经典 T P拥 塞控 制机 制 的讨论 并提 出相 应 的改进 思路 C
关键 词 :拥 塞控 制 ;慢启 动 ;阈值 ;T P拥 塞 窗 口;数 据 包 C
中图分类号 :T 33 P 9
1 过 多 的数据包 在路 由器 的 队列中产 生 巨大 的排 队延 时。 .
TP 是 因特 网 中使用 最广 泛 的一 种传 输协 议 ,它是 一种 面 向 C 连接 ( 连接 导 向 )的 、可 靠 的、基 于字 节流 的运 输层 (rn pr T a so t ly r a e )通信 协议 ,之 所 以应 用广泛 一 大部 分是 由于 它 的可靠 性、 稳 定性 ,它 为通 信 的双 方提供 了可靠 的端 到端 的服 务 ,而 实现这
2数据 包 延时 过长 导致不 必要 的重传 。 .
3某 个路 由器 缓存 溢 出导致 的丢包 将 浪费掉 整个 上游 路 由器 .
一
可靠 服 务的便 是 TP所 具有 的可 靠传 输机 制 ,其 中包括 重传 、 C 在 早 期因特 网中 T P只有 基于 窗 口的流 量控 制 ,并无 拥塞 控 C
序 号 、确认 号 、定 时 、流 量控 制及 拥 塞控 制 。 制 ,后来 随着 用户 数量 的膨 胀 ,相应 的问题 也就 应运 而生 ,用 户 数 量激 增 ,网络拥 塞 问题 不约而 至 ,由于路 由器 的缓 存 队列有 限 ,
摘 要 :如今 网络 已经 离不开人 们 的生 活 ,发 展 势头迅 猛 , 网络 的终 端设 备 不仅 在数 量 上 ,种类也 越 来越 多 ,在 此发 展之下。 保证 大量 的 网络 数据 传输 与 网络 性 能相 协调是 极 其重要 的 ,经典 的 T P拥塞控 制机 制是 网络 发展 历 史 中人们 想 出 C
tcp协议拥塞控制算法的基本流程
![tcp协议拥塞控制算法的基本流程](https://img.taocdn.com/s3/m/711d6843cd1755270722192e453610661fd95a79.png)
tcp协议拥塞控制算法的基本流程
TCP协议的拥塞控制算法主要包括慢开始、拥塞避免、快重传和快恢复四个部分。
下面是这四个部分的基本流程:
1. 慢开始:当TCP连接建立后,拥塞窗口大小初始化为1,然后每经过一个往返时间RTT就将发送方的拥塞窗口大小乘以2,呈指数规律增长,直到达到慢开始门限ssthresh。
2. 拥塞避免:当拥塞窗口大小超过慢开始门限ssthresh后,使用拥塞避免算法,每经过一个往返时间RTT就将发送方的拥塞窗口大小加1,呈线性规律增长。
3. 快重传:如果发送方收到一个重复的ACK或者一个失序的报文段,就认为网络中可能发生了拥塞。
此时,发送方将慢开始门限ssthresh值和拥塞窗口大小调整为当前窗口值的一半,然后执行慢开始算法。
4. 快恢复:当发送方收到三个重复的ACK时,就认为网络中发生了严重拥塞。
此时,发送方将慢开始门限ssthresh值和拥塞窗口大小调整为当前窗口值的一半,然后执行拥塞避免算法。
以上是TCP协议拥塞控制算法的基本流程,主要是通过动态调整发送方的拥塞窗口大小来控制网络拥塞的发生。
tcp拥塞控制方法
![tcp拥塞控制方法](https://img.taocdn.com/s3/m/26fc74b14bfe04a1b0717fd5360cba1aa9118c5f.png)
tcp拥塞控制方法
TCP拥塞控制方法:
①慢启动算法初始时发送方维持一个名为拥塞窗口的变量其初始值设为一个报文段大小每次收到确认后都将拥塞窗口加倍;
②当拥塞窗口增大到与接收窗口相等时慢启动阶段结束进入拥塞避免阶段此后每经过一个往返时间RTT拥塞窗口增加一个报文段大小;
③快重传机制当中发送方连续三次收到同一个序列号的重复ACK时并不等待设置的重传计时器超时而是立刻重传对方未收到的报文段;
④快恢复算法配合快重传使用当检测到丢失一个报文段时将拥塞窗口减半而不是直接设置为1进入慢启动模式而是进入拥塞避免模式;
⑤随机早期检测RED是一种主动队列管理方案路由器在队列长度接近阈值前就开始随机丢弃部分报文以此向源端反馈网络拥塞信息;
⑥加权最小延迟WRED作为RED的扩展不仅基于队列长度还考虑了报文延迟当队列长度和延迟超过一定界限时开始丢弃报文;
⑦选择性确认SACK允许接收方在ACK中指出已经接收到的具体报文段从而使得发送方可以跳过重传已经成功送达的报文段;
⑧多路径TCP MPTCP能够在一条逻辑连接中同时利用多条物理路径传输数据提高带宽利用率减轻单一路由器的负担;
⑨基于范围的拥塞控制BBR由谷歌提出旨在通过更精确地估计可用带宽和往返时间来动态调整发送速率减少排队等待;
⑩DSR动态源路由协议虽然主要用于无线自组网中但其拥塞控制思想如预留带宽沿途记录路径信息等可借鉴应用于传统TCP协议;
⑪ECN显式拥塞通知通过在IP头部增加两个比特位ECNECE当路由器检测到队列长度超过阈值时便将这两个位设置并传递给源端;
⑫PCC Providence Congestion Control 结合了UDP的灵活性与TCP 的公平性动态调整发送速率以优化视频流媒体等应用性能。
tcp的拥塞控制机制
![tcp的拥塞控制机制](https://img.taocdn.com/s3/m/b967032e876fb84ae45c3b3567ec102de2bddf1d.png)
tcp的拥塞控制机制TCP的拥塞控制机制是指在网络传输过程中,通过一系列算法和控制策略来避免网络拥塞和保持网络的稳定性。
本文将从TCP拥塞控制机制的基本原理、具体算法以及应用场景等方面进行介绍和分析。
一、TCP拥塞控制机制的基本原理TCP拥塞控制机制的基本原理是通过检测网络拥塞的程度,并根据检测结果采取相应的控制策略来调整数据的发送速率,以保持网络的稳定性和可靠性。
其基本原理包括以下几个方面:1.1 慢启动:当TCP连接刚建立时,发送方将初始拥塞窗口设置为一个较小的值,然后随着时间的推移逐渐增加发送窗口的大小,以逐步探测网络的容量。
这样可以避免在网络刚启动时出现大量数据的拥塞。
1.2 拥塞避免:一旦网络出现拥塞,TCP发送方将根据网络的拥塞程度来调整发送窗口的大小。
具体而言,TCP发送方会根据网络丢包的情况来判断网络拥塞的程度,并相应地减小发送窗口的大小,以降低数据的发送速率。
1.3 快速重传和快速恢复:当TCP发送方检测到丢包时,它会立即重传丢失的数据包,而不是等待超时后再进行重传。
此外,TCP发送方还会根据收到的重复确认来判断网络的拥塞情况,并相应地调整发送窗口的大小,以快速恢复数据的发送速率。
二、TCP拥塞控制算法TCP拥塞控制机制主要通过以下几种算法来实现:2.1 慢启动算法:慢启动算法通过逐渐增加发送窗口的大小来控制数据的发送速率,以避免在网络启动时出现拥塞。
具体而言,慢启动算法将初始拥塞窗口设置为一个较小的值,然后每经过一个往返时间(RTT),发送窗口的大小就翻倍,直到达到一个阈值。
2.2 拥塞避免算法:拥塞避免算法主要通过线性增加发送窗口的大小来控制数据的发送速率,以避免网络拥塞。
具体而言,拥塞避免算法将发送窗口的大小每经过一个RTT就增加一个MSS大小,直到达到一个阈值。
2.3 快速重传算法:快速重传算法主要通过接收到的重复确认来判断网络的拥塞情况,并及时重传丢失的数据包,以提高数据的传输效率。
网络拥塞控制(五)传统TCP存在的缺陷
![网络拥塞控制(五)传统TCP存在的缺陷](https://img.taocdn.com/s3/m/f30b599650e79b89680203d8ce2f0066f53364dc.png)
⽹络拥塞控制(五)传统TCP存在的缺陷这个世界在⼀直变化着,任何事物如果停留在原地,最终是要被淘汰的,TCP的拥塞控制算法也是如此。
90年代中后期到21世纪以来,Internet得到迅猛发展,⾸先是拥塞现象变得越来越严重,其次是⾼带宽的⽹络出现,从100Mbps到1Gbps到10Gbps,再者很多对数据敏感的应⽤越来越多,如⾳视频应⽤等,这些对TCP的传统的拥塞控制算法提出了巨⼤的挑战。
⾸先来看⾼带宽和⾼时延⽹络情况,这种⽹络通常称之为长肥⽹络(Long Fat Network, LFN),也称之为⾼带宽时延乘积⽹络(High-Bandwidth-Delay-Product Network,BDP)。
带宽时延乘积(BDP)通常表⽰⽹络通道的容量,也就是能够在⽹络中缓冲的数据量,显然带宽增⼤⼀倍或者时延增⼤⼀倍都会使得通道的容量加倍。
当这个乘积变得越来越⼤时,TCP的局限性及开始暴露出来。
⼀个100Mbps的⽹络,如果时延是100ms,那么BDP为100,000,000*0.1/8=1,250,000字节=1220.7K,如果是1Gbps的⽹络时延为100ms,那么BDP为12207K左右,如果TCP跑在这种⽹络上,那么效率是⾮常低的,从TCP的⾸部中我们可以看到TCP利⽤16位来表⽰接收窗⼝rwnd⼤⼩,16位能表⽰的最⼤值是65535,由于TCP的发送窗⼝是取拥塞窗⼝cwnd和对端的接收窗⼝rwnd两者之间的最⼩值,那么显然发送窗⼝最⼤只能到65535(以字节为单位),显然该值与我们上述的⽹络BDP相差得太远,那么TCP就只能发送⼀阵数据然后就等待ACK,极端下去就有点像“停等协议”了。
这样TCP就⽆法充分利⽤⽹络带宽,浪费带宽现象严重。
窗⼝扩⼤选项:为了解决窗⼝过⼩的问题,TCP利⽤起了它的选项功能,从TCP的头部可以看到TCP预留了⼀定的选项功能,⽤于扩展等⽤途。
窗⼝扩⼤选项增加了额外的16位来表⽰窗⼝⼤⼩,窗⼝的值由⾸部的16位⼤⼩和选项的16位值共同组成,不过不是⽤加法组成的,⽽是利⽤移位窗⼝值的幂来表⽰的,也10,这个值就⽐较⼤了,⾜够表⽰窗⼝的⼤⼩了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCP 拥塞控制分析摘要:随着计算机网络的飞速发展,网络用户数量急剧增加,Internet 在各个领域也发挥越来越重要的作用,但随着其流量的急剧增加,由此引发的网络拥塞已经成为制约网络发展和应用的瓶颈问题。
拥塞容易造成传输延迟和吞吐量等性能指标的下降,严重影响带宽、缓存等网络资源的利用率。
TCP 作为应用最广泛的传输协议,它的拥塞控制已经成为其成功的关键。
本文针对这一现象对TCP 性能及拥塞控制进行研究,我们将简单探讨网络拥塞出现的原因,着重介绍TCP 拥塞控制的原理并分析四个TCP 拥塞控制算法,最后论述TCP 拥塞控制所面临的问题,根据此提出进一步的研究方向。
关键词:TCP 拥塞、拥塞控制、TCP Tahoe 、TCP Reno 、TCP SACK 、TCP Vegas1. 拥塞产生的原因拥塞是一种持续过载的网络状态,此时用户对网络资源(包括链路带宽,存储空间和处理器的处理能力等)的需求超过了其固有的容量。
拥塞导致的直接结果就是分组丢失率增加,端到端延时加大,甚至有可能使整个系统发生崩溃。
网络产生拥塞的根本原因在于用户或端系统提供给网络的负载大于网络资源容量和处理能力,即网络提供的资源不足以满足用户的需求,这些资源包括缓存空间、链路带宽容量和中间结点的处理能力等,使其产生数据包时延增加、丢弃概率增大、上层应用系统性能显著下降等典型现象。
拥塞产生的直接原因有三点:(1)存储空间不足。
缓存的容量不够大,当缓存已经装满,没有空闲的空间时就只能将新到达的分组丢弃。
(2)带宽容量不足,低速链路对高速数据流的输入也会产生拥塞。
任何信道带宽最大值为()N +B =S C 1log 2(N 为信道噪声平均功率,S 为信源平均功率,B 为信道带宽) [1]。
要求所有信源发送的速率R 必须小于等于信道容量C 。
(3)处理器处理能力弱,速度慢。
低速链路对高速CPU 也会产生拥塞。
要避免拥塞的发生,必须对链路带宽、路由器处理速度和存储容量等问题予以考虑,尽可能使系统的各个部分相互匹配。
但由于网络流量分布的不均衡性,随着用户数量和服务类型的增加,从根本上避免拥塞是不可能的。
因此必须采取一定措施来尽可能避免网络拥塞,是网络尽快从拥塞中恢复出来。
2. TCP拥塞控制TCP是建立在Internet体系结构中网络层和应用层之间的传输层协议,端到端的通道为应用层提供了可靠有序的数据传输服务。
TCP的主要目的是为了增强由Internet IP层所提供的尽最大努力服务的性能和控制网络中的数据流量,实现端到端的流量控制,以期能够有效地利用网络资源,消除或减少网络路由器中的拥塞,并使不同的数据流能够合理地共享使用网络资源。
TCP拥塞控制是Internet稳定发展的主要因素,自从1986年Internet发生了首次网络拥塞[2]以来便激发了人们对TCP拥塞控制的广泛研究。
它采用窗口控制机制,发送方维持着一个拥塞窗口变量来控制每次发送出但未被接收方接收的数据包的最大数量。
目的节点在接收到数据包后会向源节点发送确认信息(ACK)。
当窗口变量耗尽时源端就进入等待状态,直到下一个ACK到达才继续发送数据包。
TCP是一种加性增加乘性减少(AIMD)的拥塞控制算法。
当发送方发现窗口内的一个报文发生丢失,就认为这个丢失是由于网络拥塞造成的,于是将窗口减半以减小发送速率,从而避免拥塞的加重;如果窗口的报文没有丢失则表明目前网络状况良好,发送者将窗口加倍从而增大了报文的发送速率。
这种拥塞控制有两个特点:(1)自同步,当拥塞发生和ACK延迟的时候会自动减小源端的发送速率。
(2)窗口控制源端的发送速率。
虽然TCP拥塞控制算法种类繁多,但算法大多有四个部分组成[3]:(1)慢启动阶段:当建立一个新的TCP连接时,拥塞窗口(cwnd)被初始化为一个数据包大小。
源端按cwnd的大小发送数据,没收到一个ACK确认,cwnd就增加一个数据包发送量,继续这样的过程直到拥塞控制窗口增加至慢启动阀值,显然cwnd的增长将随RTT呈指数级增长,发送端向网络中发送的数据量将急剧增加。
慢启动最初阀值被设为最大窗口值的一半,当窗口大小增加至启动阀值时慢启动阶段结束,进入拥塞避免阶段。
(2)拥塞避免阶段:当发现超时或者收到3个相同的ACK时,网络即发生拥塞,此时进入拥塞避免阶段。
慢启动阀值(ssthresh)被设置为当前cwnd的一半;超时时cwnd被置为1.如果cwnd大于慢启动阀值则TCP停止慢启动过程转而执行拥塞避免过程,使发送端的cwnd每经过一个往返时延RTT就增加一个MSS大小。
这样拥塞窗口按线性规律缓慢增长。
(3)快速重传和恢复:当数据包超时时,cwnd被设置为1,重新进入慢启动阶段,这会导致过大地减少发送窗口尺寸,降低TCP吞吐量。
因此快速重传和恢复就是在发送端收到3个或以上重复的ACK时就断定数据包丢失,并重传数据包,同时将慢启动阀值设置为当前cwnd的一半,而不必等到RTO超时。
快速恢复的算法如下:(1)当第三个重复ACK到达时,设置慢启动阀值(ssthresh)为当前cwnd的一半;重传丢失的数据包;设置cwnd=ssthresh+3。
(2)每次有一个更多的重复ACK到达就把cwnd加1并在可能的情况下传输数据包。
(3)当确认数据包的下一个ACK到达时,设置cwnd=ssthresh,进入拥塞避免阶段。
3. TCP拥塞控制算法自1986年互联网出现严重的拥塞崩溃现象后,网络拥塞控制受到了广泛的关注。
Jacobson和Karels最早开发了一种拥塞控制机制:TCP-Tahoe,并于1988年在4.3BSD中实现,此后人们对TCP拥塞控制做了很多的研究。
目前TCP协议版本非常多,本文将主要介绍TCP Tahoe,TCP Reno,TCP SACK,TCP Vegas。
3.1 TCP TahoeTCP Tahoe指的是1988年加入Van Jacobson提出的慢启动、拥塞避免和快速重传算法之后的4.3BSD或类似的TCP版本。
才用了递增式肯定重传策略和“go-back-n”模型(滑动窗口算法)[4]。
在慢启动阶段,拥塞窗口(cwnd)随着确认的到来以指数方式递增(这种以ACK来触发TRANSMIT的机制被称为“ACK clocking”),直到到达阀值;之后TCP 进入拥塞避免阶段,cwnd每隔RTT以线性方式递增一个单位。
如果连续收到3个重复ACK,TCP不等重传定时器溢出就马上重传丢失的数据包,之后TCP返回慢启动状态。
TCP Tahoe是在早期TCP实现中为了减少拥塞现象,加入了许多新的算法得到的,目的在于保持良好的用户通信吞吐量的同时控制网络拥塞。
另外Tahoe算法能对往返时间(RTT)的估量进行修改,并把RTT设置为RTO的基值。
它实现了早期Jacobson的拥塞控制机制。
1990年Van Jacobson对Tahoe算法进行了改进[5],出现了TCP Reno算法。
TCP Reno 在快速重传之后进入快速恢复,而不是TCP Tahoe采用的慢启动。
Reno可以分为四个阶段: 慢启动阶段、拥塞避免阶段、快速重传和快速恢复阶段。
相应地, 在不同阶段调用了不同的算法, 分别为: 慢启动算法、拥塞避免算法、快速重传和快速恢复算法。
当数据包超时,cwnd被重置为1,重新进入慢启动,这将大大减少发送窗口的尺寸,降低TCP 吞吐量。
Reno算法的理想情况是在一个窗口中数据包丢失时,Reno算法中的发送方在每个RTT中最多重传一个包。
和Tahoe算法相比,Reno可用的带宽增加了,重传率也降低了。
相对于其他算法,当一个数据窗丢失多个数据包时,Reno出此案的问题最严重[6]。
Reno的快速恢复算法仅在丢失一个数据包时得到充分利用,表现得比Tahoe好。
虽然TCP Reno是TCP Tahoe的改进版,但TCP Teno算法仍有不足之处:TCP Reno在一个窗口中的多个数据包同时丢失时会出现性能问题,丢失的数据包会使得TCP不断执行快速重传和快速恢复,而cwnd和ssthresh亦会多次被减半,大大降低吞吐量。
另外在大多数TCP实现中,RTO计数器的值被认为是RTT的均值和方差的估计值的函数。
而准确估计TRO和RTT不是一件容易的事。
理论上RTT的测量比较简单,只是数据包从发出到确认ACK返回发送端的时间;但由于TCP使用的是用一个ACK确认所有已收到数据的“累计”确认方式,故实际上RTT的估计往往很复杂。
3.3 TCP SACKSACK(Selective Acknowledge)算法是有效恢复同一窗口中多个分组丢失的另一种技术途径,在Reno算法基础上进行扩展,加上了选择ACK确认帧和选择重传机制。
SACK在接收端发往源端的ACK确认帧中加入了SACK选项,报告一些收到的非连续数据。
选择性的确认可以让接收端另外报告它所收到的非连续数据,对数据包进行有选择的确认和重传,避免不必要的重传,减少时延,提高网络吞吐量。
SACK和Reno,Tahoe的主要区别是当一个窗口丢失多个包时两者的不同表现[6],此时SACK的表现最佳,它能快速从数据的丢失中恢复出来。
SACK能够避免多数的超时和慢启动,其总的性能优于Tahoe和Reno。
由于回路响应时间与网络运行情况密切相关,所以又出现了利用回路响应时间控制拥塞的TCP Vegas算法。
Vegas算法是通过观察以前TCP连接中的RTT值的变化情况来控制拥塞窗口,使拥塞窗口控制在一个合适的值上。
如果RTT变大,Vegas就认为网络拥塞发生,就减少拥塞窗口;反之则增大拥塞窗口。
TCP Vegas相对于TCP Reno在以下三方面做出了改进:第一,TCP Vegas采用一种全新的重传机制,当接受到第一个重复的ACK时就确定该数据包丢失,而不像TCP Reno一样等接收到三个重复的ACK时才确定该数据包丢失,这就使得其对拥塞的反应更加迅速。
第二,TCP Vegas在初次使用慢启动时就以一种更谨慎的方式增加拥塞窗口来减小丢包率。
在慢启动的改进方面,它与拥塞预测的改进机制类似,通过监视吞吐率的变化来决定是否离开慢启动模式。
第三,TCP Vegas采用一种新的拥塞避免机制来矫正TCP Reno的振荡性。
具体的方法是,信源自行估计它发出的被缓存起来的数据包的数量,并尽可能的通过调整拥塞窗口的大小使被缓存起来的数据包的数量介于α和β之间时,下一个回路响应时间(RTT)里拥塞窗口不变,否则拥塞窗口将随着被缓存起来的数据包的数量小于α或者大于β的数量线性的增大或者减小。
TCP Vegas可以提高带宽的利用率,减少重传次数,减少超时次数。
它最大不同于TCP Tahoe,Reno,Sack的就是它以队列延时作为拥塞的标志。