TCP性能机制

news2024/11/23 15:44:18

延迟应答

为什么有延迟应答

发送方如果长时间没有收到ACK应答,则会触发超时重传机制,重新发送数据包。但如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小,发送方一次只能发少量数据,效率较低。

举个例子理解一下

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

在可靠性和性能间做平衡

窗口越大, 意味着网络吞吐量就越大, 传输效率就越高,数据包越多,丢包可能性越大。我们的目标是在保证网络不拥塞的情况下尽量提高传输效率;

注意:该机制依具体实现而定,不统一

  • 数量限制: 每隔N个包就应答一次;
  • 时间限制: 超过最大延迟时间就应答一次;
  • 具体的数量和超时时间, 依操作系统不同也有差异; 一般N取2, 超时时间取200ms;

滑动窗口

看这篇 滑动窗口

快速重传

快速重传是对TCP发送方降低等待重发丢失分段用时的一种改进。

理解一下

想象一下,当你通过互联网发送消息给朋友,如果某个消息没有被朋友收到,你希望朋友能够提醒你重发,而不是等到整个通信结束再告诉你。

快速重传机制的工作方式类似于这个想法。当发送方向接收方发送数据时,接收方会在接收到数据后,发送一个“确认”的信号给发送方,告诉发送方已经收到了数据。但是有时候,这个确认信号可能会在传输过程中丢失,导致发送方认为数据没有被接收到。

为了解决这个问题,快速重传机制会让接收方不只是等待一个确认信号,而是在接收到部分数据后就开始发送确认信号。如果接收方发现某个数据包丢失,它会立即告诉发送方,让发送方重发这个数据包,而不必等待更多的数据传输完成。

通过什么实现的呢

通过ACK确认应答机制
TCP发送方每发送一个分段都会启动一个超时计时器,如果没能在特定时间内接收到相应分段的确认,发送方就假设这个分段在网络上丢失了,需要重发。这也是 TCP 用来估计 RTT 的测量方法。这个机制就是超时重传机制。

重复确认就是这个阶段的基础,其基于以下过程:如果接收方接收到一个数据分段,就会将该分段的序列号加上数据字节长的值,作为分段确认的确认号,发送回发送方,表示期望发送方发送下一个序列号的分段——>但是如果接收方提前收到更下一个序列号的分段或者说接收到无序到达的分段,即之前期望确认号对应的分段出现接收丢失——>接收方需要立即使用之前的确认号发送分段确认——>此时如果发送方收到接收方相同确认号的分段确认超过1次,并且该对应序列号的分段超时计时器仍没超时的话,则这就是出现重复确认,需要进入快速重传。

快速重传就是基于以下机制:我们假设重复阈值为3,当发送方收到4次相同确认号的分段确认(第1次收到确认期望序列号,加3次重复的期望序列号确认)时,则可以认为继续发送更高序列号的分段将会被接受方丢弃,而且会无法有序送达。发送方应该忽略超时计时器的等待重发,立即重发重复分段确认中确认号对应序列号的分段。
在这里插入图片描述
连续3个以上收到了同样的应答,才会触发快重传的机制。因为3次作为触发快速重传的标准是经验得出的一个相对平衡的值。
如图:

  • 当某一段报文段丢失之后, 发送端会一直收到 1001 这样的ACK, 就像是在提醒发送端 "我想要的是 1001"一样;
  • 如果发送端主机连续三次收到了同样一个 “1001” 这样的应答, 就会将对应的数据 1001 - 2000 重新发送;
  • 这个时候接收端收到了 1001 之后, 再次返回的ACK就是7001了(因为2001 - 7000)接收端其实之前就已经收到了, 被放到了接收端操作系统内核的接收缓冲区中;

捎带应答

捎带应答机制是一种让网络通信更高效的方法。在生活中就像军队里用的无线电对讲机类似,我说一句话,你回收到,同时跟我讲你想跟我说的话。

