TCP滑动窗口

为什么会有滑动窗口

  • 在计算机网络中,数据通常被分成小块(也叫数据段)在网络中传输(为什么会被分成小块,请了解拥塞窗口和流量控制)。这些小块可能会在传输的过程中遇到延迟、丢失或乱序等问题。为了保证数据的正确传输,我们需要一种方法来管理数据的发送和接收。

  • 而滑动窗口就像是一个虚拟的窗口,用来控制发送方和接收方之间的数据交换。当发送方把数据段发送给接收方时,发送窗口会向前滑动,表示发送方可以继续发送更多的数据。接收方会根据自己的接收窗口的大小,告诉发送方它可以接收多少数据。如果发送方发送的数据超过了接收方的窗口大小,接收方会拒绝接收多余的数据,以避免数据的丢失或混乱。

  • 同时,滑动窗口机制也有助于优化网络的利用率。发送方不需要等待每个数据段的确认,它可以持续发送多个数据段,只要发送窗口内的数据没有超过接收窗口的大小。这样可以充分利用网络的带宽,提高数据传输效率。

简单来说,滑动窗口机制就是为了在网络通信中更好地管理数据的传输。它确保发送方和接收方之间的数据交换有序、可靠,同时最大限度地利用网络资源。就像拍照时要控制好光线,光线过强会导致过曝,太弱会导致欠曝。

滑动窗口是什么

在这里插入图片描述

  • 滑动窗口实际上是发送缓冲区的一部分,滑动窗口左边代表已经确认发送成功,即接收到来自对端发送的ACK报文,是可以被覆盖的无效数据。

  • 滑动窗口内部代表不需要应答,直接就可以发送的数据和已经发送但未确认应答的数据。发送到数据大小根据对端给的应答报文中窗口大小来确定。

  • 滑动窗口的右边代表着尚未发送到数据内容。滑动窗口内的数据发送完后,滑动窗口就会右移,窗口大小由对端的应答报文中的窗口大小决定。

滑动窗口工作原理

  1. 应答报文中会返回下一次发送数据的序号, 窗口的下一次起始位置就等于返回的序号
    应答报文中的会返回此时接收端接收缓冲区的大小。而窗口的起始位置 + 缓冲区大小就是窗口的大小,即决定了窗口的结束位置

  2. 滑动窗口只能向右滑动,因为向左没有意义,左边是已经发送的废弃数据。

  3. 窗口大小可大可小,是浮动的,也能变0,代表对端不能再接收数据了,对端的接收缓冲区可用容量为0了,此时就进入到了发送端的窗口探测阶段和对端的窗口更新通知阶段。

  4. 如果报文丢失了呢

    1. 应答丢失

      假设有1000-5000序号的数据发送,对端返回应答,丢失了2001,但我们收到了3001,4001和5001的确认应答。虽然丢掉了2001应答,但收到了后面的数据应答,这意味着之前的数据对端都接收到了,只是应答丢了而已,而发送端只需要关心我的数据是否成功发送,不关心应答,所以应答丢失了2001不重要,不关心。
      在这里插入图片描述

    2. 数据丢失

      假设有1000-5000序号的数据发送,丢失了2000之前的数据,对端返回应答时就不会返回后面的确认应答序号,而返回1001。由于发送端发送的是1000-5000,而收到的应答中确认序号却是1001,代表1000后面的数据丢包了,此时滑动窗口不动,等待超时重传。

      无论滑动窗口中丢失的是最左侧的数据、中间的数据还是最末尾的数据,通过数据重传和确认,及窗口滑动的过程,被确认的正常数据都会从窗口的左侧被删除,最后剩下的无论是左侧、中间还是末尾的丢失数据,都将转换为相对窗口而言的左侧丢失。

      具体分析:

      • 最左侧数据丢失 - 此时窗口不能滑动,直到最左侧数据重传并确认,窗口才开始滑动。
      • 中间数据丢失 - 中间数据之前和之后的正常数据会被确认,窗口会滑动到中间数据,此时对窗口来说,中间数据就转换为了左侧丢失。
      • 最末尾数据丢失 - 除了最末尾的数据,其他的数据都会得到确认,窗口滑动到最末尾数据,对窗口来说,它现在就是左侧丢失。
      • 通过重复以上过程,最后都会转换为窗口左侧数据的丢失。

    实际上快重传和超时重传就是依托滑动窗口接受ACK确认之前会保留的特性来实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/102325.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis之动态SQL及映射结果(带你了解动态SQL的魅力)

目录 前言 一、Mybatis之动态SQL 1. 简介 2. 作用及重要性 3. 应用场景 二、动态SQL讲解 1. 原生使用工具类(BaseDao)的SQL 2. 运用动态SQL编写方法 2.1 Mybatis动态SQL的常用标签 2.2 Mybatis动态SQL的常用函数 2.3 案例展示 if标签的运用 f…

angular中如何定义一个全局组件?

需求,我们需要新建一个navBreadcrumb的全局组件。这是一个面包屑导航,在不同的页面引入时传入一个路由数组即可。 第一步:我们新建这个组件: ng g c navBreadcrumb ng g m navBreadcrumb----------nav-breadcrumb.module-------…

AMBA总线协议(8)——AHB(六):分割传输

一、前言 在之前的文章中,我们重点介绍了AHB传输的仲裁,首先介绍了仲裁相关的信号,然后分别介绍了请求总线访问,授权总线访问,猝发提前终止,锁定传输和默认主机总线,在本文中我们将继续介绍AHB的…

