TCP的流量控制深入理解

ops/2024/9/23 9:43:35/

 在理解流量控制之前我们先需要理解TCP的发送缓冲区和接收缓冲区,也称为套接字缓冲区。首先我们先知道缓冲区存在于哪个位置?

 其中缓冲区存在于Socket Library层。 而我们的发送窗口和接收窗口就存在于缓冲区当中。在实现滑动窗口时则将两个指针指向缓冲区的两个位置来维持一个窗口,通过指针的移动来实现窗口的滑动。

1.在发送窗口中存在着四个区域。其中第一个是已经发送并且已经收到确认的,另一个是已经发送但是未收到确认的,另一个是未发送的,最后一个是不能发送的。窗口滑动的时机是:收到对方的ack,此时滑动窗口开始移动。

2.在接收窗口存在着四个区域。其中第一个是已经被应用程序读取的,另一个是还未收到的,另一个是收到的,另一个是不允许接收的。窗口滑动的时机是:应用程序将收到的数据读取走此时滑动窗口开始移动。

采用上述方法来实现流量控制。

 当窗口缩小到0时将不能在发送数据,此时处于等待状态,等待接收方发送ack使得窗口变大,但是倘若ack报文丢失,双方将处于死锁状态,为了防止这种情况发生就使用一个定时器,当一段时间后发送方给接收方发送报文询问窗口是否扩大,以此来解决问题。

为了提高网络的吞吐量,提高网络传输效率。

一、我们可以启用nagle算法:

算法思想是只允许发送窗口内存在一个未被ack的小包数据。其中的特点是:

1.如果包的大小>mss则允许发送 2.包含FIN报文允许发送 3设置了TCP_NODELAY允许发送  4超时200ms允许发送。

 nagle算法将包累积到一起进行发送,提高了吞吐量但是牺牲了时延。类似于公交车是一次拉满人还是多拉几次。比较适用于人比较多的情况。同样此算法适用于网络数据比较多的情况。

二、我们可以延迟ACK:

 延迟时间通常是200ms


http://www.ppmy.cn/ops/106360.html

相关文章

MQTT.js 简述

MQTT.js 简述 简介 MQTT 是一种轻量级的消息传输协议,常用于物联网(IoT)设备间的通信。mqtt.js 是一个 JavaScript 库,支持在 Node.js 和浏览器中使用,用于通过 MQTT 协议与 MQTT Broker 进行通信。 安装 在 Node.j…

使用pgrs在wsl中为postgres写拓展

今天开始研究pgrs写pg扩展. 这是postgres is everything数据组合流派核心功法,近期duckdb,zombodb,datafusion等等产品都是数据组合流思路体现, 把这套功法练到大成,处于2024年,综合数据规模/相应速度/和数据应用层解耦,就有了一个最佳答案. 比以前hadoop,spark那套鬼真的好很多…

Git如何安装和配置

一、Git 的安装 1、Git 的官网 Git (git-scm.com) 2、下载 Git for Windows 在官网下载好 Git 的安装文件后,接下来就可以进行安装了。 3、安装 Git 以管理员身份运行你下载的安装文件: 然后就可以进入安装向导了。 4、验证是否安装成功 当安装向…

【C++ 第二十一章】特殊类的设计(学习思路)

1.请设计一个类,不能被拷贝 设计思路 拷贝只会使用在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98 的做法 将拷贝构造函数与赋值运算符…

数据结构————内核链表

内核链表是Linux内核中广泛使用的一种数据结构,它具有以下特点: 1.双向循环链表:每个节点包含两个指针,一个指向前驱节点(prev),另一个指向后继节点(next),…

Docker(完整实验版)

目录 一 Docker 1.1 Docker简介 1.1.1 什么是docker? 1.1.2 docker在企业中的应用场景 1.1.3 docker与虚拟化的对比 1.1.4 docker的优势 1.2 部署docker 1.2.1 配置软件仓库 二 Docker的基本操作 2.1 Docker镜像管理 2.1.1 搜索镜像 2.1.2 拉取镜像 2…

25版王道数据结构课后习题详细分析 第八章 8.1 排序的基本概念

一、单项选择题 ———————————————————— ———————————————————— 解析:拓扑排序是将有向图中所有结点排成一个线性序列,虽然也是在内存中进行的,但它不属于我们这里所提到的内部排序范畴,也…

在仿真数据检查器中查看数据

目录 查看记录的数据 从工作区或文件导入数据 查看复数数据 查看字符串数据 查看基于帧的数据 查看基于事件的数据 可以使用仿真数据检查器来可视化您在整个设计过程中生成的数据。您在 Simulink 模型中记录的仿真数据会记录到仿真数据检查器中。您还可以将测试数…