TCP的拥塞控制 (四)
NewReno是在Reno的基础上,改进了Fast Recovery,主要思想是保证处于network中的packet的总量是饱和的。
在Reno算法中,一个超时会导致相应的那个packet的重传,然而,一个超时发生时,本可以重传多个潜在的丢包,但Reno算法没有这样实现,这就导致性能不高。
Reno在遇到多包丢失时,存在两个问题:一个是,大量的包没有足够的重复ACK触发重传,只能等待超时才能得以重传。第二个是,即使采取措施(在Partial Acknowledgement一节中已有所讨论)避免了超时,也会存在Multiple Fast Retransmits和严重的window reduction现象,这些会影响TCP的性能。在Multiple Fast Retransmits一节中,我们讨论了相应的解决方案。NewReno正是在此方案的基础上进行的改进。
NewReno添加一个recover变量,作为Fast Recovery阶段的一个阈值,当sender成功发送到recover所标识的packet时,Fast Recovery阶段才结束。这里成功发送的标志是收到来自receiver的正常ACK。
每当进入Fast Recovery阶段时,recover都更新为high_seq(当前已经发送出去的packet的最大序号),而在进入Fast Recovery阶段之前,recover中保持的是上一个Fast Recovery阶段更新的recover的值。实际上,recover表示的是当前窗口中,可能的丢包的最大序号,Fast Recovery阶段的目标就是恢复这里面的所有的丢包,因此,recover是Fast Recovery阶段的边界。
NewReno不允许Multiple Fast Retransmits,因此在收到3次重复ACK时,如果TCP已经处于Fast Recovery阶段,则不会进行Fast Retransmit。并且,即使TCP没有处于Fast Recovery阶段,NewReno还会判断重复ACK中的序号是否大于当前recover的值(当前recover的值实际是上一个Fast Recovery阶段的recover的值)。如果小于,则说明ACK指明的packet是上一轮Fast Recovery已经处理过的packet,其肯定已经在上一轮被重传了,之所以仍然有3次重复ACK,可能是乱序或者重复发送receiver端已经存在的packet导致的,并不意味着丢包,因此不需要重传。如果大于,则说明这是一个显然的丢包,会进入Fast Recovery进行处理。
进入Fast Recovery之后,会继续收到重复ACK,直到收到非重复ACK为止,这期间的操作与传统的Reno一致,NewReno的特别之处体现在处理非重复ACK的环节。
当收到一个非重复ACK时,这个ACK可能响应的是Fast Retransmit重传的packet,也可能是Fast Retransmit之后重传的packet。由于多包丢失的存在,这个ACK可能是Full ACK或者Partial ACK,对这两种ACK会采取不同的处理方式。
如果ack_seq>recover,则该ACK为Full ACK。它响应了进入Fast Recovery之前sender所发送的全部packet,按规定可以退出Fast Recovery阶段。在退出之前,会将cwnd缩减到min(ssthresh, FlightSize+SMSS),以保证网络的守恒。
如果ack_seq<recover,则该ACK为Partial ACK。在Partial Acknowledgement一节中已经讨论过,Partial ACK意味着多包的丢失,因此,NewReno会重传某些packet。与其他方案不同,NewReno并不重传Partial ACK中指明的packet,而是目前未被响应的最小的packet,这样可以保证重传始终是从左到右依次进行,保持连续型。与Reno一样,重传之后,NewReno缩减cwnd。具体的做法是,首先减去Partial ACK所响应的packet的数量,然后加上SMSS。总体上是为了保证Fast Recovery结束时,有ssthresh大小的packet在网络中传输。
由于多包丢失的存在,NewReno针对Partial ACK的处理,仍然不能快速的恢复所有丢失的packet,因此超时会经常发生。当超时发生时,NewReno采取的措施是退出Fast Recovery,并在退出之前将recover的值更新为当前high_seq。
TCP的拥塞控制 (四)的更多相关文章
- 计算机网络(10)-----TCP的拥塞控制
TCP的拥塞控制 拥塞(congestion) 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏. 拥塞控制 拥塞控制就是防止过多的数据注入到网络中,这样可以使网 ...
- TCP网络拥塞控制
拥塞控制过程 数据吞吐量 TCP窗口大小,窗口流量控制,慢启动对TCP的成块数据传输综合作用,可能对TCP的数据传输有意想不到的影响. RTT(Round-Trip Time) :往返时间.是指一个报 ...
- 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义
为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...
- TCP/IP拥塞控制
TCP/IP拥塞控制包括:慢启动和拥塞避免.其操作流程如下所述: 初始化.拥塞窗口cwnd = 1,慢启动门限ssthresh = 65535 如果没有发生拥塞 若 cwnd < ssthres ...
- TCP的拥塞控制
1.引言 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止 ...
- TCP的拥塞控制(转载)
1.引言 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止 ...
- 【网络协议】TCP的拥塞控制机制
前言 计算机网络中的带宽.交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这样的情况就叫做拥塞. 所谓拥塞控制,就 ...
- TCP/IP笔记(四)IP协议
前言 IP相当于OSI参考模型的第3层--网络层:主要作用是"实现终端节点之间的通信"又称"点对点通信". IP作为整个TCP/IP中至关重要的协议,主要负责将 ...
- TCP/IP(四)网络层
前言 前面给大家介绍了计算机网络的基本概述,物理层和数据链路层.这一篇给大家介绍面试中经常会被问到的网络层.在介绍之前我们回顾一下之前学习的知识! CP/IP协议栈:物理层.链路层.网络层.传输层.应 ...
随机推荐
- MySQL入门篇(五)之高可用架构MHA
一.MHA原理 1.简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Faceb ...
- mongdb基础
查看数据库 show dbs; 切换到需要使用的数据库:use local; 显示集合中的数据库表:show collections; 切换到数据库test,如果数据库不存在,则自动创建 插入数据 d ...
- idea 单元测试 mybatis spring-test 异常: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
因为在idea中必须在test下才能进行单元测试,所以进行单元测试时,ssm的项目会因为找不到resourece中的配置文件而报错 这里 org.apache.ibatis.binding.Bindi ...
- PHP导出Excel,设置表格样式,填充颜色等较为复杂样式
// 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档 <?php //引入Li类对数据进行操作include_once('./Li.php');//引入Excel类库对对数据进行操作i ...
- 原生android(二)——认识activity
一.activity的生命周期 1.onCreate():在活动第一次被创建的时候调用,用来完成活动的初始化操作,如加载布局.绑定事件等 2.onStart():在活动由不可见变为可见时被调用 3.o ...
- centos7 python2.7.5 升级python3.6.4
(转)Linux Centos7 升级python2至python3 - 依然范儿特西的文章 - 知乎 https://zhuanlan.zhihu.com/p/33660059 1 查看python ...
- perf + 火焰图用法 小结
要对新服务做性能测试,分析代码热点,初识perf,做下总结 perf + 火焰图用法 perf简介 Perf (Performance Event), Linux 系统原生提供的性能分析工具, 会返回 ...
- Ubuntu用户设置文件说明
Ubuntu用户设置文件说明 Ubuntu作为Linux的一个发行版本,自然具有Linux系统的多用户特性.因为经常会使用和管理Ubuntu的用户,现将Ubuntu系统下的User的个性化配置整理如下 ...
- hadoop常见错误解决方法
一.启动集群时 1.节点启动失败 1.1端口占用 1.1报错信息:address already in use - bind Address:50070 解决步骤: 查询端口占用:lsof -i:50 ...
- openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 四
openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstac ...