【计算机网络】TCP连接如何确保传输的可靠性

一、确保可靠传输的机制

TCP(传输控制协议)是一种面向连接的、提供可靠交付的、面向字节流的、支持全双工的传输层通信协议

1、序列号 seq

TCP头部中的序号,占32位(4字节);

发送方给报文段分配一个序列号,接收方根据序列号来确认收到的数据,从而确认丢失的数据或者

需要重传的数据

2、确认应答 ACK与ack

TCP头部中的标记,ACK字段,占1位;确认号ack,占32位(4字节);

接收方收到数据后,它会发送一个确认应答(ACK = 1)给发送方,告诉发送方数据已成功接收;

确认应答还包含期望接收的下一个字节的序列号,有助于发送方知道哪些数据已被接收,哪些数据

需要重传

3、检验和

TCP头部中的校验和,占16位(2字节);

检测数据在传输过程中是否发生错误。接收方会计算接收到的数据的校验和,并与发送方发送的校

验和进行比较;不匹配,则接收方会丢弃该数据包,并可能要求发送方重传。

4、流量控制

TCP头部中的窗口,占16位(2字节);

使用可变大小的滑动窗口协议来实现流量控制,防止发送方发送数据的速度过快而导致接收方无法

处理。

5、超时重传 RTO

超过一定时间未收到ACK,重传数据包;RTO根据网络状况动态计算

6、拥塞控制

慢启动、拥塞避免、快重传、快恢复

7、连接管理(3次握手、4次挥手)

参考博文:

【计算机网络】描述TCP建立连接与断开的过程-CSDN博客


二、TCP流量控制具体是如何实现的?

1、可变大小的滑动窗口协议

协议允许接收方根据自己的处理能力,动态调整其可接收数据的窗口大小,

并通过TCP报文的窗口字段将这一信息通知给发送方。

发送方则根据接收到的窗口大小来调整其发送速率,确保在任何时刻,

未确认的数据量不会超过接收窗口的大小。

2、接收方窗口维护

接收窗口(Receive Window):接收方维护一个接收窗口,用于表示其当前可用的缓冲区大小。

这个窗口大小会随着接收方处理数据的速度而变化。

窗口字段(Window Field):接收方通过TCP报文段中的窗口字段,将其当前的接收窗口大小通

知给发送方。

3、发送方

调整发送速率:发送方根据接收到的窗口大小来调整其发送速率。

如果接收窗口的大小变为零,发送方将停止发送数据,直到接收到一个具有非零窗口大小的报文。

零窗口探测报文(Zero Window Probe):为了避免因接收窗口长时间为零而导致的死锁,

发送方可能会发送零窗口探测报文(仅携带 1 字节的数据),以检查接收方是否已经有足够的缓冲

区来接收新数据。

发送窗口的划分发送方的滑动窗口可以分为四个部分:已发送并收到ACK确认的数据、

已发送但未收到ACK确认的数据、未发送但可以发送的数据、不允许被发送的数据。


三、讲一下TCP是如何进行拥塞控制的?

1、慢启动与拥塞避免

慢启动:

初始值小,但拥塞窗口cwnd指数规律增长。慢启动门限值ssthresh限制cwnd倍增。

拥塞避免:

cwnd > ssthresh后,执行拥塞避免算法,窗口值线性增长。

网络拥塞后,执行“乘法减小”,将门限值ssthresh设置为超时的拥塞窗口值cwnd的一半

之后,重新执行慢启动算法

2、快重传与快恢复

快重传:

·接收方收到一个失序的报文段时,立即发出重复确认,无需等到接收方发送数据时捎带确认。(使发送方尽早直到有报文为到达接收方)

·发送方收到3个连续重复确认时,立即重传对方未收到的报文段,无需等待设置的重传计时器到期

快恢复:

门限值ssthresh后,执行拥塞避免算法


关于ARQ(Automatic Repeat reQuest,自动重发请求)协议介绍

主要用于通信网络中的流量控制和可靠传输机制

流量控制

基本概念:流量控制是一种防止网络拥塞的技术,它通过调整数据发送方的发送速率来匹配接收方

的处理能力。

在ARQ机制中,接收方通过确认帧(ACK)来告知发送方哪些数据帧已被正确接收,从而控制发

送方的发送速率。
实现方式:在ARQ中,如果发送方在一定时间内未收到接收方对某个数据帧的确认帧,则认为该

