当前位置: 首页 > news >正文

计算机网络第3章-运输层(2)

可靠数据传输原理

可靠数据传输依靠数据在一条可靠信道上进行传输。

TCP也正是依靠可靠信道进行传数据,从而数据不会被丢失。

而实现这种可靠数据传输服务是可靠数据传输协议的责任

构造可靠数据传输协议

1.经完全可靠信道的可靠数据传输:rdt1.0

在协议rdt1.0下,底层信道是完全可靠的。

上图是rdt1.0发送方和接收方的有限状态机的定义。

经具有比特差错信道的可靠数据传输:rdt2.0

rdt2.0的底层信道是不可靠的,在该信道下分组中的比特可能会受损

考虑一下你自己是怎样通过电话口述一条长报文的。在通常情况下,报文接收者在 听到、理解并

记下每句话后可能会说“0K” 。如果报文接收者听到一句含糊不清的话时, 他可能要求你重复那句容

易误解的话。这种口述报文协议使用了肯定确认("OK”)与否定确认("请重复一遍)。这些 控制报文使

得接收方可以让发送方知道哪些内容被正确接收,哪些内容接收有误并因此需 要重复。在计算机

网络环境中,基于这样重传机制的可靠数据传输协议称为自动重传请求 (Automatic Repeat

reQuest, ARQ)协议。

ARQ协议还需要另外三种协议功能来处理比特差错的情况。

1.差错检测。需要一种机制以使接收方检测到何时出现了比特差错。

2.接收方反馈。因为发送方和接收方通常在不同端系统上执行,可能相隔数千英里,发送方要了解接收方的情况(此时分组是否被正确接收)的唯一途径就是让接收方提供明确的反馈信息给发送方。

3.重传。接收方收到有差错的分组时,发送方将重传该分组文。

              

在rdt2.0下,发送方有两个状态。

最左边的状态发送端协议正等待来自上层传下来的数据。

最右边的状态发送端协议等待接收一个ACK/NAK分组。

如果接受到ACK代表,分组已经被正确接收,此时关闭该状态,重新变为最左边的状态,对于这种行为,我们也称之为“停等”。

而接收方仍然只有一种状态,并且只会回答ACK/NAK(正确/错误),这取决于分组是否受损。

尽管如此,rdt2.0仍然存在很大问题,因为ACK或者NAK在返回的时候,也有可能受损!!!

下面考虑处理ACK和NAK时受损的三种可能性:

1.接收方可能并不能理解会大方的ACK和NACK是什么意思,显然这不可能

2.增加足够多的检验和比特,使发送方不仅可以检测差错,还可恢复差错。

对于会产生差错但不丢失分组的信道,这就可以直接解决问题。

3.第三种方法是重发分组,然而这种方法会向信道中引入亢余分组。

对于这些可能性,其实有一个简单方法(几乎所有现有的数据传输协议中,包括TCP、都采用了这种方法)是在数据分组中添加一个新字段,让发送方对其数据分组编号,即将发送数据分组的序号放在该字段。

于是,接收方只需要检查序号即可确定接收到的分组是否一次重传。

下面是rdt2.1的FSM描述,是rdt2.0的修订版,rdt2.1的发送方和接收方FSM的状态数都是以前的两倍。这是因为协议状态必须反映出目前(由发送方)正发送的分组或(在接收方)希望接受的分组序号是0还是1。

以上是rdt2.1发送方

以上是rdt2.1接收方。

经具有比特差错的丢包信道的可靠数据储传输rdt3.0

现在我们界定除了比特受损外,底层信道还会丢包。

一个处理这个问题的方法是:“重传”。

在发送方发送完一个分组后,如果长时间没有接收到ACK,则会自动重传。

问题关键在于,等待的时间该如何确定?

注意到,如果一个分组经历了特别大的时延,但是没有丢失,发送方仍然会重传一个分组,这就造成了亢余数据分组的问题,幸运的是,rdt2.2协议已经能处理亢余分组情况了。

因此为了实现时间的重传机制,需要一个倒计数定时器

在一个给定的时间量过期后,可中断发送方。

因此,发送方需要做到:

1.每次发送一个分组时,便启动一个定时器。

2.响应定时器中断。

3.终止定时器。

下图给出了rdt3.0的发送方FSM。

下面是rdt3.0在运行过程中四种协议运作的情况:

(rdt3.0有时被称为比特交替协议)

上图中的括号代表计时器建立时间以及终止时间。

流水线可靠数据传输协议

