当前位置: 首页 > news >正文

TCP的流量控制深入理解

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

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

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

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

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

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

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

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

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

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

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

二、我们可以延迟ACK:

 延迟时间通常是200ms

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 92. UE5 GAS RPG 使用C++创建GE实现灼烧的负面效果
  • 【操作系统】同步互斥与Golang互斥锁实现
  • 【TomCat】安装部署
  • 实训day41(9.2)
  • Python读取Excel数据教程 - 详细版
  • HTTPS 通信时是对称加密还是非对称加密?
  • 2024年互联网公司时薪排行榜大曝光!看完我酸了,第一竟是他…
  • 云计算实训40——部署nmt、部署project_exam_system项目
  • 基于深度学习的稀疏感知器设计
  • 使用PyInstaller打包带图标的软件
  • kafak推送消息。
  • 将Nginx注册为Windows服务
  • uniapp布局
  • react 列表页面中管理接口请求的参数
  • 代码随想录冲冲冲 Day34 动态规划Part2
  • 时间复杂度分析经典问题——最大子序列和
  • (三)从jvm层面了解线程的启动和停止
  • docker容器内的网络抓包
  • es6(二):字符串的扩展
  • express.js的介绍及使用
  • github指令
  • JavaScript 奇技淫巧
  • Lucene解析 - 基本概念
  • PHP的类修饰符与访问修饰符
  • Python socket服务器端、客户端传送信息
  • rabbitmq延迟消息示例
  • Spark学习笔记之相关记录
  • 官方解决所有 npm 全局安装权限问题
  • 如何设计一个微型分布式架构?
  • 微服务框架lagom
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 【干货分享】dos命令大全
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ######## golang各章节终篇索引 ########
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (Charles)如何抓取手机http的报文
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (java)关于Thread的挂起和恢复
  • (南京观海微电子)——示波器使用介绍
  • (七)Java对象在Hibernate持久化层的状态
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)winform之ListView
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .java 9 找不到符号_java找不到符号
  • .Net Core与存储过程(一)
  • .net mvc 获取url中controller和action
  • .NET程序员迈向卓越的必由之路
  • .NET开源、简单、实用的数据库文档生成工具
  • .net中的Queue和Stack
  • .Net中的集合
  • /dev/sda2 is mounted; will not make a filesystem here!
  • [Android] 修改设备访问权限
  • [Android]Android开发入门之HelloWorld
  • [AX]AX2012 SSRS报表Drill through action
  • [CERC2017]Cumulative Code