计网Lesson15 - TCP可靠传输

文章目录

  • 1. 停止等待ARQ协议
  • 2. 连续ARQ协议与滑动窗口协议



1. 停止等待ARQ协议

  • ARQ(Automatic Repeat–reQuest)自动重传请求

  • 几种重传情况

    • 发送端丢失
      发送方过久没有接收到接收方的确认报,这种情况会触发超时重传机制,发送方重新发送报文。

    • 确认报丢失
      发送方依然没有收到确认报,所以会触发重传,而接收方接收到两个重复的包,直接将后来的包丢掉。

    • 延迟确认
      发送方迟迟没收到确认报,于是重传,重传的接收到确认报了,之后前面的确认报才来,这时候无事发生。

  • 问题:若有个包重传了N次还是失败,会⼀直持续重传到成功为止吗?

    答:在网络通信中,如果一个数据包重传了N次仍然失败,它是否会一直持续重传直到成功,这取决于具体的协议和设置。例如,在TCP(传输控制协议)中,重传5次还未成功就会发送RST报文,连接将被断开。这是为了防止网络拥塞和无效通信。


2. 连续ARQ协议与滑动窗口协议

  • 在停止等待协议的基础上改进,发送方发一个窗口大小内的数据,接收方只回一次确认报。
  • 如果接收窗口最多能接4个包,但发送方只发了2个包:
    • 发送方可能一次发送一个窗口的包,也有可能不发,不一定的,得看发送方的协议约定。
    • 接收方的确认报只确认收到两个包。
  • 每个包多大,这个在一开始建立连接的时候就会约定好
    • 就是选项段的第一个:最大报文段长度(Maximum Segment Size)
    • 如果建立连接时约定的MSS大小不一,取最小的。
  • 最大报文段长度在一开始就约定好了
  • 窗口的大小并非固定死的,是由接收端控制的,这关系到流量控制:
    • 接收端如果缓存区不够用或者想控制流量,就在确认报中将窗口大小改小。
  • 序号和确认号
    • 当发送方发出一连串数据,但是其中丢了几个包,接收方会确认第一个丢失的包的位置(ACK),之后会在选项中标注出哪些包丢失了,也就是选择性确认技术(SACK)。

      • 发送方会滑到ACK的位置,开始重新发送这个窗口内没有传输过的包,传过的不会再发。
    • 此处应当辨析超时重传与连续ARQ协议:为什么超时就整段重传,而这个ARQ滑动窗口仅仅只重传未发送的包?

      • 超时重传:在TCP中,传输层分包超时会导致包重传;在给包分片的IP层中,片超时(或丢失)会直接将整个包的片丢掉不管,然后发送方触发超时重传。
      • 连续ARQ:只重发丢掉的包。
      • 为什么:因为网络层是在路由之间传输的,如果一直等待错包重传很占用路由的空间,所以选择直接扔掉重传;而传输层可以看作是管道直连(网络层掩盖了底层逻辑),所以占用的空间资源是各主机的,并无太大影响。

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

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

相关文章

Facebook的未来蓝图:数字社交的下一个篇章

在数字化时代,社交媒体已经成为人们日常生活中不可或缺的一部分。而在众多的社交媒体平台中,Facebook一直处于领先地位,不断探索着数字社交的新领域和新形式。随着科技的不断发展和社会的不断变革,Facebook正在谱写着数字社交的未…

JSON:简介与基本使用

目录 什么是JSON? JSON的基本结构 JSON的基本使用 在JavaScript中使用JSON 创建JSON对象 解析JSON字符串 生成JSON字符串 在其他编程语言中使用JSON 总结 什么是JSON? JSON,全称为JavaScript Object Notation,是一种轻量…

lv21 QT入门与基础控件 1

1 QT简介 QT是挪威Trolltech开发的多平台C图形用户界面应用程序框架 典型应用 2 工程搭建 2.1 新建ui工程 不要写中文路径 2.1 不勾选UI(主讲) 3 QT信号与槽机制 语法:Connect(A, SIGNLA(aaa()), B, SLOT(bbb()))…

代码随想录算法训练营day59 || 583. 两个字符串的删除操作,72. 编辑距离

动态规划之子序列,还是为了编辑距离做铺垫 | LeetCode:583.两个字符串的删除操作_哔哩哔哩_bilibili 动态规划终极绝杀! LeetCode:72.编辑距离_哔哩哔哩_bilibili 583. 两个字符串的删除操作 思路:返回使得s与t相同所…

k8s中基于alpine-3.7.0的pod无法解析域名问题

现象 在pod内无法解析指定域名 # 执行ping bash-4.4# ping xx-xx-svc-0.xxx-fcp.svc.cluster.local ping: bad address xx-xx-svc-0.xxx-fcp.svc.cluster.local排查经过 # 执行nslookup bash-4.4# nslookup xx-xx-svc-0.xxx-fcp.svc.cluster.local Server: 172.43.0…

27.HarmonyOS App(JAVA)可复用列表项的ListContainer

