TCP可靠性机制

确认号/序列号/ACK

TCP帮助确保数据的准确传递。为了做到这一点,其使用了一些特殊的标记和信息,其中包括序号、确认号和ACK字段。
其中,它将每个字节的数据都进行了编号. 即为序列号.在这里插入图片描述

  • 序列号:就像给书中的每一页都编了号码一样,TCP也给要发送的数据包编上号码,这个号码叫做序号。这个序号表示该数据包在整个数据包的位置(tcp是面向字节流的,当数据包过大时会被拆分成多个数据包进行发送)。这样,接收方就知道哪些数据包已经接收,哪些还没有。

  • 确认号:当接收方收到一个数据包后,它会回应一个特殊的包,其中包含一个确认号。这个确认号告诉发送方:“我已经收到了你发给我的序号为1-1000的数据包,下一个我期待收到的序号的起始是1001。”这样,发送方就知道接收方已经收到了哪些数据。每一个ACK都带有对应的确认序列号。

  • ACK字段:ACK 是 “Acknowledgment”(确认)的缩写。当接收方发送回应时,它会在包里设置一个特殊的标记,表示这个包是一个确认回应,意思是它收到了之前的数据包。这个标记就是 ACK 字段。发送方通过检查这个字段,可以知道接收方已经确认了之前发送的数据。

确认应答机制

这个机制是通过使用序列号、确认号和确认标志来实现的。

  1. 发送方发送数据段
    当发送方要向接收方发送数据时,它会将数据分成合适大小的数据段,并附上一个序列号。序列号表示数据段的起始字节在整个数据流中的位置。发送方同时还设置确认标志为0,表示这个数据段不需要确认应答。

  2. 接收方接收数据段并发送确认
    接收方收到数据段后,会根据序列号和数据长度来确定数据段的范围,并提取数据进行处理。接收方会生成一个确认号,该确认号设置为收到的数据段的序列号加上数据长度,再加1。这是因为确认号表示期望收到的下一个字节的序号。接收方会发送一个确认数据包,其中确认号表示期望收到的下一个字节的序号,同时确认标志被设置为1,表示这个数据段已被确认。

  3. 发送方接收到确认
    发送方收到确认后,会根据确认号来确定哪些数据段已经被成功接收并确认。一旦发送方收到了确认,它就知道接收方已经收到了数据,可以安全地移除这些已经被确认的数据段的副本。这样,发送方就能保证数据的可靠传输,因为只有在收到确认后才会认为数据已经成功传输。
    在这里插入图片描述

超时重传机制

该机制依赖于确认应答机制

触发条件

以下两种都对应着一种情况:发送方无法接受到确认应答(ACK)

第一种情况:数据包丢失

数据包丢失,发送方一定时间内没有收到ACK,则会重新发送数据包

第二种情况:ACK丢失

接收端已经收到数据包,只是ACK丢失,但发送方不知道,仍然会重新发送数据包,导致接收端有着大量重复数据。

那如何解决呢?

  • 使用上面所说的序列号,通过识别序列号来确认是否是重复数据,达到去重的目的

超时到底超多少才算呢

这个我查了,感觉知道也没啥用,这里给放上来好了。

  • 最理想的情况下, 找到一个最小的时间, 保证 “确认应答一定能在这个时间内返回”.
  • 但是这个时间的长短, 随着网络环境的不同, 是有差异的.
  • 如果超时时间设的太长, 会影响整体的重传效率;
  • 如果超时时间设的太短, 有可能会频繁发送重复的包;
  • TCP为了保证无论在任何环境下都能比较高性能的通信, 因此会动态计算这个最大超时时间.
  • Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发的超时时间都是500ms的整数倍.
  • 如果重发一次之后, 仍然得不到应答, 等待 2*500ms 后再进行重传.
  • 如果仍然得不到应答, 等待 4*500ms 进行重传. 依次类推, 以指数形式递增.
  • 累计到一定的重传次数, TCP认为网络或者对端主机出现异常, 强制关闭连接.

连接管理

看这篇三次握手、四次挥手

流量控制

接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送,
就会造成丢包, 继而引起丢包重传等等一系列连锁反应.因此TCP支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做流量控制(Flow Control);

  • 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;
  • 窗口大小字段越大, 说明网络的吞吐量越高;
  • 接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
  • 发送端接受到这个窗口之后, 就会减慢自己的发送速度;
  • 如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据段, 使接收端把窗口大小告诉发送端。
    在这里插入图片描述

拥塞控制

拥塞窗口是什么

