议 。这篇文档里的NewReno方案也使用了文献[LM97]中的NewReno的讨论 。
我们没有说对于不能使用SACK的TCP , 这里描述的快速恢复的NewReno方案是响
应部分确认的一个可选修正 。根据我们在NS模拟器上的NewReno修正经验 , 我们相信这个
修正在很多地方都改善了快速重传和快速恢复的性能 , 我们仅仅是为了IETF团体的利益而
将它文档化 。我们鼓励使用对快速恢复的这一修正 , 并且我们还鼓励反馈关于此修正或相关
修正的操作经验 。
2.定义
这篇文档假设读者熟悉[RFC2581]中定义的术语:最大段尺寸(MSS),拥塞窗口(cwnd),
和传送尺寸(FlightSize) 。传送尺寸在[RFC2581]中是如下定义的:
传送尺寸:已经发送但还没有确认的数据量 。
3.NewReno中的快速重传和快速恢复算法
标准的快速重传和快速恢复算法实现在[RFC2581]给出 。这些算法的NewReno修正在下
面给出 。NewReno修正[RFC2581]里的实现的不同仅在于步骤1中的变量“recover”的引入 ,
以及步骤5中对一个部分或新的确认的响应 。修正定义了一个“快速恢复过程” , 它在接收
到三个重复ACK时开始 , 并在一个超时重传发生或一个确认所有在快速恢复过程开始后发送
的数据的ACK到达时结束 。
1.当收到第三个重复ACK并且发送端还没有处于快速恢复过程时 , 设置ssthresh不大
于下面等式1中给出的值 。(这是[RFC2581]中的等式3) 。
ssthresh=max(FlightSize/2,2*MSS)(1)
用变量“recover”记录传送的最大序列号 。
2.重传丢失的段并设置cwnd为ssthresh乘以3*MSS 。这将人为地按已经离开网络的报
文段数目(3)和接收端缓冲数据量来扩充拥塞窗口 。
3.对每个接收到的额外的重复ACK , 将cwnd增大SMSS字节 。这将人为地扩充拥塞窗口
以反映已经离开网络的附加数据段 。
4.发送一个数据段 , 假如cwnd和接收端的通知窗口的值答应的话 。
5.当一个确认新数据的ACK到达时 , 此ACK可能是由步骤2中的重传引发的确认 , 或者
是由稍后的一次重传引起的 。
假如这个ACK确认了直到并包含“recover”的数据 , 那么这个ACK确认了所有在丢
失段的原始传送和第三个重复ACK接收之间的段 。设置cwnd为(1)
min(ssthresh,FlightSize MSS);或者(2)ssthresh,这里的ssthresh是步骤1中设置的值;
这称为“deflating”窗口 。(我们注重到步骤1中“FlightSize”指的是当进入快速恢复时
步骤1中发送的数据量 , 步骤5中的“FlightSize”指的是当退出快速恢复时发送的数据量 。)
假如选择了另一个选项 , 实现应该采取措施避免可能的数据爆发 , 万一向网络中发送的数据
量远小于新拥塞窗口答应的量[HTH98]的话 。退出快速恢复过程 。
假如这个ACK不确认所有并包含到“recover”的数据的话 , 就产生一个部分ACK 。在
此种情况下 , 重传第一个没有确认的数据段 。按确认的新数据量来减小拥塞窗口 , 然后加回
一个MSS并发送一个新数据段 , 假如cwnd的新值答应的话 。这个“部分窗口缩减”试图确
定这一点 , 当快速恢复最终结束时 , 大约ssthresh数量的数据还在向网络中传送 。不要退
出快速恢复过程(也就是说 , 假如任何重复ACK随后到达 , 执行上面的步骤3和4) 。
对在快速恢复期间第一个到达的部分ACK , 也要重设重传定时器 。
注重到在步骤5中 , 拥塞窗口在一个部分确认收到时减小 。拥塞窗口在部分确认收到时
可能已经大幅膨胀 。另外 , 根据丢失数据包的类型 , 部分确认可能确认将近一个窗口的数据 。
推荐阅读
- TCP拥塞控制
- vivoy91是双卡双待吗
- 苹果手机里的照片怎么恢复
- HTCP/0.0 超文本缓存协议
- 怎么恢复腾讯信誉分
- 如何恢复微信支付凭证
- WINS 服务的基本概念
- 最大分段 小议TCP的MSS以及MTU
- 快速背课文的方法
- TCP的首部
