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

TCP的流量控制深入理解

tcp的可靠性主要表现在:三次握手,四次挥手,流量控制,拥塞控制。

 在理解流量控制之前我们先需要理解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.mrgr.cn/news/17218.html

相关文章:

  • C语言程序设计之基础易错题锦集6
  • 百度 AI Studio 脚本任务篇,它不同于notebook任务是支持免费的, 脚本任务是需要算力卡的,更好的算力 支持四张显卡,
  • 如何打造Java SpringBoot宿舍设备管理系统,全程跟踪设备使用周期,2025最新设计指南
  • CompletableFuture实战
  • 基于matlab的行人和车辆检测系统
  • Python在人工智能方面的应用
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇你就是网络安全高手了。
  • 4家国产数据库上市公司:最好的盈利1个亿,最惨亏8000w
  • 设计模式与反模式:UML图示常见误用案例分析
  • 生信机器学习入门4 - scikit-learn训练逻辑回归(LR)模型和支持向量机(SVM)模型
  • OutOfMemoryError
  • Docker 镜像
  • 编程效率进阶:打造你专属的 Git 别名与 PyCharm 完美结合
  • 代码随想录算法训练营第32天 | 509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
  • MarkDown教程
  • C# 去掉字符串最后一个字符的5种方法
  • 【Python系列】 Python 中的枚举使用
  • 【超音速 专利 CN116109587A】一种复杂环境下密封钉焊缝质量检测方法
  • 为何R语言love图显示的分类变量点与smd值不一致
  • 若依框架(前后端分离)增加手机号验证码登录