JavaEE: 深入探索TCP网络编程的奇妙世界(五)

news2024/11/14 20:14:36

文章目录

  • TCP核心机制
    • TCP核心机制六: 拥塞控制
      • 为什么要有拥塞控制?
      • 动态调整的拥塞控制
      • 拥塞控制中,窗口大小具体的变化过程
    • TCP核心机制七: 延时应答
    • TCP核心机制八: 捎带应答


TCP核心机制

前一篇文章 JavaEE: 深入探索TCP网络编程的奇妙世界(四)
书接上文~

TCP核心机制六: 拥塞控制

为什么要有拥塞控制?

虽然有了TCP滑动窗口这个大杀器,能够高效可靠的发送大量数据,但是如果在刚开始阶段就发送大量的数据,仍然可能引发问题.

因为网络上有很多的计算机,可能当前的网络状态就已经比较拥堵,在不清楚当前网络的状态下,贸然发送大量的数据,可能导致雪上加霜.

动态调整的拥塞控制

在这里插入图片描述

流量控制可以使用接收方接收缓冲区剩余空间来进行衡量.

但是拥塞控制就比较复杂了.需要考虑中间节点的情况.比如:

  1. 中间的节点非常多.
  2. 每次传输的数据,走的路线还都不一样.
  3. 中间哪个节点遇到瓶颈了,都不好说.
  4. 中间节点传输数据不止有你A的数据,还有其他设备的数据.

虽然问题看起来更复杂了,但是不打紧,聪明的程序员总有办法.

我们可以通过"做实验"的方式,来找到一个合适的发送速度.

  1. 先按照一个比较小的速度,发送数据.
  2. 数据非常畅通,没有丢包,说明在网络上传输数据整体上是比较通畅的,此时就可以加快传输数据的速度~
  3. 增大到一定的速度之后,发现丢包了,说明网络上可能存在拥堵了,此时就可以减慢传输数据的速度.
  4. 减速之后,发现又不丢包了,继续再加速.
  5. 加速之后发现又丢包了,继续减速.

发送速度是会一直持续的动态变化的~
毕竟网络环境也是一直变化的.

流量控制,会限制发送窗口
拥塞控制,也会限制发送窗口
这两个机制,会同时起作用,最终实际的发送窗口大小,取决于上述两个机制得到的发送窗口的较小值~

拥塞控制中,窗口大小具体的变化过程

在这里插入图片描述

  1. 刚开始传输数据,拥塞窗口会非常小,用一个很小的速度来发送数据

    当前网络是否拥堵?未知.
    刚启动的时候,发数据的速度很慢~

  2. 不丢包,增大窗口大小(指数增长)

    增长速度特别快,短时间内达到很大的窗口大小.

  3. 增长到一定程度,达到某个指定的阈值,此时,即使没丢包,也会停止指数增删,变成线性增长.

    不至于太快的进入到丢包的节奏

  4. 线性增长,也会持续地使发送速度越来越快,达到某个情况下,就会出现丢包.

    一旦出现丢包,接下来就需要减少发送的速度,减小窗口大小.
    此时有以下两种出来方式:

    1. 经典的方案,回归到开始非常小的初始值,之后指数增长,线性增长~
    2. 现在的方案,回归到新的阈值上,线性增长(以后都不会指数增长了).

拥塞控制,归根结底是TCP协议想尽可能快的把数据传输给对方,但是又要避免给网络造成太大压力的折中方案.

流量控制和拥塞控制,实际上都是在对"可靠传输"进行补充~

TCP核心机制七: 延时应答

如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小.

在这里插入图片描述

  • 假设接收端缓冲区为1M,一次收到了500K的数据,如果立刻应答,返回的窗口就是500K.
  • 但实际上可能处理端处理的速度很快,10ms之内就把500K数据从缓冲区消费掉了.
  • 在这种情况下,接收端处理还远没有达到自己的极限,即使窗口再放大一些,也能处理过来.
  • 如果接收端稍微等一会再应答,比如等待200ms再应答,那么这个时候返回的窗口大小就是1M.