rdt3.0是一个共功能正确的协议,但是rdt3.0作为一个停等协议,会严重造成性能浪费!

为此,一种不以停等方式工作的协议诞生了,被称为:“流水线”。

流水线协议不以停等方式运行,允许发送方发送多个分组而无需等待确认,如下图所示:

但流水线技术也带来了下面三个影响:

1.必须增加序号范围,因为每个输送中的分组必须有一个唯一的序号。

2.协议的发送方和接收方两端也许不得不缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有被确认的分组。

3.所需序号范围和对缓冲的要求取决于数据传输协议如果处理丢失、损坏及延时过大的分组。

解决流水线的差错恢复有两种基本方法是:

回退N步(GBN)和选择重传(SR)。

回退N步

允许发送方发送多个分组而不需等待确认,但也受限于在流水线中未确认的分组数不能超过某个最大允许数N。

下图是一个发送方看到的GBN协议的序号范围:

其中我们将基序号(base)定义为最早未确认分组的序号,将下一个序号(nextseqnum)定义为

最小未使用的序号,即下一个待发分组的序号。

则可以将上面的序号范围分割成四段,在[0,base-1]段内的序号已经发送,在[base,

nextseqnum-1]为已发送但是未接收到响应的分组,在[nextseqnum,base+N-1]段内的序号是马上

要被立刻发送出的分组,大于base+N-1的序号是不能使用。

因此,这个序号范围可以被看作是一个长度为N的窗口。

通常随着协议的运行,该窗口会向前滑动,而N常被称为窗口长度。

GBN协议也被常常称为滑动窗口协议。

该窗口也可以想象为一个队列,不断地进出元素(未发送的分组序号/已发送且收到回应的分组序号)。

下图为GBN的扩展FSM图:

除此之外,GBN发送方必须响应三种类型的事件

1.上层的调用。当上层调用时,发送方检查发送窗口是否已满,若未满则产生一个分组并将其发送,并更新变量(base、nextseqnum)。若窗口已满,发送方则隐式的告诉上层该窗口已满。

2.收到一个ACK。在GBN协议中,对序号为n的分组的确认采取累积确认的方式,表明接收方已正确接收到一个窗口容量的分组。

3.超时事件。若出现超时,发送方重传所有已发送但还未被确认过的分组。

而接收方的动作也很简单,如果一个序号为n的分组被正确的接收到,并且按序接收到(即上次交付的分组序号为n-1),则接收方为分组n发送一个ACK。

其它所有情况下,接收方会丢弃该分组。

选择重传

在上面所说的GBN协议潜在地允许发送方用多个分组"填充流水线",因此避免了停等协议中所提到

的信道利用率的问题。但是GBN本身也有一些情况存在着性能问题,尤其是当窗口长度和宽带时

延积都很大时,在流水线中会有很多分组处于重传状态。这会导致接收到的数据很断断续续的,严

重影响使用感。

而选择重传(SR)只会选择性的重传它觉得可能出错或出错的位置,具体的原理是,当发现出错

后,接收方会缓存出错序号的所有分组,直到该分组之前的正确分组被传送过来,这一批分组才会

按照次序被传送给上层。

当我们面对有限序号范围的现实时,发送方和接收方窗口间缺乏同步会产生严重的后果。

下面两个例子都代表了接收方无法区别新传来的分组是上一次传输的重传副本还是新一次传来分组的起始。

下面我们来看一个对于该节知识点的一个总回顾图片。

相关文章:

计算机网络第3章-运输层(2)

可靠数据传输原理 可靠数据传输依靠数据在一条可靠信道上进行传输。 TCP也正是依靠可靠信道进行传数据,从而数据不会被丢失。 而实现这种可靠数据传输服务是可靠数据传输协议的责任 构造可靠数据传输协议 1.经完全可靠信道的可靠数据传输:rdt1.0 在…...

【微信小程序】实现投票功能(附源码)

一、Vant Weapp介绍 Vant Weapp 是一个基于微信小程序的组件库,它提供了丰富的 UI 组件和交互功能,能够帮助开发者快速构建出现代化的小程序应用。Vant Weapp 的设计理念注重简洁、易用和高效,同时提供灵活的定制化选项,以满足开发…...

Pytorch入门实例的分解写法

