学习笔记18——个人理解为什么快速重传是3次ACK

  • 为什么快速重传是选择3次ACK?

    • 个人理解:首先网络中的丢包,乱序以及网路故障都会让服务器端发回duplicated ACK,表示有一个包一直未收到。快速重传是通过3次ACK来区分乱序,丢包和网路拥塞的情况,是基于实践经验得到的,所以说这种判断方式不一定准确,只是"大概率"可以解决问题。
    • 在timeout期间,如果并没有收到ACK,就直接超时重传并执行慢开始
    • 在timeout期间,如果收到的duplicated ACK小于等于两次,那么很可能是因为包到达的顺序是乱序:包A后边的包先到了,但是A还没有到达,所以服务器端就会请求包A,由于网络中没有别的问题,所以服务器稍微等了一会儿(一般小于等于两次),包A就到了,如果是这种情况,那么我们不需要做任何改动,因为乱序问题服务器端TCP会处理
    • 在timeout期间,如果收到的duplicated ACK达到3次,那么很可能是因为丢包或者网络拥塞导致包无法发送到服务器端:
      • 如果是网络拥塞,那么我们直接降低网络流量是合理的
      • 如果是因为偶然的错误某个包丢了,我们就慢开始从1开始发送网络流量,就很影响传输效率
    • 对于上述情况出现概率都是50%,我们采用一种稍微乐观的态度(毕竟3次都能传回来,应该心态好点),将上述情况中和一下,也不重新慢开始,也不能什么都不做,当看到3次 duplicated ACK,我们快速重传一次(不等重传计时器),并使用快恢复策略,即拥塞窗口减半,阈值等于拥塞窗口。
  • 个人理解,欢迎指正!

相关推荐
Hello_Embed2 分钟前
嵌入式上位机开发入门(二十八):JSON 与 JsonRPC 入门
网络·笔记·网络协议·tcp/ip·嵌入式
U盘失踪了8 分钟前
Playwright codegen脚本录制
笔记
Joseph Cooper28 分钟前
STM32MP157 Linux驱动学习笔记(一):驱动基础与设备模型入门(同步互斥/LCD/I2C/Input)
linux·stm32·学习
Joseph Cooper31 分钟前
STM32MP157 Linux驱动学习笔记(二):硬件资源地基(Pinctrl/GPIO/Interrupt)
linux·stm32·学习
xieliyu.39 分钟前
Java手搓数据结构:从零模拟实现单向无头非循环链表
java·数据结构·学习·链表
conti12343 分钟前
水题记录2.4
c++·笔记·题解
y = xⁿ1 小时前
MySQL学习日记:关于MVCC及一些八股总结
数据库·学习·mysql
做cv的小昊1 小时前
【TJU】研究生应用统计学课程笔记(4)——第二章 参数估计(2.1 矩估计和极大似然估计、2.2估计量的优良性原则)
人工智能·笔记·考研·数学建模·数据分析·excel·概率论
~无忧花开~1 小时前
CSS全攻略:从基础到实战技巧
开发语言·前端·css·学习·css3
叹一曲当时只道是寻常1 小时前
memos-cli 安装与使用教程:将 Memos 笔记同步到本地并支持 AI 语义搜索
人工智能·笔记·golang