一定要记得,窗口越大,网络吞吐量就越大,传输效率就越高,我们的目标是在保证网络不拥塞的情况下尽量提高传输效率~

所有的包都可以延迟应答吗?肯定也不是~

  • 数量限制: 每隔N个包就应答一次.
  • 时间限制: 超过最大延迟时间就应答一次.

具体的数量和超时时间,不同的操作系统有不同的差异,一般N取2,超时时间取200ms.

TCP核心机制八: 捎带应答

捎带应答是在延时应答的基础上,引入的提升效率的机制,它可以把返回的业务数据,和ACK两者合二为一.

在实际网络通信中,大部分的情况,都是"一问一答"这样的形式~
在这里插入图片描述
ack是内核返回的,是收到请求之后,立即就返回ack.

响应,则是应用程序返回的.在代码中,根据请求计算得到响应,再把响应写回到客户端.

正常情况下,ack和响应,是不同的时机返回的,无法合并.
但是,ack涉及到"延时应答".
延时应答就会使ack返回的时间,被往后拖.
这样一延时,就可能赶上接下来要发送响应数据的操作了.

于是就可以在发送响应的时候,把刚才ack的信息也带上.

本身ack报文,不需要载荷,ack报文主要设置以下内容

  • ack这一位为1
    设置窗口大小的值,设置确认序号…

相应数据主要是设置载荷,和ack不冲突.
这俩是可以共存的~

四次挥手,也涉及到类似的情况.
在这里插入图片描述

延时应答,捎带应答,都是TCP提升性能的机制.

TCP之所以复杂,不仅仅在考虑可靠传输,还要考虑在可靠传输的基础上,尽可能的提高效率~

本文到这里就结束啦~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构:二叉树OJ题(基础版)