可复用列表项的ListContainer 简短的列表可以通过定向布局实现,但是如果列表项非常多,则使用定向布局就不再合适。如需要创建50个列表项的列表,那么用定向布局实现至少需要创建50个以上的组件了。然而,限于设备屏幕大小的限制,绝大多数组件不会显示在屏幕上,却会占据大量的内存…

C#使用QQ邮箱发送邮件

简介 在c#中发送邮箱我们只需要引入官方提供的命名空间 System.Net.Mail ,这个命名空间包含了一系列类,用于创建、配置和发送电子邮件消息。 这个命名空间中的一些主要类包括: MailMessage:表示一个电子邮件消息,包…

计网自顶向下:网络应用层【Web应用与HTTP协议】

目录 Web应用Web页URLWorld Wide Web 超文本传输协议——HTTP超文本C/S结构报文请求报文响应报文HTTP响应状态码try:在命令行里手工给web服务器发送请求 http连接的两种类型非持久(http1.0)持久(http1.1)▷ 流水线▷ 非…

重新安装VSCode后,按住Ctrl(or Command) 点击鼠标左键不跳转问题

重新安装VSCode后,按住Ctrl(or Command) 点击鼠标左键不跳转问题 原因:重新安装一般是因为相应编程语言的插件被删除了或还没有下载。 本次是由于Python相关的插件被删除了,因此导致Python无法跳转。 解决办法 在vs…

告别枯燥代码,Matplotlib学习网站让图表活起来!

介绍:Matplotlib是一个广泛使用的Python绘图库,专门用于创建高质量的2D图形。 Matplotlib的特点包括: 丰富的图表类型:支持多种图表类型,如线图、散点图、柱状图、直方图等,满足不同的数据可视化需求。 高度…

MySQL数据库进阶第五篇(锁)

文章目录 一、锁的概述二、全局锁三、表级锁四、元数据锁(meta data lock, MDL)五、意向锁六、行级锁七、行锁(Record Lock)八、间隙锁(Gap Lock)九、临键锁(Next-Key Lock)十、锁总…

beego代理前端web的bug

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、beego代理前端web的bug总结 一、beego代理前端web的bug *报错,为web压缩包index.html里面的注释被错误解析,删掉就行 2024/02/22 10:2…

低代码开发:数字赋能智能制造的未来

随着数字化转型的深入推进,智能制造已经成为我国制造业发展的重要方向。在这个过程中,低代码开发作为一种高效、便捷的编程方式,正逐渐成为企业数字化转型的得力助手。本文将探讨低代码开发在智能制造领域的应用及价值。 智能制造的挑战 随着…

C++面试基础 -操作系统-架构能力:如何高效利用CPU缓存

目录 局部性原理(Locality Principle) 数据结构的布局 缓存友好的算法 缓存大小和关联性 避免随机访问 使用缓存友好的数据结构 总结 高效利用CPU缓存是编写高性能C代码的关键之一。以下是一些在面试中可能会讨论到的方法。 局部性原理(Locality Principle) 时间局部性…

【C++】类和对象(2)

目录 1. 初始化列表 2.explicit关键字 3. Static成员 3. 友元 3.1友元函数 3.2友元类 4. 内部类 5.匿名对象 1. 初始化列表 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值,但是这个过程并不能称为对对…

3,设备无关位图显示

建立了一个类Dib Dib.h #pragma once #include “afx.h” class CDib :public CObject { public: CDib(); ~CDib(); char* GetFileName(); BOOL IsValid(); DWORD GetSize(); UINT GetWidth(); UINT GetHeight(); UINT GetNumberOfColors(); RGBQUAD* GetRGB(); BYTE* GetDat…

flutter sliver 多种滚动组合开发指南

flutter sliver 多种滚动组合开发指南 视频 https://youtu.be/4mho1kZ_YQU https://www.bilibili.com/video/BV1WW4y1d7ZC/ 前言 有不少同学工作中遇到需要把几个不同滚动行为组件(顶部 appBar、内容固定块、tabBar 切换、tabBarView视图、自适应高度、横向滚动&a…

Linux开发:pam6 check_user示例

linux-pam里提供了一个简单的pam应用示例:check_user #include <security/pam_appl.h> #include <security/pam_misc.h> #include <stdio.h>static struct pam_conv conv = {misc_conv,NULL };int main(int argc, char *argv[]) {pam_handle_t *pamh=NULL;…

软硬协同设计下的飞天盘古,是如何降低存储系统开销的?

云布道师 经过十几年的技术演进&#xff0c;阿里巴巴已经实现了统一存储的目标——即以“飞天盘古”系统作为统一底座&#xff0c;通过标准化、服务化和开放化的方式建立了完整的存储产品和服务体系&#xff0c;服务广大内部和外部客户。 “万古乾坤心上辟&#xff0c;于令日…

正大国际:董宇辉最治愈的六句话

关于努力 努力不是为了证明自己多优秀&#xff0c; 而是在意外和不可控的因素来临时&#xff0c; 那些平常所努力积淀的涵养和能力&#xff0c; 可以成为抗衡一切风雨的底气。 关于焦虑 焦虑是对的。 焦虑是因为你想做得更好&#xff0c; 说明你追求高&#xff0c; 说明你眼界…