27-TCP 协议(快重传与快恢复)
很遗憾的是,这里一节我没办法用实验演示给你看,但是我尽量用文字和图叙述清楚。
慢启动和拥塞避免算法是在 1988 年提出的,而快重传和快恢复是 1990 年提出的。既然这两个新算法是时隔两年后才提出的,那么它一定是对慢启动和拥塞避免算法的不足之处进行了改良。
在此之前,先来回忆一下,发送方如何判定网络产生拥塞?已知的一种情况是对方回复 ack 超时。其实还有一种情况,如果发送方连续收到接收方多个重复的 ack(接收方不会没事发送重复的 ack 的),则说明网络生产拥塞(为什么?看完第 1 节你就明白了)。那么简单总结一下,发送方判定网络拥塞就有两种情况了:
- ack 超时
- 发送连续收到重复的 ack
知道了上面的事情后,接下来看看,针对连续收到重复的 ack,发送方应该怎么做。
1. 快重传
首先对于接收方来说,如果接收方收到一个失序的报文段,就立即回送一个 ACK 给发送方,而不是等待发送延时的 ACK(请参考《迟到的 ACK》)。所谓失序的报文是指,用户没有按照顺序收到 TCP 报文段,比如接收方收到了报文 M1, M2, M4,那么 M4 就称为失序 报文。
这样做的目的是可以让发送方尽可能早的知道报文段 M3 未到达接收方。快重传算法规定,如果发送方一连收到 3 个重复的确认,就应当立即传送对方未收到的报文 M3,而不必等待 M3 的重传计时器到期。
图1 快重传算法
2. 快恢复
在学习了上一节的慢启动和拥塞避免算法后,我们知道,一旦出现超时重传,TCP 就会把慢启动门限 ssthresh 的值设置为 cwnd 值的一半,同时 cwnd 设置成 1. 但是快恢复算法不这样做。
一旦出现超时重传,或者收到第三个重复的 ack 时(快重传),TCP 会把慢启动门限 ssthresh 的值设置为 cwnd 值的一半,同时 cwnd = ssthresh (在有些版本中,会让 cwnd = ssthresh + 3)。
之前的旧版本的算法是在 TCP 的 Tahoe 版本中,而改进的版本算法是在 TCP Reno 版本中。图 2 中演示了他们之间的区别。蓝色曲线是旧版本,而红色是新版本。
图2 TCP Reno 版本与 Tahoe 版本
图 2 中,连续收到三个重复确认后,TCP Reno(红色)版本转入了拥塞阶段,而 TCP Tahoe 版本(蓝色)转入了慢启动阶段。
实际上,现代的 Linux 内核版本早已都不采用上面这些 TCP 版本了,而是使用使用的 TCP Cubic 版本。那为什么还要学呢?这就好比你想学会走,你就得先学会爬,简单的先弄会,以后再自学复杂的。
3. 流量控制与拥塞控制
在学习流量控制的时候,我们假设网络无限好,不拥塞。在学习拥塞控制的时候,我们又假设接收方缓冲区和接收窗口无限大,对数据来者不拒。现在,是时候综合考虑他们的时候了。
如何综合考虑这两者呢?实际上很简单,我们只要将接收方的窗口 rwnd 和拥塞窗口 cwnd 放在一起比较,取两者中的较小者,也就是:
发送方的窗口上限值 = \min \{rwnd, cwnd\}
上式指出:
- rwnd < cwnd : 是接收方的接收能力限制了发送方窗口的最大值。
- cwnd < rwnd : 是网络的拥塞限制了发送方窗口的最大值。
4. 总结
- 掌握快重传与快恢复
- 知道 TCP Reno 版本和 TCP Tahoe 版本的区别
- 如何综合考虑流量控制与拥塞控制
27-TCP 协议(快重传与快恢复)相关推荐
- 网络:TCP停止等待、超时重传、滑动窗口、拥塞控制、快重传和快恢复
TCP超时与重传机制 TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时与重传机制.其基本原理:在发送一个数据之后,就开启一个定时器,若是 ...
- UDP(首部)和TCP(首部、三次握手、四次挥手、可靠传输、滑动窗口、流量控制、拥塞控制(慢开始、拥塞避免、快重传、快恢复))
1.UDP 用户数据报协议 UDP(User Datagram Protocol): 是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部 ...
- 5.3.3 计算机网络传输层之TCP拥塞控制(慢开始与拥塞避免、快重传和快恢复)
文章目录 1.什么是拥塞控制? 2.拥塞控制与流量控制的区别 3.拥塞控制的4种算法 (1)慢开始与拥塞避免 (2)快重传和快恢复 1.什么是拥塞控制? 所谓拥塞控制,是指防止过多的数据注入网络,保证 ...
- 关于慢开始、拥塞控制、快重传、快恢复算法的理解
门限值(ssthresh):过了门限值就采用拥塞控制算法 拥塞窗口:某时刻能发送多少报文段 超时:一旦发送方发现超时,立刻就调整门限值,为顶峰窗口1/2,然后采用慢开始算法. 收到三个重复ACK:一旦 ...
- TCP之快重传与快恢复
1.快重传 对于接收方来说,如果接收方收到一个失序的报文段,就立即回送一个 ACK 给发送方 当发送方收到了3个重复的ACK时,则发送方快速重传丢失的包(所谓失序的报文是指,用户没有按照顺序收到TCP ...
- TCP协议(二) 重传 乱序和丢包
TCP重传机制 接收端给发送端的Ack确认只会确认最后一个连续的包,比如,发送端发了1,2,3,4,5一共五份数据,接收端收到了1,2,于是回ack 3,然后收到了4和5. 1)超时重传 一种是不回a ...
- 【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
文章目录 一.TCP 拥塞控制 二.TCP 拥塞控制算法 三.慢开始 和 拥塞避免 算法 四.快重传 和 快回复 算法 一.TCP 拥塞控制 TCP 拥塞控制 : ① 拥塞出现表现 : 资源需求总和 ...
- TCP协议基于计时器的重传策略模拟实战
前言: 关于TCP协议的重传策略,是TCP数据传输正确性的重要保证. 由于下层网络层协议可能出现的包丢失.重复.失序包等问题,当TCP协议基于某种策略确认当前包已经发生以上情况,就会启动重传. TCP ...
- 《lwip学习10》-- TCP协议
TCP服务简介 UDP 运载的数据是以报文的形式,各个报文在网络中互不相干传输, UDP 每收到一个报文就递交给上层应用,因此如果对于大量数据来说,应用层的重装是非常麻烦的,因为UDP 报文在网络中到 ...
最新文章
- JS 实现可停顿的垂直滚动
- CentOS 6.5 手动rpm包安装gcc、g++
- 基于LZ77算法的文件解压缩项目缺陷分析
- 使用PrimeFaces开发数据导出实用程序
- 松下壁挂式新风系统推荐_松下壁挂式新风怎么样 松下壁挂式新风系统优势介绍【详解】...
- uln2003驱动蜂鸣器_让蜂鸣器发声
- canny算子的理论分析
- 解决保存快照失败后redis无法写入的问题( Redis is configured to save RDB snapshots)
- JAVA输入jdb,解决 JAVA 单步调试键盘输入被 JDB 占用的问题
- 支持鸿蒙系统的手机名单,华为鸿蒙系统支持手机型号名单
- Reed-Solomon Codes——RS纠错码
- Windows电脑添加打印机
- 【C++OJ多重继承与虚拟继承】商旅信用卡(多重继承)
- 【求职经历】四川移动暑期实习面试经历
- 实现智能dns为用户分配最佳线路
- AdBlock/AdBlock Plus 屏蔽广告
- 正则表达式的用法和常用正则表达式大全(转)
- 天池-淘宝用户行为数据分析(python+Tableau)
- DM8在银河麒麟服务器上配置Oracle19c的DBLINK服务
- PyCharm + PySide2/PySide6 外部工具配置