TCP协议中的可靠性机制

news2024/9/23 3:12:21

目录

确认应答

滑动窗口

快重传

流量控制

窗口探测

拥塞控制

延迟应答

捎带应答

总结


相较于UDP协议,TCP协议由于要确保通信过程中的可靠性与尽可能提高通信效率提供了很多可靠性机制,因此TCP比较复杂。

确认应答

滑动窗口

滑动窗口是发送方/接收方的发送缓冲区中的一部分。

 通过控制指针位置来改变滑动窗口的大小。滑动窗口是动态变化的,可能变小、变大、变成0。

对于确认应答策略如果让发送方每发送一个报文必须收到接收方的确认应答ACK才可以发送下一个数据段,这样做的缺点是性能较差,尤其是数据往返时间间隔较长的时候。既然这样一发一收的发送方式性能较低,那么一次可以发送多条数据,就可以提高性能(其实是将多个数据段发送与到达的时间间隔重叠在了一起)。

1、滑动窗口的大小指无需等待确认应答而可以继续发送数据段的最大值,上图的滑动窗口大小是4000字节即4个数据段。

2、A主机向B主机发送前4个数据段(1~4000)时直接发送,不需要等待任何ACK。

3、收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据,依次类推。
4、操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答。
5、只有确认应答过的数据, 才能从缓冲区删掉。
6、窗口越大, 则网络的吞吐率(单位时间里,网络中成功交付数据的平均速率)就越高。

那么如果出现了丢包如何进行重传? 这里分两种情况讨论

数据段送达,但ACK丢失

如果数据1~1000与2001~3000对应ACK丢失,接收方给发送方返回的ACK报头中的确认序号是3001,因此确认序号保证了允许ACK丢失。其实接收方会根据收到的数据段的序号进行排序,如果序号是连续的说明没有数据丢失。

数据段丢了

快重传

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

这种机制被称为 "高速重发控制"(也叫快重传”)。

流量控制

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

窗口探测

当接收端窗口大小(接收端接收缓冲区的剩余空间大小)为0时,向发送端确认应答,此时发送端就不会再向接收端发送数据段,接收端会隔一段时间向发送端发送窗口更新通知(接收端的用户层取走了数据)。对于发送端如果过了超时重发的时间还没有收到接收端的窗口更新通知,发送端就会向接收端发送窗口探测请求。过程如下图:

接收端如何把窗口大小告诉发送端呢 ? TCP 首部中有一个 16 位窗口字段 , 就是存放了窗口大小信息
那么问题来了 , 16 位窗口大小字段最大表示 65535, 那么 TCP 窗口最大就是 65535 字节吗 ?
实际上 ,TCP 首部 40 字节选项中还包含了一个窗口扩大因子 M, 实际窗口大小是窗口字段的值左移 M ,即实际窗口大小=16位窗口大小字段*(2^M)。

拥塞控制

虽然 TCP 有了滑动窗口这个大杀器能够高效可靠的发送大量的数据但是如果在刚开始阶段就发送大量的数据 仍然可能引发问题。 因为网络上有很多的计算机可能当前的网络状态就已经比较拥堵在不清楚当前网络状态下 , 贸然发送大量的数据是很有可能引起数据丢包, TCP 引入 慢启动 机制先发少量的数据探探路摸清当前的网络拥堵状态 , 再决定按照多大的速度传输数据
此处引入一个概念程为拥塞窗口。
发送开始的时候, 定义拥塞窗口大小为1。
每次收到一个ACK应答, 拥塞窗口加1。
每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较,取较小的值作为发送端的滑动窗口大小。
像上面这样的拥塞窗口增长速度, 是指数级别的。 "慢启动" 只是指初使时慢, 但是增长速度非常快。当拥塞窗口超过阈值的时候,不再按照指数方式增长,而是按照线性方式增长。

延迟应答