虽然滑动窗口机制根据接收方发来的接收缓冲区大小来进行判断可以显著提高效率,但如果网络中数据太多堵住了(类似于WiFi很多人一起用你就会发现网络变慢了),出现大量丢包,那么哪里来的效率呢?所以就有了拥塞窗口。

拥塞窗口的作用

网络中可能出现阻塞,如果此时接收端接收窗口是100mb,发送端发出数据,没有收到应答,触发超时重传机制,而此时网络中因为已经很堵了,此时发送端的滑动窗口再依据接收端的窗口大小去确定大小以发送数据,就会加剧网络拥堵,导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大。
而此时,拥塞窗口会不断探测,寻找一个在当前网络中能承载的最大的量来作为数据的大小,这个大小叫做MTU:最大传输单元,通过MTU与接收窗口,两者一起构成了滑动窗口协议中的流量控制机制(即取2者中小的那个作为滑动窗口的大小)。

拥塞窗口的工作原理

于是,TCP引入慢启动机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据;

为了在发送方调节所要发送数据的量,定义了一个叫做拥塞窗口的概念。

  • 发送开始的时候, 定义拥塞窗口大小为1;
  • 每次收到一个ACK应答, 拥塞窗口加1;
  • 每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的接收缓冲区窗口大小做比较, 取较小的值作为实际发送的窗口(即滑动窗口);
    在这里插入图片描述

像上面这样的拥塞窗口增长速度, 是指数级别的.慢启动只是指初使时慢, 其另一个机制是快恢复
为了不增长的那么快, 因此不能使拥塞窗口单纯的加倍.此处引入一个叫做慢启动的阈值
当拥塞窗口超过这个阈值(ssthresh)的时候, 不再按照指数方式增长, 而是按照线性方式增长。
发生超时后,重新回到原点进行慢启动,使用算法设定阈值,以进入拥塞避免,以此反复探测适合发送的数据包大小。

延迟应答

  • 如果发送方长时间没有收到应答会超时重传,但我们如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小。
  • 假设接收端缓冲区为1M. 一次收到了500K的数据; 如果立刻应答, 返回的窗口就是500K;
    但实际上可能处理端处理的速度很快, 10ms之内就把500K数据从缓冲区消费掉了;
    在这种情况下, 接收端处理还远没有达到自己的极限, 即使窗口再放大一些, 也能处理过来;
    如果接收端稍微等一会再应答, 比如等待200ms再应答, 那么这个时候返回的窗口大小就是1M;
  • 那么所有的包都可以延迟应答么? No
    数量限制: 每隔N个包就应答一次;
    时间限制: 超过最大延迟时间就应答一次;
    具体的数量和超时时间, 依操作系统不同也有差异; 一般N取2, 超时时间取200ms;

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

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

相关文章

EMR电子病历系统 SaaS电子病历编辑器源码 电子病历模板编辑器

EMR(Electronic Medical Record)指的是电子病历。它是一种基于电子文档的个人医疗记录,可以包括病人的病史、诊断、治疗方案、药物处方、检查报告和护理计划等信息。EMR采用计算机化的方式来存储、管理和共享这些信息,以便医生和医…

RISC-V中国峰会 | 256核服务器高调亮相,谁与争锋?

8月23日,第三届RISC-V中国峰会(RISC-V Summit China 2023)在北京香格里拉饭店正式开幕,来自世界各地的行业精英汇聚一堂,为RISC-V生态系统建言献策,凝心聚力! 中国工程院院士倪光南、RISC-V国际…

高等数学(上)【基础学科、极限部分】

学习【高等数学(上)】6小时从0基础直追满绩!_哔哩哔哩_bilibili 高数基础 高等数学无非分为三个部分:极限、导数(微分)和积分——构成了微积分 高等数学学的就是 微积分,整体其实只是一个思想 …

K8S cluster with multi-masters on Azure VM