捎带应答机制在网络通信中就是这个概念。当一台计算机发送数据给另一台计算机时,接收方在回复的数据中会附上一个确认信号,表示它已经收到了之前发送的数据。这个确认信号被“捎带”在回复的数据中,就像朋友的回复带上了对你的消息的确认一样。

这样做的好处是,发送方不需要额外等待确认信号,因为它已经包含在回复中了。这样可以节省时间和网络带宽,使通信更高效。

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

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

相关文章

高性能服务器NodejsExpress快速构建Web

目录 1 Express基本使用1.1 托管静态资源 2 Express 路由3 Express 中间件3.1 全局中间件3.2 局部中间件3.3 中间件分类 4 CORS 跨域资源共享4.1 cors 中间件解决跨域4.2 CORS4.3 CORS 常见响应头4.4 CORS 请求分类 1 Express基本使用 官网传送门(opens new window) 基于 Node.…

简单计算器的实现(含转移表实现)

文章目录 计算器的一般实现使⽤函数指针数组的实现&#xff08;转移表&#xff09; 计算器的一般实现 通过函数的调用&#xff0c;实现加减乘除 # define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int Add(int x, int y) {return x y; }int Sub(int x, int y) {retur…

计算机中找不到msvcp140.dll丢失怎么弄?程序员都是这样解决的

msvcp140.dll是Microsoft Visual C 2015 Redistributable Package的一部分&#xff0c;它是一个运行时库文件&#xff0c;提供了许多C标准库函数的实现。如果缺少这个文件&#xff0c;可能会导致一些程序无法正常运行&#xff0c;例如一些游戏、应用程序等。为了解决这个问题&a…

【Unity】如何制作小地图

我们为什么要制作小地图呢&#xff1f; 原因很简单&#xff1a; 导航和定位&#xff1a;小地图可以显示玩家当前位置以及周围环境的概览。这使得玩家能够更好地导航和定位自己在游戏中的位置&#xff0c;找到目标或避开障碍物。场景了解&#xff1a;通过小地图&#xff0c;玩…

Presto 介绍

目录 Presto 介绍Presto 架构Coordinator协调器节点发现服务&#xff08;discovery service&#xff09;工作节点基于连接器的架构查询执行模型查询优化JVM 配置Presto Web UIPresto 内存管理Presto 任务并发性Presto 工作节点调度Presto 网络数据交换Presto 资源组 Presto 介绍…

公司电脑文件数据加密系统

电脑文件透明加密软件是一种可以对文件进行加密的软件&#xff0c;这类软件能够在用户无感知的情况下对文件进行加密&#xff0c;使得文件的安全性得到保障。 PC访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 智能透明加…

Java抽象类详解

抽象类 抽象类的概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。比如&#xff1a; 说…

C语言刷题(13)

第一题 第二题 第三题 第四题 第五题 第六题 第七题 注意 1.nsqrt(n)&#xff0c;sqrt本身不会将n开根 2.初始化已经令sumn了&#xff0c;故相加的个数为m-1次

机器学习在大数据分析中的应用

文章目录 机器学习在大数据分析中的原理机器学习在大数据分析中的应用示例预测销售趋势客户细分和个性化营销 机器学习在大数据分析中的前景和挑战前景挑战 总结 &#x1f389;欢迎来到AIGC人工智能专栏~探索机器学习在大数据分析中的应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

Java面试题(2) 两个线程,交替打印100次A和B

目录 一、实现方式一实现思路&#xff1a;代码实现&#xff1a;执行结果&#xff1a; 二、实现方式二实现思路&#xff1a;代码实现&#xff1a;执行结果&#xff1a; 三、思考 一、实现方式一 实现思路&#xff1a; 代码实现&#xff1a; ThreadTest.java package com.demo…

Elasticsearch算分优化方案之rescore_query