如果接收数据的主机立刻返回 ACK 应答这时候返回的窗口可能比较小。
下面看一个例子:
假设接收端缓冲区为1M, 一次收到了500K的数据;如果立刻应答, 返回的窗口就是500K
但实际上可能处理端处理的速度很快,10ms之内就把500K数据从缓冲区消费掉了,如果接收端稍微等一会再应答,比如等待200ms再应答,那么这个时候返回的窗口大小就是1M。
因为窗口越大网络吞吐量就越大传输效率就越高我们的目标是在保证网络不拥塞的情况下尽量提高传输效率

捎带应答

在确认应答的同时顺便带上一些数据段,可以提高通信效率。

总结

可靠性:校验和、序列号(按序到达)、确认应答、超时重发、连接管理、流量控制、拥塞控制

提高性能:滑动窗口、快速重传、延迟应答、捎带应答

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

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

相关文章

Jmeter执行多机联合负载

1、注意事项,负载机必须要安装jre,控制机则必须安装jdk。要配置同网段ip,双向关闭防火墙。 每个负载机要平均承担线程数。 具体执行事项查看上面截图所示,控制机和负载机配置。 2、先给负载机设置ip地址,保持与控制…

网络安全新视角:人工智能在防御中的最新应用

人工智能在网络安全中的最新应用 概述 人工智能(AI)在网络安全领域的应用正日益成熟,它通过机器学习和深度学习技术,为网络安全带来了革命性的变革。AI技术不仅能够自动化、智能化地检测、分析和应对安全威胁,还能够…

Transformer-BiLSTM神经网络多输入单输出回归预测的MATLAB实现

在现代人工智能和机器学习领域,深度学习模型已经成为解决复杂问题的重要工具。Transformer和双向长短期记忆网络(BiLSTM)是两种非常强大的神经网络架构,它们在自然语言处理、时间序列预测、图像处理等多个领域表现出色。本文将介绍…

黑马JavaWeb企业级开发(知识清单)07——Ajax、Axios请求、前后端分离开发介绍、Yapi配置步骤

文章目录 前言一、Ajax1. 概述2. 作用3. 同步异步4. 原生Ajax请求(了解即可)5. Axios(重点)5.1 基本使用5.2 Axios别名(简化书写) 二、前后端分离开发1. 介绍1.1 前后台混合开发1.2 前后台分离开发方式&…

ChatGPT真的那么牛吗?

ChatGPT 很受欢迎,主要因为它在很多任务上表现出色,比如回答问题、写作、编程辅助等等。它的强大之处在于它可以理解和生成与上下文相关的自然语言文本,使得它在许多领域中都有用武之地。 和咱国内的文心一言一比较比较就知道了 不抖机灵&…

史上最全软件测试面试题集(含答案),进大厂涨薪必备,赶紧收藏

前阵子一位读者告诉我,某位大厂HR给他发了我之前做的面试题答案合集。 这个消息让我开心了一整天,因为这说明我之前做的面试题系列真的能帮助到部分测试同学,也算是侧面得到了一种认可吧。 今天写的这份面试题我之前就整理分享过&#xff0…

HTB-Explosion(rdp连接)和preignition(目录遍历)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解Explosion靶机 - Explosion 渗透过程 信息搜集 发现服务器开起了3389端口远程服务 远程连接rdp服务 xfreerdp /v:10.129.172.157 /u:Administrator /p: /v 主机名 /u 用户名 /p密码 这篇靶机是对rdp服…

问题记录:树莓派3B+安装OpenMediaVault(OMV)后无WiFi连接处理

目录 实验环境参考教程安装前直接避免出现该问题的方法问题:安装完OpenMediaVault后,此前已配置好的WiFi,无法正常连接解决方法 OpenMediaVault 登录 实验环境 时间:2024年08月27日 硬件:树莓派3B 系统:Ra…

代码随想录算法训练营第三十九天| 图论理论基础