拓扑参考: 在 Azure VM 实例上部署 KubeSphere 基础模板 需要修改 IP 地址和 VM Image的可以在模板中修改。 {"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#","contentVersion": &q…

达梦数据库分区表介绍

概述 本文将对达梦数据库分区表概念、创建、维护进行介绍。 1.分区表概念 1.1 分区表使用场景 近几年,随着移动支付快速发展,银行交易系统中【移动小微支付场景】使用越来越多,系统中流水账单表数据量巨大,往往上TB。 为了提高…

Embedding 向量生成GPT数据使用相关

如果使用python3.6的版本,使用pycharm创建工程,那么默认会使用 docx包,这样运行程序会爆异常,突然想起以前请教的一个大神,想当 初,这个问题困扰了我 两天时间,在此记录一下: pytho…

Linux上实现分片压缩及解压分片zip压缩包 - 及zip、unzip命令详解

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

AI夏令营第三期 - 基于论文摘要的文本分类与关键词抽取挑战赛笔记

赛题:基于论文摘要的文本分类与关键词抽取 背景:高效的从海量医学文献中提取疾病诊断和治疗关键信息 任务:通过论文摘要判断论文是否为医学文献 样例 数据集:csv文件,字段:标题、作者、摘要、关键词 评价指…

Bootstrap的类container与类container-fluid有什么区别?

阅读本文前建议先阅读下面两篇博文: 怎么样通过Bootstrap已经编译好(压缩好)的源码去查看符合阅读习惯的源码【通过Source Map(源映射)文件实现】 在CSS中,盒模型中的padding、border、margin是什么意思? 以下是Bootstrap的类 container 的盒…

wireshark进行网络监听

一、实验目的: 1)掌握使用CCProxy配置代理服务器; 2)掌握使用wireshark抓取数据包; 3)能够对数据包进行简单的分析。 二、预备知识: 包括监听模式、代理服务器、中间人攻击等知识点&#xf…

ElementUI中的日历组件加载无效的问题

在ElementUI中提供了一个日历组件。在某些场景下还是比较有用的。只是在使用的时候会有些下坑&#xff0c;大家要注意下。   官网提供的信息比较简介。我们在引入到项目中使用的时候可以能会出现下面的错误提示。 Unknown custom element: <el-calendar> - did you …

MySQL下载安装配置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Java百度提前批面试题

今天分享百度提前批的 Java 后端开发面经&#xff0c;整体上考察的点挺多的&#xff0c;主要重点考察了网络i/o、网络协议、linux系统、mysql&#xff0c;Java 问的不多&#xff0c;可能是百度的后端开发的语言不是主要以 Java 为主&#xff0c;所以重点看面试者的计算机基础是…

8个月打磨,打造出的全能工具箱,让你事半功倍!

这款工具叫即时工具&#xff0c;目前有网页端和客户端可以下载至本地离线使用&#xff0c;区别在于客户端采用原生适配性能更好&#xff0c;网页端需要上传至服务器或浏览器内部处理。 体验地址&#xff1a;点击直达 一、为什么会开发这个工具 综合性和多功能性&#xff1a;…

深入理解线性回归模型的评估与优化方法

文章目录 &#x1f340;引言&#x1f340;模型评估方法&#x1f340;均方误差&#xff08;MSE&#xff09;&#x1f340;均方根误差&#xff08;RMSE&#xff09;&#x1f340;绝对平均误差&#xff08;MAE&#xff09;&#x1f340;模型优化策略&#x1f340;特征工程&#x1…

电商数据采集和数据分析

不管是做渠道价格的治理&#xff0c;还是做窜货、假货的打击&#xff0c;都需要品牌对线上数据尽数掌握&#xff0c;准确的数据是驱动服务的关键&#xff0c;所以做好电商数据的采集和分析非常重要。 当线上链接较多&#xff0c;品牌又需要监测线上数据时&#xff0c;单靠人工肯…

P14-CVPR2022-1.0-RepLKNet31

论文地址:https://arxiv.org/abs/2203.06717 代码地址:GitHub - MegEngine/RepLKNet: Official MegEngine implementation of RepLKNet ‘ 目录 Abstract 一.Introduction 二.Related Work 2.1Model with Large Kernels 2.2Model Scaling Techniques 2.3Structural Re-…

基于数据湖的多流拼接方案-HUDI概念篇

目录 一、为什么需要HUDI&#xff1f; 1. 传统技术选型存在哪些问题&#xff1f; 2. Hudi有什么优点&#xff1f; 基于 Hudi Payload 机制的多流拼接方案&#xff1a; 二、HUDI的应用场景 1. 什么场景适合使用hudi&#xff1f; 2. 什么场景不适合使用hudi&#xff1f; …

数据分析案例-汽车客户信息数据可视化分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

用加持了大模型的 Byzer-Notebook 做数据分析是什么体验

Byzer-Notebook 是专门为 SQL 而研发的一款 Web Notebook。他的第一公民是 SQL&#xff0c;而 Jupyter 则是是以 Python 为第一公民的。 随着 Byzer 引擎对大模型能力的支持日渐完善&#xff0c; Byzer-Notebook 也在不自觉中变得更加强大。我和小伙伴在聊天的过程中才发现他已…