数据集是受教育年限和收入,如下图 代码如下 import torch import numpy as np import matplotlib.pyplot as plt import pandas as pddata pd.read_csv(./Income.csv)X torch.from_numpy(data.Education.values.reshape(-1,1).astype(np.float32)) Y torch.from_numpy(data…...

Google单元测试sample分析(一)

本文开始从googletest提供的sample案例分析如何使用单元测试, 代码路径在googletest/googletest/samples/sample1.unittest.cc 本文件主要介绍EXPECT*相关宏使用 EXPECT_EQ 判断是否相等 EXPECT_TRUE 是否为True EXPECT_FALSE 是否为False TEST(FactorialTest, N…...

requests 实践

Requests 常用参数 method: 请求方式 get,或者 post,put,delete 等 url : 请求的 url 地址 接口文档标注的接口请求地址 params:请求数据中的链接,常见的一个 get 请求,请求参数都是在 url 地址…...

UI设计公司成长日记2:修身及持之以恒不断学习是要务

作者:蓝蓝设计 要做一个好的UI设计公司,不仅要在能力上设计能力一直(十几年几十年)保持优秀稳定的保持输出,以及心态的平和宽广。创始人对做公司要有信心,合伙人之间要同甘共苦,遵守规则,做好表…...

辅助驾驶功能开发-功能规范篇(23)-2-Mobileye NOP功能规范

5.2 状态机要求 5.2.1 NOP/HWP 状态机 NOP/HWP状态机如下所示: 下表总结了这些状态: 状态描述Passive不满足功能条件,功能无法控制车辆执行器。Standby满足功能条件。该功能不是由驾驶员激活的。功能不控制车辆执行器。Active - Main功能由驾驶员激活。功能是控制…...

React中如何提高组件的渲染效率

一、是什么 react 基于虚拟 DOM 和高效 Diff算法的完美配合,实现了对 DOM最小粒度的更新,大多数情况下,React对 DOM的渲染效率足以我们的业务日常 复杂业务场景下,性能问题依然会困扰我们。此时需要采取一些措施来提升运行性能&…...

springboot+mybatis3.5.2动态查询某一字段在某一段时间内的统计信息(折线图)

需求: 动态查询某一统计字段在一段时间内的统计折线图信息 controller层 ApiOperation(value "getStatisticDetail", notes "统计折线图")GetMapping("/detail")ResponseStatus(HttpStatus.OK)AccessLogAnnotation(ignoreRequestA…...

关于本地项目上传到gitee的详细流程

如何上传本地项目到Gitee的流程: 1.Gitee创建项目 2. 进入所在文件夹,右键点击Git Bash Here 3.配置用户名和邮箱 在gitee的官网找到命令,注意这里的用户名和邮箱一定要和你本地的Git相匹配,否则会出现问题。 解决方法如下&…...

MarkDown详细入门笔记

本帖整理了MarkDown的入门学习笔记~ 一.介绍 Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用。 诸如微信公众平台、CSDN博客、还有Typora中写文档的部分,均涉及到MD的功能~ 它…...

算法——贪心算法

贪心算法(Greedy Algorithm)是一种算法设计策略,通常用于解决组合优化问题,其核心思想是在每一步都选择当前状态下最优的解,而不考虑之后的步骤。贪心算法在每一步都做出局部最优选择,期望通过一系列局部最…...

102.linux5.15.198 编译 firefly-rk3399(1)

1. 平台: rk3399 firefly 2g16g 2. 内核:linux5.15.136 (从内核镜像网站下载) 3. 交叉编译工具 gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 4. 宿主机:ubuntu18.04 5. 需要的素材和资料&#xff…...

易点易动固定资产管理系统:多种盘点方式助力年终固定资产盘点

年末固定资产盘点是企业管理中一项重要而繁琐的任务。为了帮助企业高效完成年终固定资产盘点工作,易点易动固定资产管理系统提供了多种盘点方式。本文将详细介绍易点易动固定资产管理系统的多种盘点方式,展示如何借助该系统轻松完成年终固定资产盘点&…...

C# Winform编程(10)Chart图表控件

Chart控件 Chart控件Chart属性详述Chart属性设置图表样式属性数据样式属性图例样式图标区样式SeriesChartType类型 Chart控件鼠标滚轮事件特殊处理Series绑定数据演示代码鼠标滚轮缩放图表示例参考引用 Chart控件 Chart控件是微软自带的一种图形可视化组件,使用简单…...

群狼调研(长沙产品概念测试)|如何做新品上市满意度调研

新品上市满意度调研是一种重要的市场研究方法,它通过收集和分析消费者对新产品的态度、购买意愿和满意度等方面的数据,帮助企业了解消费者的需求和期望,发现新产品的问题和不足,从而为产品改进提供有力的数据支持。群狼调研&#…...

Lua与C++交互

文章目录 1、Lua和C交互2、基础练习2.1、加载Lua脚本并传递参数2.2、加载脚本到stable(包)2.3、Lua调用c语言接口2.4、Lua实现面向对象2.5、向脚本中注册c的类 1、Lua和C交互 1、lua和c交互机制是基于一个虚拟栈,C和lua之间的所有数据交互都通…...

Ubuntu安装pyenv,配置虚拟环境

文章目录 安装pyenvpyenv创建虚拟环境一般情况下创建虚拟环境的方法 安装pyenv 摘自:文章 pyenv可以管理不同的python版本 1、安装pyenv的依赖库 # 执行以下命令安装依赖库 # 更新源 sudo apt-get update # 更新软件 sudo apt-get upgradesudo apt-get install ma…...

【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步

MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步 前提介绍MySQL和ElasticSearch的同步双写优点缺点针对于缺点补充优化方案 MySQL和ElasticSearch的异步双写优点缺点 定时延时写入ElasticSearch数据库机制优点缺点 开源和成熟的数据迁移工具选型Logsta…...

什么是React中的高阶组件(Higher Order Component,HOC)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

NEFU离散数学实验3-递推方程

相关概念 递推方程是指一种递归定义,它将问题拆分成更小的子问题,并使用这些子问题的解来计算原问题的解。离散数学中,递推方程通常用于描述数列、组合问题等。 以下是一些递推方程相关的概念和公式: 1. 递推公式:递推…...

如何为你的地图数据设置地图样式?

地图样式设置是GIS系统中非常重要的功能模块,水经微图Web版本最近对符号样式功能模块进行了升级。 你可以通过以下网址直接打开访问: https://map.wemapgis.com 现在我们为大家分享一下水经微图Web版中,如何为你标注的地图数据设置地图样式…...

解决visual studio Just-In-Time Debugger调试

解决visual studio Just-In-Time Debugger调试 网上流行很多方法,最后一直不行,其实有最简单的方法比较实用 方法一:把 C:\WINDOWS\system32\vsjitdebugger.exe,删除了,若怕出问题,可以把它改名或者做个rar文件暂时保留…...

Uservue 中 keep-alive 组件的作用

目录 前言 用法 代码 理解 keep-alive 是 Vue.js 中一个内置的组件,它能够将不活动的组件实例保存在内存中,防止其被销毁,以便在后续需要时能够快速重新渲染。这个功能在一些需要频繁切换但不希望每次都重新渲染的场景中非常有用&#xf…...

gitlab查看、修改用户和邮箱,gitlab生成密钥

查看用户、邮箱 git config user.name git config user.email 修改用户、邮箱 git config --global user.name “xxx” git config --global user.email “xxxxxx.com” 生成ssh密钥 ssh-keygen -t rsa -C “xxxxxx.com” 查看SSH秘钥 cat ~/.ssh/id_rsa.pub 将秘钥复制&…...

python操作MySQL、SQL注入问题、视图、触发器、事务、存储过程、函数、流程控制、索引(重点)

python操作MySQL(重要) SQL的由来: MySQL本身就是一款C/S架构,有服务端、有客户端,自身带了有客户端:mysql.exe python这门语言成为了MySQL的客户端(对于一个服务端来说,客户端可以有很多) 操作步骤: …...

这一年的资源

#线性代数 https://textbooks.math.gatech.edu/ila/one-to-one-onto.html行业规范https://xlinux.nist.gov/dads/https://www.dhs.gov/publications产业群链基金会 https://www.cncf.io/谷歌 https://opensource.google/projects网飞 高德纳 https://www.gartne…...

从【臀部监控】到【电脑监控软件】,企业如何在隐私权与管理权博弈中找到平衡

【臀部监控】 依稀记得在2021年初某个高科技产品的爆火,惹得各大媒体网站争相报道。 起因是一位杭州网友在论坛上发帖,不久前公司给员工发放了一批高科技坐垫。 这个坐垫能自动感应心跳、呼吸在内的诸多人体数据,还能提醒人保持正确坐姿以及…...

数据库简介和sqlite3安装

数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。 严格意义上来说,"数据库"不能被称之为"数据库",而…...

颈肩肌筋膜炎做什么检查

颈肩肌筋膜炎症状 颈肩背部广泛疼痛酸胀沉重感、麻木感,僵硬、活动受限,可向后头部及上臂放散。疼痛呈持续性,可因感染、疲劳、受凉、受潮等因素而加重。查体见颈部肌紧张,压痛点常在棘突及棘突旁斜方肌、菱形肌等,压…...