网络协议 TCP 滑动窗口

2024-08-31 05:58
文章标签 窗口 tcp 滑动 网络协议

本文主要是介绍网络协议 TCP 滑动窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络协议 TCP 滑动窗口

  • 1.滑动窗口机制的理解
  • 2.滑动窗口的实现原理
    • 2.1 为啥用滑窗

TCP是一种可靠的数据发送协议,但他的模式也使得大量的资源出现浪费,为了更好的利用硬件多核资源,同时又保证tcp发送的可靠性基础上,出现了滑窗机制,说白了就是将原本发送一条数据然后就等待对方确认,改为发送多条再等待确认。

1.滑动窗口机制的理解

滑动窗口机制中“窗口”是指发送端和接收端的缓存空间大小,“滑动”的意思就是指缓存空间中存放的未处理帧数是变化,发送端在收到确认帧后会删除原本保存在缓存中的待重发帧,而接收端向网络层提交一个帧后也会删除原本保存在缓存中的帧,至于缓存空间大小,缓存越大成本越高,当然这里的窗口大小分为:物理窗口大小和可用窗口大小,对于主机而言,物理窗口大小是固定的,要视主机所配置的缓存大小而定;而可用窗口的大小是变化的,他是在物理窗口的基础上变化的,一端会根据另一端的“接收窗口”大小调整本端的“发送窗口“大小。

2.滑动窗口的实现原理

滑动窗口大多是用来做流量控制的,比如说我现在有10包数据,编号分别是0 ,101,201,301,401,501,601,701,801,901.每包数据大小都为100,在发送的时候我们不可能一次性把所有数据都发送出去,假设我们的窗口大小为300(事实上窗口比这个要大的多),那么就是0,101,201,发送出去,接收端收到第一包数据就会返回确认数据,并且会返回了接收端窗口大小,如果先接收到0,那么接收端返回的窗口大小就是300,发送端收到编号为0的确认数据后,从窗口缓存中删除0的数据,同时将窗口向右移动,但是此时还有101和201 没有收到确认数据,所以窗口只能向右移动一位,即发送301,此时虽然接收端告诉发送端可以发送300大小数据,但是发送端本身还有两包数据即200缓存,所以只能再发送一包数据。
在这里插入图片描述红色虚线框代表发送端已经发送出去的数据,蓝色虚线框内代表收到编号0确认码101后,向右移动后的窗口,这时发送了数据301这包数据。绿色线框内代表还未发送的数据。
相对应的,在接收端也会有这样的类似。接收端会将收到的连续序号的数据提交到应用层,并且清理当前接收到的数据,将窗口释放出来,不连续的则会缓存。

2.1 为啥用滑窗

为啥设计这个样子,这是由tcp的基本特性决定的,我们都知道tcp是保证有序的接收数据的,但是每次发送一包数据就等待接收端返回确认,这明显效率低下,浪费资源,但是又不能毫无估计的,将所有数据都发送出去,这样就无法保证有序,并且可能会造成网络拥堵,所以才有了滑窗机制,在保证数据效率的同时,也保证了网络效率。

这篇关于网络协议 TCP 滑动窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123078

相关文章

VC网络协议

// PCControlDlg.cpp : 实现文件//#include "stdafx.h"#include "PCControl.h"#include "PCControlDlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框#ifde

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

专题二_滑动窗口_算法专题详细总结

目录 滑动窗口,引入: 滑动窗口,本质:就是同向双指针; 1.⻓度最⼩的⼦数组(medium) 1.解析:给我们一个数组nums,要我们找出最小子数组的和==target,首先想到的就是暴力解法 1)暴力: 2)优化,滑动窗口: 1.进窗口 2.出窗口 3.更新值 2.⽆重复字符的最⻓⼦串(medium) 1)仍然是暴力解法: 2)优化: 进窗口:hash[s[rig

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

主窗口的设计与开发(二)

主窗口的设计与开发(二) 前言         在上一集当中,我们完成了主窗口的初始化,主窗口包括了左中右三个区域。我们还完成了对左窗口的初始化,左窗口包括了用户头像、会话标签页按钮、好友标签页按钮以及好友申请标签页按钮。对于切换每个标签页,我们还做了初始化信号槽的内容。最后我们将整个MainWidget类设置为单例模式。         那么这一集我们将继续完成主窗口的设计与开发,这一集我

linux下TCP/IP实现简单聊天程序

可以在同一台电脑上运行,在一个终端上运行服务器端,在一个终端上运行客户端。 服务器端的IP地址要和本地的IP相同,并分配端口号,客户端的默认设置为本地,端口号自动分配。 服务器端: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.