TCP NewReno
 

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的拥塞控制 (四)的更多相关文章

  1. 计算机网络(10)-----TCP的拥塞控制

    TCP的拥塞控制 拥塞(congestion) 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏. 拥塞控制 拥塞控制就是防止过多的数据注入到网络中,这样可以使网 ...

  2. TCP网络拥塞控制

    拥塞控制过程 数据吞吐量 TCP窗口大小,窗口流量控制,慢启动对TCP的成块数据传输综合作用,可能对TCP的数据传输有意想不到的影响. RTT(Round-Trip Time) :往返时间.是指一个报 ...

  3. 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义

    为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...

  4. TCP/IP拥塞控制

    TCP/IP拥塞控制包括:慢启动和拥塞避免.其操作流程如下所述: 初始化.拥塞窗口cwnd = 1,慢启动门限ssthresh = 65535 如果没有发生拥塞 若 cwnd < ssthres ...

  5. TCP的拥塞控制

    1.引言 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止 ...

  6. TCP的拥塞控制(转载)

    1.引言 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止 ...

  7. 【网络协议】TCP的拥塞控制机制

    前言 计算机网络中的带宽.交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这样的情况就叫做拥塞. 所谓拥塞控制,就 ...

  8. TCP/IP笔记(四)IP协议

    前言 IP相当于OSI参考模型的第3层--网络层:主要作用是"实现终端节点之间的通信"又称"点对点通信". IP作为整个TCP/IP中至关重要的协议,主要负责将 ...

  9. TCP/IP(四)网络层

    前言 前面给大家介绍了计算机网络的基本概述,物理层和数据链路层.这一篇给大家介绍面试中经常会被问到的网络层.在介绍之前我们回顾一下之前学习的知识! CP/IP协议栈:物理层.链路层.网络层.传输层.应 ...

随机推荐

  1. python3工作环境部署+spyder3+jupyter notebook

    1.python3安装 1)官网去下载python3.7版本,双击安装,只要注意勾选写到PATH就行,其它直接NEXT. 2)安装完成,CMD键入 python 回车,跳出python界面就是成功. ...

  2. ios 9.1以后 添加libz.dylib 方法

    1. 进入你项目的build phases 2.点击+号在弹出的对话框选择addother 3.在弹出的对话框中输入"cmd"+"shift"+"g& ...

  3. LDPC译码算法代码概述

    程序说明 V0.0 2015/1/24 LDPC译码算法代码概述   概述   本文介绍了包括LDPC_Simulation.m, ldpcdecoderbp1.m,ldpcdecoderminsum ...

  4. 区块链技术:每位CEO都应了解

    区块链技术有可能成为一项广泛应用的突破性技术,像蒸汽机.电力或因特网那 样,改变整个社会和经济的运行方式. 对企业而言,信任至关重要.今天,我们基于信任,将钱存放在银行,通过电商企业 网购产品,并且依 ...

  5. Jmeter接口测试(四)传递参数

    参数设置 Jmeter 支持通过 查询字符串参数(Query String Parameters) 或者 Request body 请求体来传递参数. 1.get请求是普通键值对 get请求一般通过p ...

  6. 用Python深入理解跳跃表原理及实现

    最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的.第一次听说跳跃表的概念,感到比较新奇,所以查了不少资料.其中,网上有部分文章是按照如下方式描述跳跃表的: ...

  7. NES像素风格的Raspberry

    周末小实践,vue+树莓派+一言API 一直有个想法,让树莓派做后端,实现一个有趣的网络服务.可是,苦于不会前端,迟迟无法动手.最近由于工作任务需要研究了一下前端. 问过前端大佬们,个个都说你得用vu ...

  8. DeepLearning - Overview of Sequence model

    I have had a hard time trying to understand recurrent model. Compared to Ng's deep learning course, ...

  9. java-sun.misc.BASE64Decode AccessException

    在使用sun.misc中base64类时,eclipse可能会报找不到Access异常 只需要修改一下访问方式即可,如下: 右键项目->属性->Javabulid path->jre ...

  10. java不用任何已有方法完全自写的去重法

    package aa; class InsertSort{ private long[] a; private int nElems; //构造方法 public InsertSort(int max ...