简介 今天来说一说Elasticsearch 的重新评分&#xff0c;即在检索出来一次结果的基础上在进行检索提升数据排序效果&#xff0c;但是仅对查询或者post_filter阶段返回的前多少条进行二次查询。在每个分片上进行二次检索的文档数量时可以通过window_size 控制的&#xff0c;该参…

PHP8中自定义函数-PHP8知识详解

1、什么是函数&#xff1f; 函数&#xff0c;在英文中的单词是function&#xff0c;这个词语有功能的意思&#xff0c;也就是说&#xff0c;使用函数就是在编程的过程中&#xff0c;实现一定的功能。即函数就是实现一定功能的一段特定代码。 在前面的教学中&#xff0c;我们已…

甜椒叶病害识别(Python代码,pyTorch框架,深度卷积网络模型,很容易替换为其它模型,带有GUI识别界面)

代码运行要求&#xff1a;Torch>1.13.1即可 1.数据集介绍&#xff1a; 第一个文件夹是细菌斑叶&#xff08;3460张&#xff09; 第二个文件夹是 健康&#xff08;4024张&#xff09; 2.整个文件夹 data文件夹存放的是未被划分训练集和测试集的原始照片 picture文件夹存放的…

系统架构:数据库

文章目录 数据库设计关系代数规范化理论求候选键特殊函数依赖Armstrong公理 数据库设计 步骤产出说明1.根据数据要求和处理要求进行需求分析数据流图、数据字典、需求说明书等分析数据流向、数据详细含义等&#xff0c;分析具体需求2.对现实世界进行抽象&#xff0c;进行概念结…

DBeaver 23.1.4发布

导读DBeaver 23.1.4发布,修复和添加了不少功能。 SQL 编辑器 修复了表别名生成问题&#xff08;重复别名问题&#xff09;自动建议现在尊重 “空行是查询分隔符 “选项在某些情况下大大提高了自动建议计算性能修复了别名补全问题&#xff08;冗余空格问题&#xff09;修复了无…

超参数的选择-手工搜索、网格搜索、随机搜索、贝叶斯搜索

超参数&#xff1a;超参数是在建立模型时用于控制算法行为的参数。这些参数不能从常规训练过程中获得。在对模型进行训练之前&#xff0c;需要对它们进行赋值。 超参数与模型的参数不同。模型参数(如神经网络的权重)是在训练过程中学习得到的,而超参数(如学习率、隐藏层数量)需…

2023-8-22 模拟队列

题目链接&#xff1a;模拟队列 #include <iostream>using namespace std;const int N 100010;int m; int q[N], hh, tt -1;int main() {cin >> m;while(m--){string op;int x;cin >> op;if(op "push"){cin >> x;q[tt] x;}else if(op …

原型链继承的缺点

记录一下原型链继承的缺点&#xff1a; 第一点是实例共享属性的问题&#xff0c;如果实例改变了继承的引用类型属性&#xff0c;那么其他实例属性也会被改变 第二点是实例对象的 constructor 属性不正确。child 的 constructor 属性并未指向它自己的构造函数 继承代码如下 …

【水平垂直居中布局】CSS实现水平垂直居中的5种方法(附源码)

文章目录 写在前面涉及知识点1、子绝对定位父相对定位&#xff0c;子节点设置位移实现1.1效果1.2实现源码 2、子绝对定位父相对定位&#xff0c;子节点设置上下边距2.1 效果2.2 实现源码 3、利用flex布局实现3.1 效果3.2 实现源码 4、利用行高和文本水平居中设置4.1 效果4.2 实…

Python代码实现天天酷跑小游戏

前言 最近几天多给大家分享分享一些用Python代码&#xff0c;写出来的小游戏吧 今天分享的游戏是 天天酷跑 大概的效果是这样的&#xff0c;动图没展示出来&#xff0c;大家将就看一下吧 【源码的话 文末名片可以获取 】 实现代码 定义 import pygame,sys import random游…