Reno是目前应用最广泛且较为成熟的算法。该算法所包含的慢启动、拥塞避免和快速重传、快速恢复机制,是现有的众多算法的基础。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
  1.慢启动与拥塞避免
  TCP发送端采用慢启动和拥塞避免算法来控制向网络输送的数据量。为了实现这些算法,必须向TCP每个连接状态加入3个参量:
  (1)拥塞窗口(cwnd),如前所述,它是对发送端收到确认(ACK)之前能向网络传送的最大数据量的一个发送端的限制。
  (2)接收端通知窗口(rwnd),它是对未完成数据量的接收端的限制,cwnd和rwnd的最小值决定了数据传送。
  (3)慢启动阀值(ssthresh),被用来确定是用慢启动还是用拥塞避免算法来控制数据传送,具体用法如下:当cwnd<ssthresh时使用慢启动算法;cwnd>ssthresh时使用拥塞避免算法;当cwnd=ssthresh时,发送端既可以使用慢启动也可以使用拥塞避免。ssthresh的初始值可以任意大(比如,一些实现中使用接收端通知窗口的尺寸),但是一旦对拥塞响应之后,其大小可能会被减小。
  在不清楚网络环境的情况下向网络传送数据,要求TCP缓慢地探测网络以确定可用带宽,以避免突然传送大量数据而使网络拥塞。为达此目的,在传送开始时,采用了慢启动机制,这个机制在修复了由重发定时器探测到的数据丢失之后也被采用。
  首先要确定的是cwnd的初始值IW(初始窗口大小),这里规定它必须小于或等于2*SMSS字节而且不能大于两个数据段。
  在慢启动期间,每收到一个新的ACK,cwnd最多增长1。直到cwnd超过ssthresh或者检测到拥塞时,停止执行慢启动算法,转入拥塞避免阶段。在拥塞避免期间,cwnd在每个ACK以1/cwnd(或每个RTT增加SMISS个字节)的速度递增。拥塞避免算法一直保持直到检测出拥塞。等式(5.1.1)给出了一个在拥塞避免期间用来修正cwnd值的公式:
  cwnd+=1/cwnd (5.1.1)
  每收到一个非重复的ACK都采用等式(5.1.1)来调整cwnd。等式(5.1.1)用于近似拥塞避免算法的增长。
  在实现中,在拥塞避免期间常用公式:cwnd+=SMSS*SMSS/cwnd来修正cwnd的值,当SMSS*SMSS/cwnd<1时,cwnd+=1。
  另一种改进的方案是每当新的ACK到来时记下被新确认的字节数,然后cwnd就可增加相应字节数,这个增加的数目最多可达到SMSS字节。
  一旦TCP发送端使用重传定时器检测到包丢失时,ssthresh的值就如下设置:
  Ssthresh=max(FlightSize/2,2*SMSS) (5.1.2)
  式中,Filght Size是已发送但未收到ACK的数据的大小。
  在重发了丢失的数据段之后,cwnd必须被设置成LW(丢失窗口),它等于一个满尺寸数据段的大小。再发丢失的数据段之后,发送端起用慢启动算法增长窗口直到该窗口大小增长到等于新设置的ssthresh值之后,又采用拥塞避免算法了。
  2.快速重传与快速恢复
  当接收端收到一个失序的数据报时,会立即发回一个重复ACK,这个ACK的目的是告知发送端收到一个失序的数据报并说明其所期望的接受序号。从发送端的角度看,重复ACK可能是许多网络问题引起的。首先,它们有可能是因为包丢失而引起。在此情况下,在此数据段之后的所有数据段都会触发重复ACK。其次,重复ACK可能是由于网络对数据段的重新排序引起的。最后,重复ACK有可能是ACK或数据段被网络复制所引起的。此外,当接收端部分或完整地填补了序号空缺应立即发送一个ACK,这样可以更及时地通知发送端,使其迅速从重发状态中恢复过来。快速重传算法如图5-2所示。
  TCP发送端应该使用快速重传算法来探测或者修复数据丢失,在收到3个重复ACK(即连续的4个相同的ACK,标志着1个数据段已丢失)时,TCP不等重传定时器超时就立即重传看来已丢失的数据段。此后起用快速恢复算法来进行新的数据传输,直到1个非重复 ACK到达。
  下面是快速传送/快速恢复算法的实现:
  (1)当第二个重复ACK收到时,ssthresh根据等式(5.1.2)设值。
  (2)重传丢失的数据段并将cwnd的值设置为ssthresh+3*SMSS,称之为给拥塞窗口“充气”。
  (3)此后对每个接收到一个重复ACK,将cwnd增大SMSS字节,这将人为地扩充拥塞窗口用以反映已经离开网络的附加数据段。
  (4)如果cwnd和接收端的通知窗口值允许的话,发送一个数据段。
  (5)当下一个确认新数据的ACK到达时,设定cwnd值为ssthresh(步骤1设置的值),这称作给窗口“放气”。这个ACK必须是步骤1触发的重发引起的确认,重发之后一个RTT(在接收端有次序紊乱的数据段的情况下,它可能一会儿就到达)。另外,此ACK应该确认丢失数据段和第二个重复ACK期间的数据段,如果它们一个也没有丢失的话。
  
