TCP滑动窗口

article/2025/9/30 19:56:17

1、滑动窗口的概念

  TCP每发送一个数据,都需要进行一次应答。当收到了上一个应答,在发下一个数据,但这种方式效率比较低。数据包往返时间越长,通信的效率就越低。
  为了解决这个问题,TCP引入了窗口概念。即在接收窗口范围内的数据,无需等待确认,可以继续发送窗口内数据,直到把发送窗口数据传输完毕。
  窗口的实现实际上是在操作系统开辟一个缓存空间(空间和序号都是有限的,并且要循环使用,一般为环形队列),发送主机在等到确认应答返回之前,必须在缓冲区保留已发送窗口的数据(超时重传)。收到应答后,将此数据清除。

2、滑动窗口的使用

  TCP的滑动窗口是以字节为单位的。
  TCP通信是全双工通信,通信中的每一方都在发送和接收报文段。每一方都有自己的发送窗口和接收窗口。
  假设数据是由A发往B的,即A发送数据,B给出确认。
在这里插入图片描述
  如图所示,表示B发来的确认报文段。其中窗口是20字节,确认号是31(表明B期望收到的下一个序号是31,表示31之前的数据已收到)。根据这两个数据,A根据B的窗口值构造出自己的发送窗口为20字节(A的发送窗口一定不能超过B的接收窗口数值,上篇文章讲到过的)。
  其中A主机在没得到B的确认的情况下,A可以连续把窗口内的数据都发送出去。凡是已发送过的数据,在未收到确认之前都必须暂时保留在缓存空间内,以便在超时重传使用。
  上图窗口后沿之后的数据表示已发送且收到了确认。这部分数据不需要在保留。发送窗口前沿之前的部分数据表示不允许发送的,接收方没有更多缓存接收这些数据。

3、滑动窗口的位置

发送和接收窗口的位置在实时动态变化着。
在这里插入图片描述
  在程序设计上描述一个窗口状态需要三个指针。
如上图A的发送窗口

P3 - P1 = A的发送窗口
P2 - P1 = 已发送但尚未收到确认的字节数
P3 - P2 = 允许发送但当前尚未发送的字节数(又称可用窗口或有效窗口)

  B的接收窗口。窗口大小是20。窗口之外,到30为止的数据时已经发过确认,并且已经交付主机了。因此B可以不在保留这些数据。接收窗口内的数据序号(31~50)是允许接收的。
  对于不按序到达的数据,TCP标准并无明确规定。如果接收方把不按序到达的数据一律丢弃,那么接收窗口管理将会比较简单,但是对网络资源的利用不利。因此TCP通常对不按序到达的数据时先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,在按序交付上层的应用进程。
  如上图,B先收到了序号为32和33的数据(31未收到,也许丢失或滞留在网络中),此时B会给出确认报文,报文段中确认号仍为31(31未收到,期望收到的序号)。
在这里插入图片描述
  假定B以收到序号为31的数据,并把序号为31~33的数据交付主机,然后把接收窗口向前移动3个序号,并删除已交付数据缓存(如上图)。同时给A发送确认,窗口大小仍为20,确认号34。图中可以注意到,已经收到了序号为37,38和40的数据,但这些都未按序到达,同样按以上方法暂存到接收窗口中。
  A收到B的确认后,就可以把发送窗口向前滑动3个序号,即P1和P3向右移动3序号,但P2不动。A的可用窗口在增大。
  此时A继续发送数据,指针P2向前移和P3重合。发送窗口内的序号都已用完,但还没有再收到确认。由于A的发送窗口已满,可用窗口为0,就必须停止发送了。
在这里插入图片描述
  为了保证可靠传输A不能猜测:“或许B收到了吧!”,A只能认为B还没收到这些数据。于是A经过一端时间后(超时计数器时间)重传此段数据,重新计时,直到收到B的确认为止。


http://chatgpt.dhexx.cn/article/DZw7a0fC.shtml

相关文章

TCP 滑动窗口详解(非常实用)

一、滑动窗口简介 滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的 拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包, 谁也发…

TCP滑动窗口机制(重要)

本文参考了一些优秀的书籍->图解TCP/IP,TCP协议卷一,小林coding,还有等等的知乎,百度. 小林coding 小林coding 知乎牛客的文章 : 万字长文 | 23 个问题 TCP 疑难杂症全解析_技术交流_牛客网 这篇文章是关于TCP的又一个重要机制-->滑动窗口,下面是这篇文章的思维导图: 目…

TCP滑动窗口详解

相较于UDP,TCP有以下区别: 1、可靠传输 2、流量控制 这两个功能都是依靠滑动窗口来实现的,本文就来解密TCP中的滑动窗口。 TCP实现可靠传输依靠的有 序列号、自动重传、滑动窗口、确认应答等机制。 序列号 首先我们说下序列号&#xff0c…

计算机视觉——SIFT图像匹配算法

第二章:SIFT(尺度不变特征变换) 1. SIFT简介1.1 SIFT算法特点1.2 SIFT特征检测的步骤 2. 尺度空间3. 高斯模糊3.1 高斯模糊3.2 高斯金字塔 4. DoG金字塔4.1 DoG局部极值检测4.2 DoG去除边缘响应4.2.1低对比度的响应点4.2.2不稳定的边缘响应点…

