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

相关推荐
JaguarJack2 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo2 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack1 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
starlaky2 天前
Django入门笔记
笔记·django
QQ5110082852 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
勇气要爆发2 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达
WeiXin_DZbishe2 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习