当前位置: 首页 > web >正文

【网络原理】TCP提升效率机制(一):滑动窗口

目录

一. 前言

 二. 滑动窗口

 三. 丢包现象

1)ACK报文丢失 

2)数据丢失

四. 总结


一. 前言

TCP最核心的机制就是可靠传输 ,确认应答,超时重传,连接管理这些都保证了可靠传输,得到了可靠传输,但是传输效率降低了

单位时间内,传输的数据量变少了


  • 由于确定应答机制,发送方每发送一次数据,接收方就要返回一个ACK,收到ACK之后才会发送下一次数据,将大部分的时间都浪费在了等待ACK中

 所以我们希望在可靠传输的基础上,减少等待的时间,从而提高效率


 二. 滑动窗口

我们引入滑动窗口的机制,就可以保证在可靠传输的基础上,提高效率(减少等待时间) 


核心思想就是批量传输

 发送一个数据之后,不等了,再发一个,连续发送一定的数据之后,统一等ACK

把多次请求的等待时间,使用同一份时间来等,减少了总的等待时间

滑动窗口

  • 连续发送一定量的数据,这个一定量的数据由滑动窗口来规定,连续发送一个窗口的数据,就必须停下来等待ACK
  • 如上图,连续发送三份数据(一个窗口数据),那么就会收到对应的三个ACK报文
  • 如果一直等待,直到收到最后一个ACK再往后移动三份,这样显然效率不高,但是如果收到第一份数据的ACK,那么就往后滑动一位,同时发送数据,一直这样循环

由于每次移动一个位置,窗口移动的速度很快,类似于滑动的效果,所有叫滑动窗口 


 三. 丢包现象

 整个TCP最重要的就是可靠性,如果出现丢包现象,滑动窗口如何解决?


1)ACK报文丢失 

ACK报文的含义: 

  1. 这个序号之前的数据,我都收到了
  2. 下一次从这个序号开始

 如果出现ACK报文丢失情况,不用管,不会对可靠性造成影响 (不需要重传)

2)数据丢失

如果出现数据丢失情况,则必须要重传

  •  如果在传输过程中,出现数据丢失的情况,返回的ACK报文中的序号是下一次需要发送的起始位置,如果接收的不是想要的,会一直索要想要序号的数据,一直发送想要序号的ACK确认报文
  • 这里的连续索要是为了给没有收到的数据留有等待时间,这个数据没有到,可能是因为路上“堵”了,如果连续发送三次,依然没有到达,很有可能就是丢了,需要重发
  • 发送方多次收到索要相同的数据,那么就会认为丢包,则会进行重发
  • 在主机2中,存有缓冲区,会把已经收到的数据放在缓冲区中,如果得到了自己一直索要的数据,那么会直接取当前连续序号的最大值

 在上述的重传过程,整体的效率非常快,针对性很强,缺失哪个就重传哪个,已经收到的数据,也不需要重新发送,整体的效率没有额外损失,这样的重传机制,被称为快速重传


四. 总结

  •  确认应答是TCP可靠传输的主要原因,超时重传是对确认应答的补充
  • 在滑动窗口中,同样存在确认应答机制,只是将一个一个确认,变成了批量确认
  • 如果短时间内数据很少,滑动窗口根本滑不起来,就变成了确认应答

如果短时间内传输大量数据,则传输方式为滑动窗口,依靠快速重传保证可靠性

如果传输数据不多,那主要是发送一个数据,返回一个应答,这种模式的确认应答,主要依靠超时重传保证可靠性


点赞的宝子今晚自动触发「躺赢锦鲤」buff! 

http://www.xdnf.cn/news/1404.html

相关文章:

  • VBA批量读取access数据库(.mdb)
  • JAVA猜数小游戏
  • 面试篇:Java集合
  • 新手村:过拟合(Overfitting)
  • WPF 图片文本按钮 自定义按钮
  • Shopee五道质检系统重构东南亚跨境格局,2025年电商游戏规则悄然改写
  • DIY钢铁侠方舟反应堆第二期—第一代电路板展示
  • 【开源】STM32HAL库驱动ST7789_240×240(硬件SPI+软件SPI)
  • Yocto项目实战教程-第8章树莓派启动定制镜像-8.3小节-树莓派BSP层
  • Redis的string类型使用
  • 大数据利器Kafka
  • 基于PaddleOCR对图片中的excel进行识别并转换成word优化(二)
  • 【白雪讲堂】GEO优化第7篇 -构建《推荐类》内容的结构化模板
  • EasySearch 服务昨天还好好的,为什么今天突然访问不了了?
  • 安卓14默认赋予应用权限
  • 克拉屈滨联合阿糖胞苷与米托蒽醌(CLAM方案)
  • 基于ARM+FPGA+DSP的储能协调控制器解决方案,支持国产化
  • 视频智能分析平台EasyCVR无线监控:全流程安装指南与功能应用解析
  • Python 流程控制
  • radare2 入门与反汇编
  • Linux实现网络计数器
  • VS中回显109:对‘pthread_create’未定义的引用
  • HCIP-H12-821 核心知识梳理 (6)
  • 黑马Java基础笔记-3
  • 提高Spring Boot开发效率的实践
  • 算法题-图论
  • Linux进程状态及转换关系
  • webrtc建立连接的过程
  • UML 顺序图:电子图书馆管理系统的交互之道
  • RocketMQ 核心架构速览