数据帧可能已丢失或出错,并会重新发送该数据帧。

这种机制有助于确保发送方的发送速率不会超过接收方的处理能力,从而实现流量控制。

可靠传输

基本概念:可靠传输是指数据在传输过程中能够准确无误地到达目的地,且传输过程中能够检测和

纠正错误。

实现方式:ARQ通过确认和重传机制来实现可靠传输。

发送方在发送数据帧后,会等待接收方的确认帧。

如果确认帧表示数据帧已正确接收,则发送方继续发送下一个数据帧;

如果确认帧表示数据帧出错或未收到,则发送方会重新发送该数据帧,直到接收方正确接收为止。

这种机制能够确保数据在传输过程中的可靠性和完整性。

ARQ类型

停止-等待ARQ:发送方在发送一个数据帧后必须等待接收方的确认才能发送下一个数据帧。

如果超时未收到确认,则重发该数据帧

连续ARQ(后退N帧ARQ和选择性重传ARQ):允许发送方在收到确认之前连续发送多个数据

帧。当某个数据帧丢失或出错时,根据具体的连续ARQ实现(如后退N帧ARQ或选择性重传

ARQ),发送方可能会重发该数据帧及其之后的所有数据帧(后退N帧ARQ),

或者只重传出错的数据帧(选择性重传ARQ)

具体协议可参考博文,内容很详细:

TCP可靠传输:ARQ协议(停止等待、超时重传、滑动窗口、回退N帧、选择重传)-CSDN博客


欢迎补充,互相学习🤝

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何锻炼自己深度思考的能力?4个方法让你快速看清事物的本质!

我们每天都会接触到海量的信息,但真正的智慧并不在于掌握多少信息,而在于如何从中提炼出有价值的知识,并对其进行深刻的理解与运用。 本周想和大家探讨一下深度思考的重要性,同时分享一些实用的方法和技巧,希望能帮你…

STM32(一)简介

一、stm32简介 1.外设接口 通过程序配置外设来完成功能 2.系统结构 3.引脚定义 4.启动配置 5.最小系统电路

【数据结构初阶】二叉树--堆(顺序结构实现)

