《计算机网络——自顶向下编程》精炼——3.4.4

news2025/1/29 13:53:30

人生的旅途,前途很远,也很暗,名言警句励志。然而不要怕,不怕的人的面前才有路。——鲁迅

文章目录

  • 选择重传(SR)

选择重传(SR)

选择重传协议是另一种流水线rdt协议。与GBN协议最大的区别是当发送方收到一个失序分组时,会将其缓存而非直接丢掉,这样会避免GBN协议中由于可能回退太多导致重新发送的分组数量太大的问题。注意,在SR协议中,由于不会严格规定接收方必须按序接收分组,因此接收方和发送方所看到的窗口可能不会同步,这也会导致一些问题。下面是可能发生的一种情况,不要纠结于细节,只需要知道这种情况可能发生就可以:
在这里插入图片描述
发送方可能发生的事件有:

  • 上层调用:如果窗口内还有空余可用序号,则打包数据并发送;否则缓存或直接拒绝数据。
  • 发生超时事件:为了确保每次只重传一个分组(毕竟SR的一大优势就是避免重传数据太多),要为每个分组设置自己的计时器,当发生超时事件时只需重传超时分组就可以。
  • 收到ACK:发送方标记该分组为已被确认,当send_base序号所在的分组被确认时,可以将窗口向前挪动到下一个未被确认的分组处。

接收方可能发生的事件有:

  • 接收[rcv_base,rcv_base+N-1]的分组:发送ACK,缓存分组,如果是rcv_base处的分组,那么将窗口挪动到下一个未接收到的分组处并将这之前所有接收到的分组按序上传给上一层。
  • 接收[rcv_base-N,rcv_base-1]的分组:这个区间是发送方窗口可能在的区间,为了让接收方窗口尽量同步向前挪动,接收方发送一个ACK以使发送方将该分组标识为确认状态。
  • 其他情况:忽略分组即可。

注意,由于接收方先确认自己收到,然后告知发送方收到的消息(ACK),且ACK报文可能会丢失或损坏,造成信息不同步,因此发送方的窗口可能比接收方滞后,但绝不会领先。
最后我们要考虑可能会发送的一种特殊情况:
在这里插入图片描述
发送方发送了0,1,2三个分组,均被接收,但ACK报文在发送时丢失,造成双方信息不同步;发送方以为超时,重传分组0,但不幸的是,接收方窗口中正好有一个给分组0的位置,因此接收方会以为这是新的分组0,这造成错误。
为了规避这个错误,我们需要将序号空间扩展的足够大,这样的话就可以保证没有重复序号了。在没有重复序号的正常情况下,发送方最多会落后接收方一整个窗口长度,因为这样的话接收方就接收不到任何落在窗口内的分组了,只能等待发送方向前移动窗口。因此,序号空间只要大于等于窗口长度的两倍就可以。
请添加图片描述
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!

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

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

相关文章

微信小程序实现人脸识别(戴面具效果)

节前准备:文档: xr-frame 模型链接 (注明:来源于微信开放文档) 基础要点: 1.ar-system"modes:Face;camera:Front" ar-system 表示ar系统,camera表示相机(默认为后置Back,前置为Front) modes 表示模式,目前支持平面识…

DSBC176 3BSE019216R1​有综合保护器、电流表、电压表等器件​

​ DSBC176 3BSE019216R1 有综合保护器、电流表、电压表等器件 另一个方法是先对数组排序,然后取中间元素即可,因为如果某个元素的个数超过一半,那么数组排序后该元素必定占据数组的中间位置。 求数组中元素的最短距离 给定一个含有n个元素…

大数据分析案例-基于GBDT梯度提升决策树算法构建数据科学岗位薪资预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

中小企业CRM如何选型?

中小企业CRM如何选型?这就来分享一下! 中小企业客户关系管理系统(CRM)的选型需要考虑多个方面,包括成本,功能,易用性,扩展性和安全性。 预算:中小企业的预算通常有限,因此成本是选…

sudo unable to open read-only file system”的原因

此错误是由多种原因引起的,包括: 文件系统不一致。文件系统配置错误(/etc/fstab 文件中的错误条目)。由于各种原因(包括突然断电或电缆损坏)导致系统意外或突然关闭。在某些情况下,Windows 的双…

TDengine数据库与Mybatis-plus 多租户屏蔽

使用TDengine时序数据库特有的查询: select sum(gen_power_total) gen_power_totals,last(ts) xdate from power.device_0123456 where ts >2023-05-16 08:53:05 and ts < 2023-05-17 08:53:05 interval(1h) ; 错误提示…

UM2010一款单片集成低功耗 Sub-1GHz 射频收发器芯片

UM2010 是一款工作于 200MHz~960MHz 范围内的低功耗、高性能、单片集成的(G)FSK/OOK 无线收发机芯片。内部集成完整的射频接收机、射频发射机、频率综合器、调制解调器&#xff0c;只需配备 简单、低成本的外围器件就可以获得良好的收发性能。 芯片支持灵活可设的数据包格式&am…

Java使用Groovy执行脚本的使用,GroovyShell Matespace内存溢出解决