今天是图论入门的第一天,主要的学习内容主要是图论的理论基础。 图论理论基础 图的种类 图一般可以分为有向图和无向图,无向图是指边没有方向,有向图是指边有方向,其中,还存在一种加权有向图,指的是每条…

ATR - LSIs supported BIT

6.3.3 Global Interface bytes ts_102221v170400p.pdf

【人工智能】多模态AI:如何通过融合文本、图像与音频重塑智能系统未来

我的主页:2的n次方_ ​ 随着人工智能技术的飞速发展,多模态AI逐渐成为构建智能系统的重要方向。传统的AI系统通常依赖于单一模态的数据,如文本、图像或音频。而多模态AI通过结合多种数据类型,能够在更复杂的场景下提供更智能的解…

给自己复盘的随想录笔记-链表

链表 定义 数字域和指针域 种类 单链表,双链表,循环链表 链表的存储方式 链表是通过指针域的指针链接在内存中各个节点。 所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统…

FFmpeg下载与集成:.NET开发者入门指南

文章目录 前言一、FFmpeg下载1.访问FFmpeg官网2.选择合适的版本3.下载并安装 二、.NET项目中集成FFmpeg1.引入FFmpeg库2.编写代码调用FFmpeg3.处理FFmpeg输出和错误 三、进阶使用总结 前言 在音视频处理领域,FFmpeg无疑是一个强大的工具库,它支持几乎所有…

3min 告诉你!如何用波特五力分析模型解读行业格局?

在瞬息万变,竞争激烈的市场环境中,企业不仅要关注自身的发展,还需要时刻了解竞争对手的动态。通过波特五力模型来分析行业竞争状况,企业可以提前制定战略,获得竞争优势。 什么是波特五力模型? 波特五力模…

edge跟谷歌浏览器配置浏览器可跨域

在D盘下创建 vscode\test 文件夹 D:\xxxx\vscode\test 直接复制edge或者谷歌的一个快捷方式 名字就叫可跨域 可以随便取 右键选中目标浏览器点击属性 配置edge的目标路径 "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --disable-web-security …

【操作系统】实验:内存管理

目录 一、实验目的 二、实验要求 三、实验步骤 四、核心代码 五、记录与处理 六、思考 七、完整报告和成果文件提取链接 一、实验目的 1、加深对固定和动态分区分配内存管理方式的理解 2、理解动态分区分配算法:首次适应算法,循环首次适应算法&a…

文心一言 VS 讯飞星火 VS chatgpt (334)-- 算法导论23.1 3题

三、证明:如果图G的一条边(u,v)包含在图G的某棵最小生成树中,则该条边是横跨图G的某个切割的一条轻量级边。 文心一言: 为了证明这个命题,我们可以按照以下步骤进行: 第一步,假设图 G G G的一…

程序员对未来思考:面向AI编程;继2B,2C后,2AI开发工程师能否成为未来?

目录 前言当前AI状况幻觉问题上下文长度限制人在回路、提示工程师 AI对未来的影响AI改变了交互形式穿孔纸带命令行时代图形用户界面对话式交互 AI无法直接影响物理世界AI 与开发者AI2B\2C\2G\2AI2AI、AI的幻想 前言 在科技日新月异的今天,人工智能(AI&a…

【三指针法】颜色分类

目录 1.前言2.题目简介3.求解思路4.示例代码 1.前言 2.题目简介 题目链接&#xff1a;LINK 3.求解思路 求解思路&#xff1a;三指针法 4.示例代码 class Solution { public:void sortColors(vector<int>& nums) {int i 0;int left -1;int right nums.size…

JAVA安全之Velocity模板注入刨析

文章前言 关于Velocity模板注入注入之前一直缺乏一个系统性的学习和整理&#xff0c;搜索网上大多数类似的内容都是一些关于漏洞利用的复现&#xff0c;而且大多都仅限于Velocity.evaluate的执行&#xff0c;对于载荷的构造以及执行过程并没有详细的流程分析&#xff0c;于是乎…