hello! 目录 一、实现顺序结构二叉树 1.1 堆的概念和结构 1.2 堆及二叉树的性质 1.3 堆的实现 1.3.1 创建堆的结构 1.3.2 初始化和销毁 1.3.3 入堆向上调整算法(创建一个小堆) 1.3.4 出堆向下调整算法(小堆&#x…

2024Java基础总结+【Java数据结构】(2)

面向对象07:简单小结类与对象 面向对象08:封装详解 面向对象09:什么是继承 ctrlh看类的关系,所有的类都默认的或间接继承Object 面向对象10:Super详解 super注意点: super调用父类的构造方法,必须在构造方…

OCR经典神经网络(一)文本识别算法CRNN算法原理及其在icdar15数据集上的应用

OCR经典神经网络(一)文本识别算法CRNN算法原理及其在icdar15数据集上的应用 文本识别是OCR(Optical Character Recognition)的一个子任务,其任务为:识别一个固定区域的的文本内容。 在OCR的两阶段方法里,文本识别模型接…

七,Spring Boot 当中的 yaml 语法使用

七,Spring Boot 当中的 yaml 语法使用 文章目录 七,Spring Boot 当中的 yaml 语法使用1. yaml 的介绍2. yaml 基本语法3. yaml 数据类型4. 学习测试的准备工作4.1 yaml 字面量4.2 yaml 数组4.3 yaml 对象 5. yaml 使用细节和注意事项6. 总结:…

2024高教社杯数学建模竞赛解题思路

高教社杯数学建模竞赛解题思路:独家出版,思路解析模型代码结果可视化。 A题思路及程序链接:https://mbd.pub/o/bread/ZpqblJZs B题思路及程序链接:https://mbd.pub/o/bread/ZpqblJZx D题思路及程序链接:https://mbd.pu…

常用排序算法(上)

目录 前言: 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 堆排序 2.1 1 向下调整算法 2.1 2 建堆 2.1 3 排序 2.2 插入排序 2.1.1基本思想: 2.1.2直接插入排序: 2.1.3 插…

elementUI——checkbox复选框监听不到change事件,通过watch监听来解决——基础积累

今天在写后台管理系统的时候,遇到一个需求,就是要求监听复选框的change事件,场景就是:两个复选框互斥,且可以取消勾选。 就是这两个复选框可以同时都不勾选,如果勾选的话,另一个一定要取消勾选。…

具身智能猜想 ——机器人进化

设想一个机器人进化的仿真模拟环境,可以通过 “基因突变” 产生新功能,让机器人逐步进化。以下是这个进化系统的关键要素和可能的实现步骤: 1. 仿真环境 虚拟世界:创建一个包含多样化任务和挑战的虚拟环境,如探索、抓…

多智能体强化学习:citylearn城市建筑能量优化和需求响应

今天分享一个用于能量优化的强化学习框架,citylearn 代码量非常庞大,我都不敢看,看也看不完,不花一定的时间难以搞懂它的原理。 CityLearn(CL)环境是一个类似 OpenAI Gym 的环境,它通过控制不…

UE5 C++ 读取图片插件(一)

原来UE可以使用 static,之前不知道&#xff0c;一用就报错。 static TSharedPtr<IImageWrapper> GetImageWrapperByExtention(const FString InImagePath); //智能指针&#xff0c;方便追寻引用C,加载ImageWrapperstatic UTexture2D* LoadTexture2D(const FString& …

代码随想录 刷题记录-28 图论 (5)最短路径

一、dijkstra&#xff08;朴素版&#xff09;精讲 47. 参加科学大会 思路 本题就是求最短路&#xff0c;最短路是图论中的经典问题即&#xff1a;给出一个有向图&#xff0c;一个起点&#xff0c;一个终点&#xff0c;问起点到终点的最短路径。 接下来讲解最短路算法中的 d…

matter的Commissioning(入网过程)整体流程、加密方式、通信信息结构

在Matter协议中&#xff0c;**控制器负责将新设备加入网络&#xff08;commissioning&#xff09;**的整个流程&#xff0c;这一过程包括设备的发现、验证、授权、加入Fabric&#xff0c;以及最终建立数据通信的步骤。配网完成后的数据通信过程同样遵循严格的加密方式&#xff…

C语言 | Leetcode C语言题解之第385题迷你语法分析器

题目&#xff1a; 题解&#xff1a; struct NestedInteger* helper(const char * s, int * index){if (s[*index] [) {(*index);struct NestedInteger * ni NestedIntegerInit();while (s[*index] ! ]) {NestedIntegerAdd(ni, helper(s, index));if (s[*index] ,) {(*index…

TCP的流量控制深入理解

在理解流量控制之前我们先需要理解TCP的发送缓冲区和接收缓冲区&#xff0c;也称为套接字缓冲区。首先我们先知道缓冲区存在于哪个位置&#xff1f; 其中缓冲区存在于Socket Library层。 而我们的发送窗口和接收窗口就存在于缓冲区当中。在实现滑动窗口时则将两个指针指向缓冲区…

社交媒体的智能变革:Facebook AI优化用户体验

Facebook作为全球领先的社交平台&#xff0c;一直致力于通过人工智能&#xff08;AI&#xff09;技术提升用户体验。AI技术在Facebook的应用涵盖了推荐系统、自然语言处理、广告投放和用户反馈等多个方面&#xff0c;使平台的互动和内容体验更加智能和个性化。 推荐系统的智能化…

火焰传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main.c文件 IR.h文件 IR.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 火焰传感器是一种常用于检测火焰或特定波长&#xff08;760nm-1100nm&#xff09;红外光的传感器。探测角度60左右&am…

高压喷雾车的功能与应用_鼎跃安全

在一次森林火灾中&#xff0c;位于山区的一个小型度假村附近突然起火&#xff0c;由于山风强劲&#xff0c;火势迅速蔓延&#xff0c;消防部门立即调派多辆高压喷雾车赶往现场。在扑救过程中&#xff0c;传统消防车难以进入崎岖的山路&#xff0c;但高压喷雾车凭借其高机动性顺…

大模型笔记01--基于ollama和open-webui快速部署chatgpt

大模型笔记01--基于ollama和open-webui快速部署chatgpt 介绍部署&测试安装ollama运行open-webui测试 注意事项说明 介绍 近年来AI大模型得到快速发展&#xff0c;各种大模型如雨后春笋一样涌出&#xff0c;逐步融入各行各业。与之相关的各类开源大模型系统工具也得到了快速…