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.hqwc.cn/news/79844.html

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

相关文章

Python“牵手”天眼查、企查查、启信宝企业数据API接口运用场景及功能介绍

天眼查企业信用查询app是一款企业数据信息查询软件,专注服务于个人与企业信息查询,是人人都在用的商业安全工具。本软件整合了国内所有企业数据信息,用户可以使用这款软件查询企业单位相关信息,只要在线输入企业名称,就可以为您搜…

数据通信——传输层(UDP)

引言 我们上网观看比赛的时候,一旦网络信号出现问题,那可就太难受了,这意味着卡顿的时间内,你会错过这段时间内的内容。这种特性要归功于UDP(User Datagram Protocol)用户数据报协议。 无连接性 一般的&am…

全网最全ArrayList底层原理实现

1. ArrayList集合底层数据结构 1. ArrayList集合介绍 ArrayList是实现了List接口的动态数组,所谓动态数组就是他的大小是可变的。实现了所有可选列表操作,并允许包括Null在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部…

[线程/C++]线程同(异)步和原子变量

文章目录 1.线程的使用1.1 函数构造1.2 公共成员函数1.2.1 get_id()1.2.2 join()2.2.3 detach()2.2.5 joinable()2.2.6 operator 1.3 静态函数1.4 call_once 2. this_thread 命名空间2.1 get_id()2.2 sleep_for()2.3 sleep_until()2.4 yield() 3. 线程同步之互斥锁3.1 std:mute…

wazuh环境配置及案例复现

文章目录 wazuh环境配置及案例复现wazuh环境配置 案例复现 wazuh环境配置及案例复现 wazuh环境配置 进入官网下载ova软件 https://documentation.wazuh.com/current/deployment-options/virtual-machine/virtual-machine.html 打开下载的ova,密码和用户名会显示…

自组织地图 (SOM) — 介绍、解释和实现

自组织地图 (SOM) — 介绍、解释和实现 一、说明 什么是SOM(self orgnize map)自组织地图,是GNN类似的图神经网络的概念。因为神经网络实质上可以解释为二部图的权重,因此无论GNN还是SOM都有共同的神经网络…

独立站怎么搭建?看这一篇就够了!强烈建议收藏!

独立站是跨境卖家对外销售的一个重要渠道,也是品牌塑造和品牌宣传的重要阵地。那么新手如何从0到1搭建出一个属于自己的独立站呢? 01.购买域名: 域名就相当于是一个网站的门牌号,是独立站的重要组成部分。卖家可以选择自己注册&…

什么是算法评价指标

在我们建立一个学习算法时,或者说训练一个模型时,我们总是希望最大化某一个给定的评价指标(比如说准确度Acc),但算法在学习过程中又会尝试优化某一个损失函数(比如说均方差MSE或者交叉熵Cross-entropy&…

【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求

问题描述 使用Azure API Management, 想对一些固定的IP地址进行访问次数的限制,如被限制的IP地址一分钟可以访问10次,而不被限制的IP地址则可以无限访问? ChatGPT 解答 最近ChatGPT爆火,所以也把这个问题让ChatGPT来解答&#x…

openGauss学习笔记-48 openGauss 高级数据管理-函数

文章目录 openGauss学习笔记-48 openGauss 高级数据管理-函数48.1 数学函数48.2 三角函数列表48.3 字符串函数和操作符48.4 类型转换相关函数 openGauss学习笔记-48 openGauss 高级数据管理-函数 openGauss常用的函数如下: 48.1 数学函数 abs(x) 描述:…

MATLAB R2023a for Mac Update_5

MATLAB是一种高级的计算机编程环境和开发工具,主要用于数值计算、数据分析、算法开发和可视化。它由MathWorks公司开发,被广泛应用于科学研究、工程设计、数据分析和教育等领域。 MATLAB提供了丰富的数学和工程函数库,可以进行矩阵运算、信号…

什么是卷积神经网络

目录 什么是卷积神经网络 全链接相对笨重:大胖子​编辑 ​编辑 参数众多:容易造成过拟合 ​编辑 卷积核:进行图像特征提取,源于卷积原理:求相交面积 卷积的作用 卷积的意义 ​编辑 通过卷积核减少参数 深度卷积…