解析TCP之滑动窗口(动画演示)

2023-11-09

概述

滑动窗口实现了TCP流控制。首先明确滑动窗口的范畴:TCP是双工的协议,会话的双方都可以同时接收和发送数据。TCP会话的双方都各自维护一个发送窗口和一个接收窗口。各自的接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的发送窗口则要求取决于对端通告的接收窗口,要求相同。

滑动窗口解决的是流量控制的的问题,就是如果接收端和发送端对数据包的处理速度不同,如何让双方达成一致。接收端的缓存传输数据给应用层,但这个过程不一定是即时的,如果发送速度太快,会出现接收端数据overflow,流量控制解决的是这个问题。

窗口的概念

发送方的发送缓存内的数据都可以被分为4类:
1. 已发送,已收到ACK
2. 已发送,未收到ACK
3. 未发送,但允许发送
4. 未发送,但不允许发送

其中类型2和3都属于发送窗口。

接收方的缓存数据分为3类:
1. 已接收
2. 未接收但准备接收
3. 未接收而且不准备接收

其中类型2属于接收窗口。

窗口大小代表了设备一次能从对端处理多少数据,之后再传给应用层。缓存传给应用层的数据不能是乱序的,窗口机制保证了这一点。现实中,应用层可能无法立刻从缓存中读取数据。

滑动机制

  1. 发送窗口只有收到发送窗口内字节的ACK确认,才会移动发送窗口的左边界。

  2. 接收窗口只有在前面所有的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析TCP之滑动窗口(动画演示) 的相关文章

  • TCP recvfrom() 不存储“from”

    我正在使用 TCP 制作一个服务器程序 我想获取我刚刚收到的消息发送者的 IP 地址 这是我的代码 case FD READ Incoming data get ready to receive char buffer DEFAULT BU
  • 套接字编程最佳实践?

    我正在设计一个文件同步应用程序 如 DropBox 客户端在端口 443 上与服务器保持持久的安全 SSL TCP 套接字 每当在客户端上创建 更改 删除文件时 包含相关数据的数据包就会通过套接字发送到服务器 服务器对其进行处理更新服务器上
  • Linux Socket write() 的错误文件描述符 错误的文件描述符 C

    我对 write 2 函数有一个有趣的问题 PrepareResponseForSetCoordinates 函数会导致写入时出现错误的文件描述符错误 这是错误行 perror 写入套接字时出错 总产量 写入套接字时出错 文件描述符错误 我
  • Nodejs TCP连接客户端端口分配

    我使用nodejs在客户端和服务器之间创建了tcp连接 网络模块 https nodejs org api net html 服务器正在侦听已经预定义的端口 并且客户端正在连接到该端口 据我了解客户端的端口是由节点动态分配的 那是对的吗 节
  • TCP 代理:在后端不可用时保持连接

    在 Docker 设置的上下文中 我想使用类似大使的模式来允许某些容器 例如数据库服务器 正常重新启动 而不必重新启动所有依赖的容器 例如 Web 服务器 并且没有错误消息 因为 数据库服务器不可用 因此 我想知道 是否有一个 TCP 代理
  • Node.js 找不到模块“tcp”

    节点在以下行崩溃 var tcp require tcp 错误文本 node js 201 throw e process nextTick error or error event on first tick Error Cannot f
  • 如何使用 kotlin 通过 TCP 连接发送和接收字符串

    我在 Windows 上有一个 TCP 服务器 我想在服务器和我的 Android 设备之间发送和接收文本字符串 我花了很多时间搜索使用 Kotlin 的示例 但没有找到任何有用的代码 所以我现在只能创建套接字并连接 fun connect
  • 在 C# 中通过 TCP 发送 C 结构体

    我正在编写一个程序 通过 TCP 与一台设备的管理界面进行交互 问题是 设备的文档是用C写的 而我写的程序是用C 写的 我的问题是 文档指定 通信基于基于C结构的API缓冲区 再多的谷歌搜索似乎也无法让我找到这个 API 或如何通过 TCP
  • syn队列和accept队列的混淆

    在阅读TCP源码时 我发现一个困惑的事情 我知道 TCP 在 3 次握手中有两个队列 第一个队列存储服务器收到的连接SYN并发回ACK SYN 我们称之为同步队列 第二个队列存储3WHS成功并建立连接的连接 我们称之为接受队列 但在阅读代码
  • 如何模拟 TCP/IP 错误?

    在多层应用程序上 我需要模拟各种 TCP IP 错误来测试一些重新连接代码 有谁知道我可以使用什么工具 基于 Windows 来实现此目的 谢谢 Scapy http secdev org projects scapy 允许您控制数据包的各
  • 数据包丢失和数据包重复

    我试图找出数据包丢失和数据包重复问题之间的区别 有谁知道 数据包重复 是什么意思 和TCP检测到丢失时重传数据包一样吗 No In TCP 数据包 的传递是可靠的 我认为在这种情况下术语数据应该更好 因为它是面向流的协议 数据包丢失和重复是
  • 两个http请求可以合并在一起吗?如果可以的话,nodeJS服务器如何处理呢?

    昨天我做了一些关于 NodeJS 的演讲 有人问我以下问题 我们知道nodeJS是一个单线程服务器 多个请求是 到达服务器并将所有请求推送到事件循环 如果什么 两个请求同时到达服务器 服务器将如何处理 处理这种情况 我猜到了一个想法并回复如
  • C# Socket.receive连续接收0字节且循环中不阻塞

    我正在尝试用 C 编写一个最简单的多线程 TCP 服务器 它接收来自多个客户端的数据 每次连接新客户端时 都会建立套接字连接 并将套接字作为参数传递给新类函数 之后运行 while 循环并接收数据 直到客户端连接为止 这里的问题是 sock
  • AMQP如何克服直接使用TCP的困难?

    AMQP如何克服直接使用TCP发送消息时的困难 或者更具体地说 在发布 订阅场景中 在 AMQP 中 有一个代理 该代理接收消息 然后完成将消息路由到交换器和队列的困难部分 您还可以设置持久队列 即使客户端断开连接 也可以为客户端保存消息
  • 自动打开命名管道和 tcp\ip

    我正在安装一个需要修改 SQL Server 的新产品 具体来说 启用 tcp ip 并打开命名管道 我知道如何手动完成 我想要的是一种通过 SQL 或 C 代码为新客户自动化执行此操作的方法 我希望有任何关于正确方向的建议 您可以使用 C
  • 简单的跨平台 TCP IP API?

    我不打算使用像 QT 或 wxWidgets 的 API 这样的大东西 我只想要可以在 Android iOS Windows Mac Linux 上运行的简单套接字 我正在制作一个事件驱动的纸牌游戏 所以 TCP 是最好的 本质上 我只想
  • 为什么 UDP 服务器中只有一个套接字?

    我正在准备考试 发现了这个问题 典型的 UDP 服务器可以使用单个套接字来实现 解释一下为什么 对于 TCP 驱动的服务器 我发现创建了两个套接字 一个用于所有客户端访问服务器 另一个用于每个客户端的特定 套接字 用于服务器和客户端之间的进
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用