Reno算法的性能分析

  从Reno运行机制中很容易看出,为了维持一个动态平衡,必须周期性地产生一定量的丢失,再加上AIMD机制--减少快,增长慢,尤其是在大窗口环境下,由于一个数据报的丢失所带来的窗口缩小要花费很长的时间来恢复,这样,带宽利用率不可能很高且随着网络的链路带宽不断提升,这种弊端将越来越明显。
  公平性方面,根据统计数据,Reno的公平性还是得到了相当的肯定,它能够在较大的网络范围内理想地维持公平性原则。

转载于:https://blog.51cto.com/kunloo/239939

tcp reno 介绍相关推荐

  1. Python教程之udp和tcp协议介绍

    UDP介绍 UDP - 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地.由于UDP在传输数据 ...

  2. Http Keep-Alive和Tcp keepalive介绍

    Http Keep-Alive和Tcp keepalive介绍 1.TCP连接介绍 1.1 建立连接-三次握手 1.2 释放连接-四次挥手 2. KeepAlive与Keep-Alive介绍 2.1 ...

  3. 基于TCP Reno的拥塞控制的基本原理

    TCP的一个关键部分就是拥塞控制机制,因为IP层不向端系统提供显式的网络拥塞反馈,因此TCP必须使用端到端拥塞控制而不是使用网络辅助的拥塞控制.TCP Reno 就是广受赞誉的TCP拥塞控制算法,该算 ...

  4. 基于Socket的UDP和TCP编程介绍

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

  5. tcp的无延时发送_高并发架构的TCP知识介绍

    这是关于高并发架构网络协议基础知识的第二篇,编程路上的基础心法! 做为一个有追求的程序员,不能只满足增删改查,我们要对系统全方面无死角掌控.掌握了这些基本的网络知识后,相信一方面日常排错中会事半功倍, ...

  6. 基于Socket的UDP和TCP编程介绍-转

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

  7. 网络基础之网络协议,OSI,TCP/IP介绍

    文章目录 1 概述 1.1 网络协议 1.2 OSI模型 1.2.1 应用层 1.2.2 表示层 1.2.3 会话层 1.2.4 传输层 1.2.5 网络层 1.2.6 数据链路层 1.2.7 物理层 ...

  8. AIMD 为什么收敛(tcp reno/cubic 为什么好)

    TCP 拥塞控制目标是缓解并解除网络拥塞,让所有流量公平共享带宽,合在一起就是公平收敛. AIMD(几乎所有与拥塞控制相关的协议或算法都有 AIMD 的影子,包括 RoCE,BBRv2) 为什么收敛? ...

  9. 传统TCP(Reno)拥塞响应函数

    TCP拥塞响应函数指吞吐与丢包率之间的一个关系,传统Reno-TCP执行以下两个操作:1)将丢包视为网络发生了拥塞,将拥塞窗口降低一半:2)在拥塞避免阶段,每个RTT周期,拥塞窗口增加1.以上两者决定 ...

最新文章

  1. Oracle 好书 02 ( 安装oracle 10g软件及创建数据库 )
  2. gen_cam_par_area_scan_polynomial算子说明
  3. JUC-ReadWriteLock
  4. 通过配置的方式Autofac 《第三篇》
  5. verilog 8位流水灯_用单片机控制的LED流水灯设计
  6. 安卓app与阿里云服务器的无线通信(非局域网)
  7. java===Runtime类
  8. php获取本机ip外网地址,php获取本机ip(远程IP地址)
  9. 用户和组 win2003
  10. 沈志康奖教金 计算机学院,天大60名青年才俊获首届沈志康奖教金
  11. 第七章:【UCHome二次开发】模板语法说明
  12. PHP time zone unknown Fail
  13. 使用ZbarSDK实现扫描二维码以及条形码功能(iOS)
  14. python 区块链_如何用Python快速实现区块链?
  15. 【校招实习面试实战,身临其境】华为软件开发工程师面试复盘总结
  16. 计算机科学类专升本复习之“C语言结构体”详解(初稿)
  17. 《嵌入式系统设计师教程》读后感:2.6嵌入式系统电源
  18. 伸缩自如的ElasticSearch——通过bboss操作和访问elasticsearch模式
  19. Istio Security - Istio安全框架
  20. 高德地图上画图!和3D绘制区域

热门文章

  1. 主DNS服务-正向解析
  2. vue使用px2rem
  3. 【extjs6学习笔记】1.1 初始:创建项目
  4. adb 连接不上电脑怎么办?
  5. 终于决定要写写东西了
  6. SQL--添加角色权限
  7. 静态方法只能通过类名调用吗?
  8. Sanboxie 5.14安装图解
  9. Creational模式之Builder模式
  10. 安卓使用Socket发送中文,C语言服务端接收乱码问题解决方式