数据通信——传输层TCP(可靠传输原理的停止等待协议)

news2024/12/25 12:33:41

引言

    基于上次的基本特性中的可靠传输特性,我们对其进行详细的分析。

    对了,在讲解TCP前,先对缓存进行一个简单的描述。我们都听说过缓存这个东西,我们发来的数据,会暂时写入到缓存中进行预处理,随后从缓存中将数据发送出去。

    比如当我们访问某个网页或应用程序时,系统会首先检查缓存中是否已经保存了该页面或应用程序的副本。如果有就从缓存中直接取用了。适当的清理缓存可以提高系统性能,但如果缓存清理太多会导致系统变慢。

    对于TCP通信而言,缓存控制了数据收发的速度,让数据可以流畅稳定不出差错的进行发送。

停止等待协议 

    为什么要设置这个协议?

    第一点:因为在网络环境中,TCP处理报文是很细致的,主机需要配合TCP运作进行额外的数据处理。所以,如果数据的发送速度和TCP处理报文的速度不匹配,将会导致数据溢出,也就是发送过量数据导致TCP不能及时处理从而通信崩溃。

    我们针对这个问题引入了反馈机制来调节发送速度。

    第二点:数据在传输中容易出现错误。TCP是面向字节流的,如果有的字节流发生问题(如:出错和丢失),那么通信质量就无法保证了。

    我们针对这个问题引入了超时定时器重传机制

    第三点:紧接上面的传输问题,丢失数据后我请求重传,但是重传来的数据我只需要一次,要避免反反复复接收重传的报文.

    我们针对这个问题使用序号标记数据确认报文。(ACKn表示对n-1号及其以前各编号数据的确认,期望下次收到n号数据。

好了,上述的问题你应该懂能看懂,但是解决方法你肯定很懵,后续几张就将围绕这些黄体的标记字展开。

停止等待协议的工作流程

    停止等待协议通信系统中,规定发送方每发送一帧后就要停下来等待接收方的确认返回,仅当接收方确认正确接收后再继续发送下一帧

    就好像咱们现实生活中排队买东西一样,大家都在排队,只有等前一个人交易完了,我们后面的人才能接着交易。中途如果插队,或者别人还没交易完你就抢着付款,售货员和顾客都不会同意的。 

上面是一个简单的流程图,我们对该图进行一个解释!

我们先看左边,这是发送端的一个运作情况。

发送端

1.主机要发送一个数据(data),此时我们设V(S)是发送状态变量,V(S)=0表示现状态设备还没有发送数据。

2.我们将数据放入缓存(Buffer),在此之前,我们再设N(S)为发送序号。将发送状态变量V(S)写入N(S),并给数据贴上标记data_No后置入缓存。

3.接下来缓存(Buffer)将我们的数据(data_No)发送出去。

4.此时开启定时器,定时器进入等待状态

5.如果数据发送到了,会返回一个ACKn,这个ACKn中的n值变成携带发送状态变量V(S)+1,表示我收到了数据,从而将新的V(S)值(假定是1)返回给缓存,缓存看到V(S)变成了1,就知道数据发送成功了,它可以继续发送后面的数据了。

在定时器的限定时间内,倘若我没有收到ACKn的回复,则证明数据传输失败,我会反馈给缓存让其继续发送没有收到的信息。

注:

    还记得引言中对缓存的描述吗?缓存中发送过的数据会以副本形式保留一段时间,当信息发送失败收到重传请求时,会将副本发送出去。只有当对方收到报文并返回ACKn以后,才会删除缓存中的副本。

    如果收到了多个相同的ACKn报文,则代表接收端的数据重复接收了!

 

复制了一份,继续,我们在看右边

接收端

1.发送端没法送来任何数据,自然我们接收端就处于V(R)=0的状态,表示没有数据到达这边。

2.很快,数据传送来了,但是我们要确认收到的data是否正确。

3.发送来的数据中携带的N(S)发送序列会和V(R)接受序列进行比对,因为N(S)发送来的时候与V(S)相同都是0,正好和V(R)是相等的。那么此时,接收端收下数据给主机,并在自己的V(R)更新状态序列上+1,将其赋值给ACKn中的n返回给发送端,表示我收到了数据,你可以继续进行接下来的发送了。

倘若N(S)≠V(R)或者收到的data有问题。都不会将V(R)进行更新,而是直接赋予ACKn,也就是n仍然是0.当发送端收到ACKn时发现对端居然没有更新ACK,那么就继续发送缓存中的副本给对端。

如果接收端发现自己的ACKn无法发到发送端,不慌,发送端的定时器超时后会解决这个问题!

注:发送端和接收端要同时看,就能对停止等待协议有了更深刻的了解。也可以更加详细的了解TCP三次握手了。

后续

我在网上找了个简述版本的,虽然不那么细致,但是很精炼,非常不错!

① 发送方每次仅将当前信息帧作为待确认帧保留在缓冲存储器中;

② 当发送方开始发送信息帧时,随即启动计时器;

③ 当接收方收到无差错信息帧后,即向发送方返回一个确认帧;

④ 当接收方检测到一个含有差错的信息帧时,便舍弃该帧;

⑤ 若发送方在规定时间内收到确认帧,即将计时器清零,继而开始下一帧的发送;

⑥ 若发送方在规定时间内未收到确认帧,(即计时器超时),则应重发存于缓冲器中的待确认信息帧。

上述讲了停止等待协议的工作流程,但是重传机制还没有描述。

    发送端对出错的数据帧进行重传可以是自动进行的,因而这种差错控制的体制常简称为ARQ(Automatic Repeat Request)——自动重传请求(不过叫它自动请求重传更合适)。

后续篇幅会讲述重传问题!

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

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

相关文章

OpenAI发布ChatGPT企业级版本

本周一(2023年8月28日)OpenAI 推出了 ChatGPT Enterprise,这是它在 4 月份推出的以业务为中心的订阅服务。该公司表示,根据新计划,不会使用任何业务数据或对话来训练其人工智能模型。 “我们的模型不会从你的使用情况中…

最适合家用的洗地机哪个牌子好?好用洗地机推荐

在如今的快节奏下,许多人没有太多的时间去完成家务清洁这一大问题,但是随着洗地机的出现,很多小伙伴们都发现了这个智能清洁家电在我们的生活中频繁出现,比如最近比较火爆的智能洗地机,结合了吸拖洗为一体的高效清洁与…

Bigemap 在水土生态环境行业中的应用

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 使用场景: 1. 土地利用占地管理: 核对数据,查看企业的实际占地是否超出宗地,污染面积。不方便现场勘测的地方&#xf…

Python实操GetOpenFilename打开文件选择框获取工作表信息

import xlwings as xw xlapp xw.App(visibleTrue, add_bookFalse) a xlapp.api.GetOpenFilename(Excel Files (*.xl*),*.xl*, 0, 0, 0, True) print(a[0]) slist [] for i in a:wk xw.Book(i)for s in wk.sheets:s_dict {}s_dict[工作簿名字] wk.names_dict[工作表名字] …

K 次取反后最大化的数组和【贪心算法】

1005 . K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可能…

信看课堂笔记—LDO和DC-DC电路打PK

LDO(low dropout voltage regulator,低压差线性稳压器)和DC-DC(Direct current-Direct current converter,直流电压转直流电压转换器)电源是非常常见的电源电路,LDO 出来的比较早,像老戏骨一样,…

热烈祝贺天光长寿食品成功入选航天系统采购供应商库

经过航天系统采购平台的严审,单州天光长寿食品(单县)有限公司成功入选中国航天系统采购供应商库。航天系统采购平台是航天系统内企业采购专用平台,服务航天全球范围千亿采购需求,目前,已有华为、三一重工、…

邀您试用|一键生成企业数字人,深兰科技硅基大脑SaaS平台使用指南

深兰科技“硅基大脑SaaS平台”是在深兰科技硅基知识大模型的基础上进行领域知识和个性化人设等高维数据的定制化训练,并以其零代码、一键生成、低成本等特点,实现从形象到知识体系的全面自定义,满足企业在智能客服、数字员工和行业专家等多个…

学习乐趣无限:学乐多光屏P90助力儿童智能学习新纪元

在这个变革的浪潮中,学乐多光屏P90以其卓越的功能和深刻的教育理念,成为了智能儿童学习领域的引领者,为孩子们开启了全新的学习体验。 融合创新技术,引领学习变革 学乐多光屏P90凭借其独特的触摸和投影光学技术,为儿…

K8S访问控制------认证(authentication )、授权(authorization )、准入控制(admission control )体系

一、账号分类 在K8S体系中有两种账号类型:User accounts(用户账号),即针对human user的;Service accounts(服务账号),即针对pod的。这两种账号都可以访问 API server,都需要经历认证、授权、准入控制等步骤,相关逻辑图如下所示: 二、authentication (认证) 在…

1+X智慧安防系统实施与运维技能等级证产教融合基地建设方案

一、系统概述 1X智慧安防系统实施与运维技能等级证产教融合体系统融合了产业需求、教育培训和技能认证,通过课程培训、实训基地和实习实训等方式培养学员的技能水平,并通过技能认证来评估其能力,以满足智慧安防行业对人才的需求,并…

el-date-picker 等 点击无反应不回显问题解决

如上图&#xff0c;编辑回显正常&#xff0c;但是时间控件在拖动过程中时间不会跟随改变。 解决办法&#xff1a; <el-date-picker input"onInput()" ...><el-input input"onInput()" ...>js中onInput() {this.$forceUpdate();},

Approaching (Almost) Any Machine Learning Problem中译版

前言 Abhishek Thakur&#xff0c;很多kaggler对他都非常熟悉&#xff0c;2017年&#xff0c;他在 Linkedin 发表了一篇名为Approaching (Almost) Any Machine Learning Problem的文章&#xff0c;介绍他建立的一个自动的机器学习框架&#xff0c;几乎可以解决任何机器学习问题…

企业的固定资产管理怎么操作

一家拥有多台大型设备的工厂&#xff0c;这些设备需要定期进行保养和维护&#xff0c;以确保其正常运转。而企业内部员工由于专业知识和技能的不同&#xff0c;需要分工协作才能更好地完成各项工作任务。因此&#xff0c;在设备资产管理方面&#xff0c;如何实现高效、便捷、透…

Linux x86_64 C语言实现gdb断点机制

文章目录 前言一、trap指令简介二、调用ptrace三、创建breakpoints四、CONT 和 SINGLESTEP五、完整代码演示六、增加参数检测参考资料 前言 本文参考文章&#xff1a;Implementing breakpoints on x86 Linux 一、trap指令简介 将通过在断点地址向目标进程的内存中插入一条新…

【数据库必备插件】Navicat Premium 15安装教程

软件下载 软件&#xff1a;Navicat Premium版本&#xff1a;15语言&#xff1a;简体中文大小&#xff1a;68.85M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan…

【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出分类预测模型(全网首发,敬请期待)

【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出分类预测模型&#xff08;全网首发&#xff0c;敬请期待&#xff09; (LGBM)是一种基于梯度增强决策树(GBDT)算法。 基于MATLAB的LightGbm即将研究测试上线。 下一个研究对象&#xff1a; ABCBOOST模型 一…

【大数据之Kafka】六、Kafka Broker工作流程

1 Zookeeper存储的Kafka消息 &#xff08;1&#xff09;启动zookeeper可客户端 [lyxhadoop102 zookeeper-3.5.7]$ bin/zkCli.sh&#xff08;2&#xff09;通过ls命令查看Kafka相关信息 [zk: localhost:2181(CONNECTED) 0] ls /kafka2 Kafka Broker总体工作流程 Zookeeper集…

在springmvc框架中加入tomcat插件失败(找不到插件)

思考问题 在仓库里找不到tomcat插件&#xff0c;与springmvc无关&#xff0c;应该是tomcat版本错最终结论&#xff1a;tomcat插件没用过&#xff0c;所以在idea中找不到&#xff0c;需要从maven仓库中下载解法&#xff1a; 1、复制后面括号里的仓库地址&#xff0c;在浏览器打开…

AMBA_AXI Protocol_基本读写事务

基本读写事务 1. 握手的过程 2. 信道信令要求 3. 通道之间的关系1. 握手的过程 当地址、数据或控制信息可用时&#xff0c;源端&#xff08;source&#xff09;产生VALID信号。终端&#xff08;destination&#xff09;生成READY信号&#xff0c;表示它可以接受该信息。传输只…