随机推荐

  • 代码审查最佳实践

    代码审查是一种出色的软件工具 您绝对应该使用它来提高代码质量 但是像其他任何工具一样 有时可能会误用它 这就是为什么我提出了一些最佳做法来指导您查看同行代码的原因 代码审查不是测试 代码审查是开发人员对开发人员的业务 它不涉及任何测试 代码
  • 目标检测算法分类

    目标检测算法分类 1 两步走的目标检测 先找出候选的一些区域 再对区域进行调整分类 代表 R CNN SPP net Fast R CNN Faster R CNN 2 端到端的目标检测 采用一个网络一步到位 输入图片 输出有哪些物体 物体
  • Mysql之流程控制语句case

    CASE函数 情况1 实现等值判断 类似于switch语句 语法 CASE 要判断的字段或表达式 WHEN 常量1 THEN 要显示的值1或语句1 WHEN 常量2 THEN 要显示的值2或语句2 ELSE 要显示的值n或语句n END 案
  • 将项目部署到服务器

    首先确定各个需要被部署的应用所对应的ip 数据库类型 数据库名 中间件 应用名 版本及端口号 重要提示 主要分为六大步骤 1 部署数据库 kingbase8 导出导入数据库dmp文件 2 安装redis 系统后端需要用到redis 3 部署
  • cocos creator主程入门教程(十)—— A*寻路

    这一篇介绍A 寻路算法 在RPG SLG 模拟经营类游戏 有需要给角色寻路的需求 一般寻路我们采用A 寻路算法 A 寻路算法是一种广度优先启发性算法 先说说什么叫广度优先 搜索分为广度优先和深度优先 主要体现在对节点的展开上 深度优先一直往
  • 关于 html 或 jsp 页面调用js文件里的函数报错onclick is not defined处理方法

    错误 zygh is not defined at HTMLAnchorElement onclick 原因 function 方法写在 function 中 function 相当于匿名方法 里面是私有变量 所以页面找不到这个 funct
  • OpenCV13(摄像机显示和图像捕获 + 控制台下获取时间)

    1 摄像机测试程序 图像捕获 VS2012 OpenCV2 4 9 基于OpenCV的单个摄像机显示程序 控制台 按 c 键捕获图像 按照时间格式命名 默认C盘 Alex 2016 9 14 include stdafx h include
  • 【Python报错】在定义class时,出现AttributeError: ‘tuple‘ object has no attribute ‘describe_user‘

    请求各位大神的帮助 我在做class这一章的练习时 遇到报错 不知道如何修改 题目是要输出用户信息以及问候语 出现报错后 我有三个疑惑点 1 tuple指的是程序中的哪一部分 2 为什么会出现识别为tuple的情况 3 如何纠正这个错误 求
  • 关于使用STM32CubeMx配置串口出现的一些问题

    一 使用CubeMX配置好串口中断的工程 打开工程添加相关代码后串口没有数据输出或者看不见数据但串口助手的RX会一直增加的问题 参考 这里 大概意思就是时钟的原因 需要把stm32f4xx hal conf h文件中的时钟改一下 将25MH
  • Write Amplification Analysis in Flash-Based Solid State Drives

    Write Amplification Analysis in Flash Based Solid State Drives 摘要 第一部分 第二部分 第三部分 此文发表于2009年 摘要 写入放大是限制基于NAND闪存的存储设备中的随机写
  • 华为OD机试真题 Java 实现【水仙花数】【2022Q4 100分】

    一 题目描述 所谓水仙花数 是指一个n位的正整数 其各位数字的n次方和等于该数本身 例如153是水仙花数 153是一个3位数 并且153 1 3 5 3 3 3 二 输入描述 第一行输入一个整数n 表示一个n位的正整数 n在3到7之间 包含
  • 深入剖析C语言结构体内存对齐:轻松计算结构体大小的技巧

    本篇博客会讲解C语言结构体的内存对齐 并且给出一种快速计算结构体大小的方式 主要讲解下面几点 结构体的内存对齐是什么 如何快速计算结构体的大小 如何利用内存对齐节省结构体占用的内存空间 为什么结构体要内存对齐 如何修改默认对齐数 结构体内存
  • 国际版腾讯云阿里云免费开户:全站加快 DCDN 重磅发布!打造新一代加快引擎

    腾讯云全站加快 DCDN 重磅发布 打造新一代加快引擎 在数字化转型革新逐渐深化的当下 安全高效成为企业上云 全球化布置的要害需求 跟着运用场景复杂度不断提高 事务需求差异化开展 为了给企业供给更完善的安全加快服务 阿里云对全站加快DCDN
  • ubuntu 16.04安装提示end Kernel panic

    问题描述 ubuntu 最新版本VM虚拟机安装时出现错误end kernel panic not syncing corrupted stack end detected inside scheduler的解决方式 解决办法 选择自定义安装
  • 剑指 Offer 20. 表示数值的字符串

    表示数值的字符串 思路 多边界的问题 求解 package swordPointingToTheOffer public class Twenty public static boolean isNumber String s 空格 小数点
  • js解决0.1+0.2==0.3的问题的几种方法

    js解决0 1 0 2 0 3的问题的几种方法 JavaScript有7种基本类型分别是 Undefined Null Boolean String Number Symbol Object 对于JS中的Number类型 不区分整数和浮点数
  • 外挂编写完全攻略

    外挂编写完全攻略一 先说一下写一个外挂需要什么条件 1 熟练的C语言知识 目前的外挂大部分都是用BC或者是vc写的 拥有熟练的C语言知识是写外挂的基本条件 2 具有很强的汇编基础 一般游戏都不可能有原代码的 必须 反汇编或者跟踪的办法来探索
  • 31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器

    说在前面 开发环境 Vivado 语言 Verilog cpu框架 Mips 控制器 组合逻辑 指令译码器 我们需要根据一条32位的指令的结构确定是哪一条指令 可以根据操作码 op 以及功能码 func 使用case语句确定 下述代码中ca
  • 传统方法:textcnn文本分类中超参数对分类器的影响

    引言 众所周知 文本分类是自然语言处理中最常见的任务之一 而TEXTCNN是每一个NLPer入门学习 deeplearning在自然语言处理中应用的首选 相对现在火热得BERT而言 TEXTCNN得结构相对来说更加简单 但其容易被理解 模型
  • 解析TCP之滑动窗口(动画演示)

    概述 滑动窗口实现了TCP流控制 首先明确滑动窗口的范畴 TCP是双工的协议 会话的双方都可以同时接收和发送数据 TCP会话的双方都各自维护一个发送窗口和一个接收窗口 各自的接收窗口大小取决于应用 系统 硬件的限制 TCP传输速率不能大于应