TCP的拥塞控制算法
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
TCP的拥塞控制算法
TCP的拥塞控制算法就是要在这两者之间权衡,
选取最好的cwnd值,从而使得网络吞吐量最大化
且不产生拥塞。
由于需要考虑拥塞控制和流量控制两个方面的内
容,因此TCP的真正的发送窗口为
min(rwnd, cwnd)。
2
TCP的拥塞控制算法
几种常见TCP的拥塞控制算法 1. 慢启动 最初的TCP在连接建立成功后会向网络中发送大量的数据 包,这样很容易导致网络中路由器缓存空间耗尽,从而发 生拥塞。因此新建立的连接不能够一开始就大量发送数据 包,而只能根据网络情况逐步增加每次发送的数据量,以 避免上述现象的发生。
量是恒定的,只有当“旧”数据包离开网络后,
才能发送“新”数据包进入网络。
9
TCP的拥塞控制算法
具体来说快速恢复的主要步骤是:
1.当收到3个重复ACK时,把ssthresh设置为cwnd的 一半,把cwnd设置为ssthresh的值加3,然后重传 丢失的报文段,加3的原因是因为收到3个重复的 ACK,表明有3个“老”的数据包离开了网络。
Leabharlann Baidu
6
TCP的拥塞控制算法
上面说的两个机制都是没有检测到拥塞的情况下
的行为,那么当发现拥塞了cwnd又该怎样去调整
呢?
我们主要通过“快速重传”和“快速恢复” 两种 机制来进行纠正。
7
TCP的拥塞控制算法
快速重传和快速恢复阶段
快速重传是当TCP源端收到到三个相同的ACK副
本(用于判断数据包是否丢失)时,即认为有数
TCP的拥塞控制算法
为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。 TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制。 我们知道TCP还有一个端对端通告的接收窗口(rwnd)用于流量控制。
窗口值的大小就代表能够发送出去的但还没有收到ACK的最大数据报
文段,显然窗口越大那么数据发送的速度也就越快,但是也越有可能 使得网络出现拥塞,如果窗口值为1,那么就简化为一个停等协议, 每发送一个数据,都要等到对方的确认才能发送第二个数据包,显然 数据传输效率低下。
对于大多数TCP实现来说,ssthresh的值是65536(以字节 计算)。拥塞避免的主要思想是加法增大,也就是cwnd的 值不再指数级往上升,开始加法增加。此时当窗口中所有 的报文段都被确认时,cwnd的大小加1,cwnd的值就随着 RTT开始线性增加,这样就可以避免增长过快导致网络拥 塞,慢慢的增加调整到网络的最佳值。
不慢,只是它的起点比较低一点而已。我们可以简单计算下:
开始 ---> cwnd = 1 cwnd = 2*1 = 2
经过1个RTT后 --->
经过2个RTT后 --->
经过3个RTT后 --->
cwnd = 2*2= 4
cwnd = 4*2 = 8
如果带宽为W,那么经过RTT*log2W时间就可以占满带宽。
4
TCP的拥塞控制算法
2.拥塞避免 从慢启动可以看到,cwnd可以很快的增长上来,从而最大 程度利用网络带宽资源,但是cwnd不能一直这样无限增长 下去,一定需要某个限制。TCP使 用了一个叫慢启动门限 (ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,
进入拥塞避免阶段。
5
TCP的拥塞控制算法
10
TCP的拥塞控制算法
2.再收到重复的ACK时,拥塞窗口增加1。
3.当收到新的数据包的ACK时,把cwnd设置为第一 步中的ssthresh的值。原因是因为该ACK确认了 新的数据,说明重复ACK时的数据都已收到,该 恢复过程已经结束,可以回到恢复之前的状态了。
11
3
TCP的拥塞控制算法
具体来说,当新建连接时,cwnd初始化为1个最大报文段(MSS)大小, 发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认, cwnd就增加一倍。这样cwnd的值就随着网络往返时间 (Round Trip Time,RTT)呈指数级增长,事实上,慢启动的速度一点也
据包丢失,则源端重传丢失的数据包,而不必等
待RTO超时。同时将ssthresh设置为当前cwnd值
的一半,并且将cwnd减为原先的一半。
8
TCP的拥塞控制算法
快速恢复是基于“管道”模型(pipe model)的
“数据包守恒”的原则(conservation of packets
principle),即同一时刻在网络中传输的数据包数