JPEG标准的中文文档PDF
29.4快速重传和快速恢复的算法图2 9 - 3给出了ACK处理的下一部分代码,处理重复ACK,并决定是否起用TCP的快速重传和快速恢复算法[Jacobson 1990c]。两个算法各自独立,但一般都在一起实现[Floyd 1994]。
• 快速重传算法用于连续出现几次(一般为3次)重复ACK时,TCP认为某个报文段已丢失并且从中推断出丢失报文段的起始序号,丢失报文段被重传。RFC 1122中的4.2.1节提到了这一算法,建议TCP收到乱序报文段后,立即发送ACK。我们看到,在图27-15中,Net/3正是这样做的。这个算法最早出现在4.3BSD Tahoe版及后续的Net/1实现中,丢失报文段被重传之后,连接执行慢起动。
• 快速恢复算法认为采用快速重传算法之后(即丢失报文段已重传),应执行拥塞避免算法,而非慢起动。这样,如果拥塞不严重,还能保证较大的吞吐量,尤其窗口较大时。这个算法最早出现在4.3BSD Reno版和后续的Net/2实现中。
Net/3同时实现了快速重传和快速恢复算法,下面将做简单介绍。在图24-17节中,我们提到有效的ACK必须满足下面的不等式:snd_una <确认字段<= snd_max。第一步只与snd_una做比较,之后在图29-5中再进行不等式第二部分的比较。分开比较的原因是为了能对收到的ACK完成下列5项测试:
1) 如果确认字段小于等于snd_una;并且
2) 接收报文段长度为0;并且
3) 窗口通告大小未变;并且
4) 连接上部分发送数据未被确认(重传定时器非零);并且
5) 接收报文段的确认字段是TCP收到的最大的确认序号(确认字段等于snd_una)。
之后可确认报文段是完全重复的ACK (测试项1、2和3在图29-3中,测试4和5在图29-4的起始处)。TCP统计连续收到的重复ACK的个数,保存在变量t_dupacks中,次数超过门限(tcprexmtthresh,3)时,丢失报文段被重传。这也就是卷1第21.7节中介绍的快速重传算法。它与图27-15中的代码互相配合:当TCP收到乱序报文段时,立即生成一个重复的ACK,第29章TCP的输入(续)计计775下载。
若想进一步了解TCP拥塞控制算法的相关内容,可以参考快速重传与快速恢复算法-软件无线电原理与应用第二版,或查看快速恢复软件。这些资源不仅提供了更详细的算法描述,还能为您提供更深层次的理解和实用的应用实例。
在如此复杂的网络环境中,TCP拥塞控制算法无疑是保持网络稳定和高效的关键。如果您对这些算法有更多的兴趣,欢迎查阅TCP拥塞控制算法慢启动拥塞避免快速重传快速恢复和TCP协议对拥塞控制的研究。这些资源将帮助您全面掌握TCP的拥塞控制机制及其在实际应用中的表现。