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. 我们一起学习WCF 第五篇数据协定和消息协定

    A:数据协定(“数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每个参数或 ...

  2. 一起来做chrome扩展《页面右键菜单》

    本文主要内容 contextMenus的设置 打开权限 创建菜单 点击菜单 background script向content script发送消息 1. contextMenus的设置 1.1 打开 ...

  3. scrapy 爬取知乎问题、答案 ,并异步写入数据库(mysql)

      python版本  python2.7 爬取知乎流程: 一 .分析 在访问知乎首页的时候(https://www.zhihu.com),在没有登录的情况下,会进行重定向到(https://www. ...

  4. 行驶证识别/行驶证OCR识别全方位解析

    本文全面解析行驶证OCR识别,包括什么是行驶证OCR识别.如何选择行驶证识别软件.如何操作行驶证识别软件,以及该软件应用的领域等. 一.了解行驶证识别/行驶证OCR识别 行驶证OCR识别技术,也叫行驶 ...

  5. NO.04--我的使用心得之使用vue绑定class名

    今天聊一聊这个话题,其实方式有很多种,我今天介绍几种我使用到的,各位看官耐心看: 一.用 变量形式 绑定单个 Class 名 在 vue 中绑定单个 class 名还好说,直接写就可以了 <te ...

  6. windows下sublime text的node.js开发环境搭建

    首先安装sublime text3,百度一堆,自己找吧.理论上sublime text2应该也可以.我只能说一句:这个软件实在是太强悍了. 跨平台,丰富的插件体系,加上插件基本上就是一个强悍的ide了 ...

  7. 二维DCT变换

    DCT(Discrete Consine Transform),又叫离散余弦变换,它的第二种类型,经常用于信号和图像数据的压缩.经过DCT变换后的数据能量非常集中,一般只有左上角的数值是非零的,也就是 ...

  8. ES数据备份到HDFS

    1.准备好HDFS(这里我是本机测试) 2.es 安装repository-hdfs插件 (如es为多节点需在每个节点都安装插件) elasticsearch-plugin install repos ...

  9. less 语法特性翻译稿 - 特性快速预览部分

    原文地址 http://lesscss.cn/features/ 概述 作为CSS的一种扩展语法,Less不仅仅向后兼容CSS,新的特性也是基于CSS现有语法.这使得学习Less变得容易,如果你有所怀 ...

  10. Hyperledger Fabric中的Identity

    Hyperledger Fabric中的Identity 什么是Identity 区块链网络中存在如下的角色:peers, orderers, client application, administ ...