SIFT图像匹配原理及python实现(源码实现及基于opencv实现)

写在前面 黄宁然,看过你看过的算法,数学不好是硬伤。 问题来源: An***** xue100: https://bbs.csdn.net/topics/*********?spm1001.2014.3001.**77 (1)相机置于地面,离天花板的高度始终不变。在某位置拍…

计算机视觉——sift特征匹配+opencv(包含sift的低于3.4.3的opencv安装方法)

文章目录 实验环境环境配置(低于3.4.3的opencv安装方法)虚拟环境的搭建(非必要)局部图像描述子Harris 角点检测基本原理SIFT特征提取代码实现运行实例匹配图像展示匹配结果和分析 实验环境 系统:Ubuntu16.04 语言&…

使用 Javascript 和 OpenCV.js 进行人脸检测

大家好,我们将研究如何使用常规 Javascript、HTML Canvas 和 OpenCV.js 库从图像中检测人脸。 让我们先看一些例子,然后我们将继续编写代码并解释 如果您需要查看完整的代码库刚刚获得我的 github 存储库 GitHub - reactcodes/face-detection-javascript…

图像处理:局部描述子SIFT算法

目录 0、关于SIFT的介绍 1、兴趣点 2、描述子 SIFT算法实现 1.实例化sift 2.利用sift.detectAndCompute()检测关键点并计算 3.将关键点检测结果绘制在图像上 Opencv实现 总结 0、关于SIFT的介绍 SIFT,即尺度不变特征变换,一种局部特征描述子&…

SIFT3D点云关键点提取详细介绍

1.引言 SIFT3D的理论基础完全是从图像特征SIFT2D中迁移类比过来的,类似的还有Harris3D和Harris6D的理论也是来源于Harris2D的,这些点云特征在PCL库中都有具体的实现。Harris3D和Harris6D目前已经有很好的博客和视频讲解了但是SIFT3D却没有一个比较好的介…

java sift 图片相似度,简单快速的图像相似性比较方法

我最近也面临同样的问题,为了解决这个问题(简单快速的算法比较两个图像),我贡献了 img_hash module 要打开“控制”,您可以从 this link . img_哈希模块提供六种图像哈希算法,非常容易使用。 代码示例 起源Lena 模糊莉娜 调整Lena的大小 移动Lena #include #include #include…

图像特征提取(二)——SIFT算法详解

转载自:http://blog.csdn.net/zddblog/article/details/7521424尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT)Just For Fun zdd zddmailgmail.com or (zddhubgmail.com) 对于初学者,从David G.Lowe的论文到实现,有许多鸿沟…

Matlab实现sift特征检测+图像拼接

Matlab实现sift特征检测图像拼接共有12个m文件,其中main为主程序,点击运行即可。 一、部分代码示例 close all; clear; clc;im1imread(test3.png); im2imread(test4.png);gray1img2gray(im1); gray2img2gray(im2);[des1,loc1]sift(gray1); [des2,loc2]…

sfm算法之三角化(三角测量)

sfm算法流程一般是特征点提取、特征点匹配、计算本质矩阵/基础矩阵,最后三角化。但是利用机械臂去观察周围,前后帧姿态变化参数是具有的,所以不需要通过基础矩阵获取。 即利用机械臂的信息直接进行深度估计。已知:手眼标定、相机外…

简述人脸识别技术

简介 人脸识别技术是一种生物识别技术,可以用来确认用户身份。人脸识别技术相比于传统的身份识别技术有很大的优势,主要体现在方便性上。传统的身份认证方式诸如:密码、PIN码、射频卡片、口令、指纹等,需要用户记住复杂密码或者携…

Python机器视觉--OpenCV进阶(核心)-边缘检测之SIFT关键点检测

SIFT关键点检测 SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。 …

图像特征与描述子(直方图, 聚类, 边缘检测, 兴趣点/关键点, Harris角点, 斑点(Blob), SIFI, 纹理特征)...

1.直方图 用于计算图片特征,表达, 使得数据具有总结性, 颜色直方图对数据空间进行量化,好比10个bin 2. 聚类 类内对象的相关性高 类间对象的相关性差 常用算法:kmeans, EM算法, meanshift&#…

SIFI尺度不变特征变换算法

SIFT 尺度不变特征变换算法 David Lowe关于Sfit算法,2004年发表在Int. Journal of Computer Vision的经典论文中,对尺度空间(scal space)是这样定义的 : It has been shown by Koenderink (1984) and Lindeberg (1994) that un…

Opencv图像识别从零到精通(34)---SIFI

一、理论知识 Scale Invariant Feature Transform,尺度不变特征变换匹配算法,对于算法的理论介绍,可以参考这篇文章http://blog.csdn.net/qq_20823641/article/details/51692415,里面很详细,可以更好的学习。这里就不多…

32-SIFI特征点提取(EmguCV学习)

文章目录 RecordCode效果 Record 1、特征点检测与匹配常用的算法:FAST(FastFeatureDetector)、STAR(StarFeatureDetector)、SIFT、SURF、ORB、MSER、GFTT(GoodFeaturesToTrackDetector)、HARRI…

SIFI特征点提取

尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun zdd zddmailgmail.com 对于初学者,从David G.Lowe的论文到实现,有许多鸿沟,本文帮你跨越。 1、SIFT综述 尺度不变特征转换(Scale-invariant feature tr…