目录 业务场景 使用了工具Groovy 遇到Metaspace内存溢出的问题 解决方案 业务场景 类似工作流的场景&#xff0c;需要判断 参数&#xff0c;是否满足流转条件。 随便举个例子: 新增商品资料。 如果是普通商品&#xff0c;状态为"待审核"&#xff0c; 如果为…

mapbox加载多个大数据图层并且播放的技术优化路线

先看成果图 介绍 首先介绍一下我这个数据有15W的面数据&#xff0c;可以即时渲染&#xff0c;即时加载&#xff0c;然后播放。 技术路线 首先这种数量级的大数据&#xff0c;用别的二维API是绝对不可行的&#xff0c;arcgis和openlayer自动放弃&#xff0c;leaflet最多可以坚…

漏测分析的目的

漏测分析的目的 漏测分析是软件测试过程中的一项重要工作&#xff0c;旨在识别和分析测试工作中可能存在的遗漏或疏漏&#xff0c;从而进一步提高软件质量和可靠性。 漏测分析的主要目的是找出未被覆盖的测试用例&#xff0c;即未能被测试到的功能或者代码路径。通过漏测分析&a…

纷享销客PaaS平台之“业务对象定制”

如何填补产品与市场之间的鸿沟&#xff1f;一定程度的定制化是高效运营的基础。 今天的企业需要的不再是简单的几套标准化系统&#xff0c;而是一个能够支撑业务常态化调整、兼具高性能与可扩展的弹性平台。 纷享销客PaaS平台基于元数据模型驱动&#xff0c;提供零代码和低代码…

【FMC148】8 路500MSPS/1GSPS/1.25GSPS 采样率14 位AD 采集FMC 子卡模块-具有出色的同步采集性能(AD9680)

板卡概述 FMC148 是一款基于VITA57.4 标准的JESD204B 接口FMC 子卡模块&#xff0c;该模块可以实现8 路14-bit、500MSPS/1GSPS/1.25GSPSADC 采集功能。该板卡ADC 器件采用ADI 公司的AD9680 芯片,全功率-3dB 模拟输入带宽可达2GHz。该ADC 与FPGA 的主机接口通过16 通道的高速串…

多表联查及mybatis中@Results,@ResultMap注解的应用

在实际的项目中&#xff0c;为了保证数据的简洁和查询的效率&#xff0c;通常会到采用多表联查。 那么什么是多表联查呢&#xff1f; 一般查询语句都是针对一个表的&#xff0c;但是在关系型数据库中&#xff0c;表与表之间是有联系的&#xff0c;所以在实际应用中&#xff0…

Vue3实现酷炫打字机效果:让你的网站文字动起来

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、介绍1.1 什么是酷炫打字机效果1.2 Vue3框架简介二、创建Vue3项目2.1 安装Vue CLI2.2 创建Vue3项目2.3 运行项目

基于回归模型(贝叶斯岭回归、XGB、SVR等)销售额预测

博主在之前也写过较多的预测模型的文章&#xff0c;主要是基于LSTM&#xff0c;见下&#xff1a; 使用 Conv1D-LSTM 进行时间序列预测&#xff1a;预测多个未来时间步【优化】 使用 Conv1D-LSTM 进行时间序列预测&#xff1a;预测多个未来时间步 LSTM-理解 Part-1&#xff08;R…

Linux kernel 释出3.18.48,或将是3.18最后一版

Linux 稳定版内核维护者 Greg Kroah-Hartman 出人意料的宣布释出 Linux kernel 3.18 LTS的新版本&#xff0c;而 3.18 LTS 原计划于今年1月终止支持。Kroah-Hartman 释出了 3.18.48&#xff0c;修正了 3.18.47 和 3.18.27 的一个bug&#xff0c;他希望这个版本将是 3.18 分支的…

如何停止一个线程?

文章目录 停止线程的场景强制停止线程优雅停止线程使用标志位使用interrupt()方法 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 如何停止一个线程&#xff1f;这是本人面试中遇到…

Git之GitFlow工作流 | Gitflow Workflow(万字整理,已是最详)

目录 &#x1fa78; 写在前面 一、 GitFlow 介绍 1.1 什么是 GitFlow 1.2 GitFlow 常用分支说明 1.3 Git flow中的分支介绍 1.3.1 主要分支&#xff08;Master&#xff09; 1.3.2 开发分支&#xff08;Develop&#xff09; 1.3.3 功能分支&#xff08;Feature&#xff…

百度发布2023年Q1财报:营收311亿元,净利润大幅增长48%

北京时间5月16日&#xff0c;百度&#xff08;NASDAQ&#xff1a;BIDU&#xff0c;HKEX&#xff1a;9888&#xff09;发布了截至2023年3月31日的第一季度未经审计的财务报告。第一季度&#xff0c;百度实现营收311亿元&#xff0c;同比增长10%&#xff1b;归属百度的净利润&…

C++数据结构:哈希桶 -- 通过开散列的方法解决哈希冲突

目录 一. 什么是哈希桶 二. 哈希桶的实现 2.1 哈希表节点数据 2.2 特定Key值的查找find 2.3 哈希桶的扩容 2.4 数据插入操作insert 2.5 数据删除操作erase 2.6 哈希桶的析构函数 附录&#xff1a;哈希桶的实现完整版代码 一. 什么是哈希桶 之前的博客中我提到过&…