计网Lesson15 - TCP可靠传输

news/2025/1/20 7:12:05/

文章目录

  • 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.ppmy.cn/news/1364200.html

相关文章

Qt QWiget 实现简约美观的加载动画 第三季

&#x1f603; 第三季来啦 &#x1f603; 这是最终效果: 只有三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QVBoxLayout> #include <QGridLayout> int main(int argc, char *argv[]…

初学学习408之数据结构--数据结构基本概念

初学学习408之数据结构我们先来了解一下数据结构的基本概念。 数据结构&#xff1a;是相互之间存在一种或多种特定关系的数据元素的集合。 本内容来源于参考书籍《大话数据结构》与《王道数据结构》。除去书籍中的内容&#xff0c;作为初学者的我会尽力详细直白地介绍数据结构的…

【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析

Elasticsearch&#xff0c;作为当今最流行的开源搜索和分析引擎&#xff0c;以其分布式、可扩展和高可用的特性赢得了广大开发者的青睐。在Elasticsearch的分布式架构中&#xff0c;集群的稳健性和高可用性很大程度上依赖于其Master节点的选举机制。本文将深入剖析Elasticsearc…

(202402)多智能体MetaGPT入门1:MetaGPT环境配置

文章目录 前言拉取MetaGPT仓库1 仅仅安装最新版2 拉取源码本地安装MetaGPT安装成果全流程展示 尝试简单使用1 本地部署大模型尝试&#xff08;失败-->成功&#xff09;2 讯飞星火API调用 前言 感谢datawhale组织开源的多智能体学习内容&#xff0c;飞书文档地址在https://d…

Centos服务器部署前后端项目

目录 准备工作1. 准备传输软件2. 连接服务器 部署Mysql1.下载Mysql(Linux版本)2. 解压3. 修改配置4. 启动服务另一种方法Docker 部署后端1. 在项目根目录中创建Dockerfile文件写入2. 启动 部署前端1. 在项目根目录中创建Dockerfile文件写入2. 启动 准备工作 1. 准备传输软件 …

openssl3.2 - exp - buf to bio

文章目录 openssl3.2 - exp - buf to bio概述笔记bio_get_length调用端代码函数实现bio_to_buffer END openssl3.2 - exp - buf to bio 概述 不想让程序调用openssl API时, 有文件落地的动作. 如果程序有配置文件要用, 也是自己读文件到buffer, 然后转成BIO给openssl的相关有…

【Python编程+数据清洗+Pandas库+数据分析】

数据分析的第一步往往是数据清洗&#xff0c;这个过程关键在于理解、整理和清洗原始数据&#xff0c;为进一步分析做好准备。Python 语言通过Pandas库提供了一系列高效的数据清洗工具。接下来&#xff0c;该文章将通过一个简单的案例演示如何利用 Pandas 进行数据清洗&#xff…

MySQL之大表删除(基于硬链接方式)

在DROP TABLE的时候&#xff0c;所有进程不管是DDL还是DML都被HANG起&#xff1b;直到DROP结束才继续执行&#xff1b;这是因为INNODB会维护一个全局独占锁&#xff08;在table cache上面&#xff09;&#xff0c;直到DROP TABLE完成才释放。在我们常用的ext3,ext4&#xff0c;…