论文《LoRA: Low-Rank Adaptation of Large Language Models》阅读

论文《LoRA: Low-Rank Adaptation of Large Language Models》阅读 BackgroundIntroducitonProblem StatementMethodology Δ W \Delta W ΔW 的选择 W W W的选择 总结 今天带来的是由微软Edward Hu等人完成并发表在ICLR 2022上的论文《LoRA: Low-Rank Adaptation of Large Lan…

交叉编译 libzdb

参考博客:移植libzdb3.2.2到arm_configure: error: no available database found or s_酣楼驻海的博客-CSDN博客 编译时间 2023-08-23 libzdb 下载: 源码访问如下: https://bitbucket.org/tildeslash/libzdb/src/master/ git 下载链接 …

低代码开发ERP:精打细算,聚焦核心投入

企业数字化转型已经成为现代商业环境中的一项关键任务。如今,企业面临着日益激烈的竞争和不断变化的市场需求。在这样的背景下,数字化转型不仅是企业生存的必然选择,也是取得竞争优势和实现可持续发展的关键因素。 在数字化转型的过程中&…

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务 Intel DevCloud for oneAPI 和 Intel Optimization for PyTorch基于BERT预训练模型的英文文本蕴含任务语料介绍数据集构建 模型训练 结果参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0…

3D数据转换工具HOOPS Exchange概览

HOOPS Exchange SDK是一组C软件库,使开发团队能够快速为其应用程序添加可靠的2D和3D CAD导入和导出功能。这允许访问广泛的数据,包括边界表示(BREP)、产品制造信息(PMI)、模型树、视图、持久ID、样式、构造…

使用 MATLAB 和 Simulink 对雷达系统进行建模和仿真

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Redis多机实现

Background 为啥要有多机--------------1.容错 2.从服务器分担读压力。 主从结构一大难题------------如何保障一致性,对这个一致性要求不是很高,因为redis是用来做缓存的 同时我们要自动化进行故障转移-------哨兵机制,同时哨兵也可能cra…

使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。

1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 拉取mysql:5.6和owncloud的镜像和生成实例 [rootlocalhost ~]# docker pull mysql:5.6 [rootlocalhost ~]# docker pull ownclound [rootlocalhost ~]# docker run -d --name mydb1 --env MYSQL_ROOT_PASSWO…

智慧工地:安防监控EasyCVR智慧工地视频监管风险预警平台的应用

智慧工地方案是一种结合现代化技术与工地管理实践的创新型解决方案。它通过实时监控、数据分析、人工智能等技术手段,使工地管理更加高效、智能化。在建设智慧工地的过程中,除了上述提到的利用物联网技术实现设备互联、数据采集及分析以外,还…

python - 编程中【工厂模式】和【单例模式】区别以及代码示例详解

一. 概念 工厂模式和单例模式都是面向对象编程中常用的设计模式。 工厂模式(FactoryPattern):是一种创建型模式,它提供了一种方法来创建对象,而不需要暴露对象的创建逻辑。这种模式通过定义一个工厂类,通…

远程端口转发 实践 如何将物理机某一端口的服务转发到vps上,使得外网能访问到

以本机1470端口(我的sqli-labs)与vps的9023端口为例。 SSH基本的连接命令是: ssh usernamehostname这里牵扯到了两台主机,一是执行命令、运行SSH客户端的主机,我们称为本地主机A【Host A】;二是接收连接请…

小程序运营方式有哪些?如何构建小程序运营框架?

​如今,每个企业基本都做过至少一个小程序,但由于小程序本身不具备流量、也很少有自然流量,因此并不是每个企业都懂如何运营小程序。想了解小程序运营方式方法有哪些? 在正式运营小程序前,了解小程序的功能与企业实际经…

Heikin Ashi最简单的一种烛台移动平均线

是不是每次进行交易的时候,市场上的各种新闻真真假假,搞的交易者每次都分不清楚,今天FPmarkets澳福给各位投资者推荐一种交易策略——“Heikin Ashi” “Heikin Ashi”只通过四个参数构建:开盘价、收盘价、最高价和最低价(最大和…

ssm汽车养护管理系统源码和论文

ssm汽车养护管理系统038 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 开题报告内容:(研究现状、目的意义;基本内容、研究方法、参考文献等。) 研究现状 国外…

chapter 3 Free electrons in solid - 3.1 自由电子模型

3.1 自由电子模型 Free electron model 研究晶体中的电子: 自由电子理论:不考虑离子实能带理论:考虑离子实(周期性势场)的作用 3.1.1 德鲁德模型 Drude Model - Classical Free Electron Model (1)德鲁德模型 德鲁…

golang 协程的实现原理

核心概念 要理解协程的实现, 首先需要了解go中的三个非常重要的概念, 它们分别是G, M和P, 没有看过golang源代码的可能会对它们感到陌生, 这三项是协程最主要的组成部分, 它们在golang的源代码中无处不在. G (goroutine) G是goroutine的头文字, goroutine可以解释为受管理的…

React(7)

1.React Hooks 使用hooks理由 1. 高阶组件为了复用,导致代码层级复杂 2. 生命周期的复杂 3. 写成functional组件,无状态组件 ,因为需要状态,又改成了class,成本高 1.1 useState useState();括号里面处的是初始值;返回的是一个…