学习笔记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,我们快速重传一次(不等重传计时器),并使用快恢复策略,即拥塞窗口减半,阈值等于拥塞窗口。
  • 个人理解,欢迎指正!

相关推荐
南境十里·墨染春水2 分钟前
C++ 笔记 仿函数(函数对象)
开发语言·c++·笔记
幽络源小助理14 分钟前
Kratos Typecho 主题源码:完美移植 WordPress 版
php·源码
禹中一只鱼36 分钟前
【力扣热题100学习笔记】 - 双指针
java·笔记·学习·leetcode·贪心算法
jwn99939 分钟前
PHP vs C:语言特性与应用场景对比
c语言·开发语言·php
我还为发觉1 小时前
2026 PHP入门到精通全实操(环境部署+框架实战)
开发语言·php
haiyangyiba1 小时前
学习Spring Ai的摸索实践
学习·spring ai
chase。1 小时前
【学习笔记】cuRoboV2——为高自由度机器人打造的动力学感知运动生成框架
笔记·学习·机器人
南境十里·墨染春水1 小时前
C++ 笔记 多重继承 菱形继承(面向对象)
开发语言·c++·笔记
泡泡鱼(敲代码中)1 小时前
C++-string学习笔记
c语言·开发语言·c++·笔记·学习·visualstudio
ACGkaka_1 小时前
ES 学习(六)设置账号密码(安全认证)
学习·安全·elasticsearch