前言 更完两期二叉树的知识之后,来做几道oj题巩固一下基础 一、翻转二叉树 链接:leetcode链接 还是分治思想,将问题分解成左子树和右子树交换,遇到空树停止 采用递归算法做题 TreeNode* invertTree(TreeNode* root) {if(root …

2D目标检测常用loss

在2D目标检测任务中,常用的损失函数(Loss)主要用于优化以下三个关键方面: 类别分类(Classification):用于区分检测到的对象属于哪一类。边界框回归(Bounding Box Regression&#x…

Spring Boot蜗牛兼职网:全栈开发

第4章 系统设计 4.1 系统体系结构 蜗牛兼职网的结构图4-1所示: 图4-1 系统结构 登录系统结构图,如图4-2所示: 图4-2 登录结构图 蜗牛兼职网结构图,如图4-3所示。 图4-3 蜗牛兼职网结构图 4.2开发流程设计 系统流程的分析是通…

在Web开发中使用和风天气接口

介绍 和风天气是一个提供全球天气预报和气象数据的服务平台,支持多种语言,提供实时天气、未来天气预报、空气质量指数、生活建议等多种气象数据,可以广泛用于网页开发、移动应用和物联网设备等场景。 开发文档:文档 | 和风天气开…

intellij idea 控制台运行java出现中文乱码的解决方法

原因: 字符编码不一致: 当你在intellij idea使用了UTF-8编码,而在控制台使用了其他编码(比如gbk),就可能导致乱码。 文件读写编码问题: 如果读取文件时使用的编码与文件实际编码不一致&#xf…

Chainlit集成LlamaIndex实现知识库高级检索(自动合并检索)

检索原理 自动合并检索 自动合并检索原理,和我的上一篇文章的检索方案: 将文本分割成512大小(一般对应段落大小)和128(一般对句子大小不是严格的句子长度)大小两种分别存储到索引库,再用llama_…

《深度学习》—— 卷积神经网络(CNN)的简单介绍和工作原理

文章目录 一、卷积神经网络的简单介绍二、工作原理(还未写完)1.输入层2.卷积层3.池化层4.全连接层5.输出层 一、卷积神经网络的简单介绍 基本概念 定义:卷积神经网络是一种深度学习模型,通常用于图像、视频、语音等信号数据的分类和识别任务。其核心思想…

如何在Markdown写文章上传到wordpress保证图片不丢失

如何在Markdown写文章上传到wordpress保证图片不丢失 写文日期,2023-11-16 引文 众所周知markdown是一款nb的笔记软件,本篇文章讲解如何在markdown编写文件后上传至wordpress论坛。并且保证图片不丢失(将图片上传至云端而非本地方法) 一&…

通信工程学习:什么是NFVI网络功能虚拟化基础设施层

NFVI:网络功能虚拟化基础设施层 NFVI(Network Functions Virtualization Infrastructure)即网络功能虚拟化基础设施层,是NFV(Network Functions Virtualization,网络功能虚拟化)架构中的一个重要…

精准农业中遥感技术应用(五)- 一站式遥感数据服务平台AIEarth

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、领域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

【LeetCode:116. 填充每个节点的下一个右侧节点指针 + BFS(层次遍历)】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

redis主从复制的理论和实战详细教程

0 前言 就是主从复制,master以写为主,slave以读为主,当master数据变化的时候,自动将新的数据异步同步到其他的slave数据库。也就是redis主从复制异步同步数据的,所以在主从架构中使用分布式锁时,可能会出现…

4--SpringBoot项目中分类管理

目录 新增分类 分类分页查询 启用禁用分类 根据类型查询 修改分类 本文介绍SpringBoot项目中的分类管理,操作类似员工管理模块,具体详解可见以下博客,此处给出各部分代码 2--SpringBoot项目中员工管理 详解(一)-C…

基于51单片机的手环设计仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,DHT11温湿度采集温湿度,滑动变阻器连接ADC0832数模转换器模拟水位传感器检测水位,通过LCD1602显示信息,然后在程序里设置好是否…

vue3项目中引入词云图

在vue3中的项目引入词云图 前言&#xff1a;先看效果图步骤如下 前言&#xff1a; 公司产品要求项目中使用词云图&#xff0c;我算是第一次用&#xff0c;于是在网上查找资料&#xff0c;最后做出来了。 先看效果图 步骤如下 npm i echarts-wordcloud -S <template> …

恶意AI大模型的兴起将改变网络安全

LLM 的恶意版本&#xff08;如 ChatGPT 的黑暗变体&#xff09;的兴起正在通过使用更复杂和自动化的攻击来升级网络战。 这些模型可以生成令人信服的网络钓鱼电子邮件、传播虚假信息并制作有针对性的社会工程消息。 所有这些非法功能都对在线安全构成了重大威胁&#xff0c;并加…

2024年最新前端工程师 TypeScript 基础知识点详细教程(更新中)

1. TypeScript 概述 TypeScript 是由微软开发的、基于 JavaScript 的一种强类型编程语言。它是在 JavaScript 的基础上添加了静态类型检查、面向对象编程等功能的超集&#xff0c;最终会被编译为纯 JavaScript 代码。由于其扩展了 JavaScript 的功能&#xff0c;TypeScript 特…

[Redis][数据类型]详细讲解

1.Redis 特殊数据结构 1.Streams 应用场景&#xff1a;主要用为队列(阻塞队列) 2.Geospatial 应用场景&#xff1a;用来存储坐标(经纬度) 3.HyperLogLog 应用场景&#xff1a;估算集合中的元素个数注意&#xff1a; HyperLogLog不存储元素的内容&#xff0c;但是能够记录“…

【机器学习】ROC曲线

【机器学习】ROC曲线 1、ROC曲线简介2、ROC曲线和AUC值2.1 ROC曲线2.2 AUC值 3、实验内容3.1 准备数据集3.2 特征提取3.3 数据集划分3.4 模型训练与预测3.5 计算和绘制ROC曲线3.6 绘制混淆矩阵3.7 三分类混淆矩阵 4 源代码4.1 实现ROC二分类4.2 三分类混淆例子 1、ROC曲线简介 …

cnn机器学习时python版本不兼容报错

在使用python执行CNN算法时&#xff0c;发生如下报错&#xff1a; A module that was compiled using NumPy 1.x cannot be run in NumPy 2.1.1 as it may crash. To support both 1.x and 2.x versions of NumPy, modules must be compiled with NumPy 2.0. Some module may …