(考研湖科大教书匠计算机网络)第五章传输层-第七节:TCP可靠传输

news2024/9/20 1:11:42
  • 获取pdf:密码7281
  • 专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航

文章目录

  • 一:TCP可靠传输
  • 二:补充说明

本节对应视频如下

  • 【计算机网络微课堂(有字幕无背景音乐版)】:TCP可靠传输

一:TCP可靠传输

TCP可靠传输:TCP基于以字节为单位的滑动窗口来实现可靠传输

  • 发送方收到了一个来自接收方的确认报文段

    • 报文段首部中窗口字段取值为20,也就是接收方表明自己的接收窗口尺寸为20字节
    • 确认号字段的值为31,表明接收方希望收到下一个数据的序号为31,而序号30之前的数据已经全部正确接收了
      在这里插入图片描述
  • 发送方根据这两个字段的值构造出自己的发送窗口。发送方在没有收到接收方确认的情况下,可以把发送窗口内的数据依次发送出去,凡是已经发送过的数据,在未收到确认之前,都必须暂时保留,以便在超时重传时使用。发送窗口有后沿和前沿部分

    • 后沿:其后面部分是已发送并且已经收到确认的数据字节序号,这些数据字节显然不需要再保存在发送缓存中了,可以将其删除。其移动情况有两种可能
      • 不动:没有收到新的确认
      • 前移:收到了新的确认
    • 前沿:其前面部分是当前不允许发送的数据字节序号。其移动情况有三种可能
      • 通常是不断向前移动
      • 不动
        • 没有收到新的确认,对方通知的窗口大小也不变
        • 收到新确认但对方通知的窗口缩小,使发送窗口前沿正好不动
      • 向后收缩
        在这里插入图片描述
  • 假定发送方将发送窗口内序号31-41的数据封装在几个不同的报文段中发送出去

  • 此时,发送窗口的位置并没有改变,发送窗口内序号31-34的数据已经发送但没有收到确认,而序号42-50的数据是允许发送但还未被发送的
    在这里插入图片描述

  • 那么应该如何描述发送窗口的状态呢?如下图,可以使用三个指针P1、P2和P3分别指向相应的字节序号

    • 小于P1:已发送并且已经收到确认的部分
    • 大于等于P3:不允许发送
    • P3-P1:是当前发送窗口的尺寸
    • P2-P1:已发送但未收到确认的字节数量
    • P3-P2:允许发送但当前尚未发送的字节数(又称为可用窗口或有效窗口)
      在这里插入图片描述
  • 接收窗口尺寸为20,在接收窗口外面到30号为止的数据是已经发送确认并且已交付给应用进程的数据,因此无需保留这些数据,可将它们从接收缓存中删除;接收窗口内31-50号数据是允许接收的数据接收窗口外51号及其后续数据目前不允许接收
    在这里插入图片描述

  • 假设发送方之前发送的封装有32和33号数据的报文段到达了接收方,由于数据序号落在了接收窗口内,所以接收方接受他们,并将它们存入接收缓存

  • 但是它们是未按序到达的数据,因为31号数据还未到达,这有可能是丢了也有可能是滞留在了网络中的某处
    在这里插入图片描述

  • 接收方只能对按序到达的数据中的最高序号给出确认,因此接收方发出的确认报文段中的确认序号仍然为31,也就是希望收到31号数据

  • 窗口字段的值仍为20,表明接收方没有改变自己接收窗口的大小
    在这里插入图片描述

  • 发送方收到该确认报文后,发现这是针对31号数据的重复确认,就知道接收方收到了未按序到达的数据

  • 由于这是针对31号数据的第一个重复确认,因此并不会引起针对该数据的快重传

  • 另外,接收方窗口的窗口尺寸仍然为20,因此发送方保持自己的发送窗口也为20

  • 假设现在,封装有31号数据的报文段到达了接收方,接收方接受该报文段,将其封装的31号数据存入接收缓存
    在这里插入图片描述

  • 接收方现在可以将接收到的31-33号数据交付给应用进程,然后将接收窗口向前移动3个序号,并给发送方发送确认报文段

  • 该确认报文段中窗口字段的值仍然为20,表明接收方没有改变自己接收窗口的大小,确认号字段为34,表明接收方已经收到了序号33为止的全部数据
    在这里插入图片描述

  • 现在,假设又有几个数据报文段到达了接收方,他们封装有37、38和40号数据,这些数据的序号虽然落在接收窗口内,但它们都是未按序到达的数据,只能先暂存在接收缓存中
    在这里插入图片描述

  • 假设接收方先前发送的确认报文段到达了发送方,发送方接收后,将发送窗口向前滑动3个序号,发送窗口的尺寸保持不变,这样就有新序号51-53落入了发送窗口内,同时序号31-33移出了发送窗口

  • 现在可以将31-33号数据从发送缓存中删除了,因为已经收到了针对它们的确认
    在这里插入图片描述

  • 发送方继续将发送窗口内序号42-53的数据封装在几个不同的报文段中发送出去

  • 现在,发送窗口内的序号已经用完了,发送方在未收到接收方确认的情况下,不能再发送新的数据

  • 序号落在发送窗口内的已发送数据如果迟迟收不到接收方的确认,则会超时重传
    在这里插入图片描述

二:补充说明

  • 虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大
    • 网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的
    • 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸
  • 对于不按序到达的数据应如何处理,TCP并无明确规定
    • 如果接收方把不按序到达的数据一律丢弃, 那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利,因为发送方会重复传送较多的数据
    • TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程
  • TCP要求接收方必须有累积确认和捎带确认机制,这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上
    • 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源
    • TCP标准规定,确认推迟的时间不应超过0.5秒。若收到一连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认RFC 1122
    • 捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据
  • TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,一定要弄清楚是哪一方的窗口

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

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

相关文章

Navicat Premium 安装 注册

Navicat Premium 一.Navicat Premium的安装 1.暂时关闭windows的病毒与威胁防护弄完再开,之后安装打开过程中弹窗所有警告全部允许,不然会被拦住 2.下载安装包,解压 链接:https://pan.baidu.com/s/1X24VPC4xq586YdsnasE5JA?pwdu4vi 提取码…

Qt 线程

Qt中线程的解释: QThread(线程),代表一个在应用程序中可以独立控制的线程,可以和进程中的其他线程分享数据。QThread 对象管理程序中的一个控制线程。QThreads 在 run() 中开始执行。默认情况下,run&#…

DDFN: Decoupled Dynamic Filter Networks解耦的动态卷积

一、论文信息 论文名称:Decoupled Dynamic Filter Networks 论文:https://thefoxofsky.github.io/files/ddf.pdf 代码:https://github.com/theFoxofSky/ddfnet 主页:https://thefoxofsky.github.io/project_pages/ddf 作者团…

kubectl常用的命令

目录 安装 kubectl 一、命令自动补全 二、常用命令 1、查看所有pod列表 2、查看RC和service列表 3、显示Node的详细信息 4、显示Pod的详细信息, 特别是查看Pod无法创建的时候的日志 5、 根据yaml创建资源, apply可以重复执行,create不行 6、基于nginx.yaml…

实验室设计SICOLAB第三方检测中心实验室设计

第三方检测中心实验室怎么设计?详细设计内容有哪些?功能区域有哪些?仪器有哪些?要多少面积?第三方检测中心实验室是一种独立的实验室,为客户提供各种测试和分析服务。以下是一个第三方检测中心实验室的详细…

给你安利几款好用的谷歌浏览器插件

给你安利几款好用的谷歌浏览器插件前言一 Octotree 插件二 GitCodeTree 插件三 SourceGraph 插件四 GitZip 插件五 Enhanced GitHub 插件六 插件下载安装6.1 谷歌应用商店下载6.2 离线安装6.2.1 下载插件6.2.2 安装插件七 移除、启用、停用插件小结前言 GitHub是全球最大的代码…

Windows PowerShell中成功进入conda虚拟环境

本人操作系统是Windows10(输入命令cmd或在运运行中输入winver查看)在cmd命令行中大家都很熟悉,很方便进入到指定创建了的虚拟环境中,那么在PowerShell中怎么进入呢?比如在VSCode中的TERMINAL使用的是PowerShell&#x…

论文阅读笔记-DiffusionInst: Diffusion Model for Instance Segmentation

文章目录DiffusionInst: Diffusion Model for Instance Segmentation摘要介绍任务介绍实例分割的几种方法想法来源贡献方法整体结构Mask RepresentationDiffusionInst组成TrainingInference不足之处感悟DiffusionInst: Diffusion Model for Instance Segmentation 代码&#x…

魔兽世界经典怀旧服务器架设教程

准备工具:MySQL服务端服务器最重要的你需要会技术、要不然都瞎扯 给你东西你也看不懂。教程开始:安装MySQL并创建数据库安装MySQL社区版,并配置SQL服务器。安装SQLyog。利用其登录,创建realmd、characters、mangos、scriptdev2数据…

普通动物实验室规划设计SICOLAB

一、普通动物实验室普通动物实验室是进行动物实验的专门场所,用于研究疾病的发生机制,测试药物的安全性和有效性等。以下是普通动物实验室设计的一些细节和功能房间:(1)动物饲养区:用于饲养动物&#xff0c…

面试浅谈之 C++ STL 篇

面试浅谈之 C STL 篇 一 🏠 概述 HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是面试浅谈系列,收录在专栏面试中 😜😜😜 本系列将记录一些阿呆个人整理的面试题…

hydra常见端口服务穷举

目录 工具介绍 参数说明 官方示例 官方字典 ssh爆破 ftp爆破 mysql爆破 smb爆破 rdb爆破 http爆破 redis爆破 工具介绍 hydra 是一个支持众多协议的爆破工具,已经集成到KaliLinux中,直接在终端打开即可 参数说明 -l : 指定破…

Linux下安装MySQL8.0的详细步骤(解压tar.xz安装包方式安装)

Linux下安装MySQL8.0的详细步骤 第一步:下载安装配置 第二步:修改密码,并设置远程连接(为了可以在别的机器下面连接该mysql) 第三步:使用Navicat客户端连接 搞了一台云服务器,首先要干的活就是…

move_base代码解析(二)MoveBase::planThread

在第一章中第四步执行了planThread函数的线程启动&#xff0c;该步骤会调用planThread函数。这里不是通过函数调用的形式实现的&#xff0c;而是通过线程开关的形式实现的: boost::unique_lock<boost::recursive_mutex> lock(planner_mutex_);//给该线程上锁planner_goal…

117页数字化转型与产业互联网发展趋势及机会分析报告(PPT)

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 产业互联网是以机构组织为主体的…

CentOS7 Hive2.3.9 安装部署(mysql 8.0)

一、CentOS7安装MySQL数据库 查询载mariadb rpm -qa | grep mariadb卸载mariadb rpm -e --nodeps [查询出来的内容]安装wget为下载mysql准备 yum -y install wget在tools目录下执行以下命令&#xff0c;下载MySQL的repo源&#xff1a; wget -P /tools/ https://dev.mysql.…

网络编程学习一

1、初识网络编程2、网络编程三要素3、三要素&#xff08;IP&#xff09;4、IPV4的一些小细节5、Inetaddress类的使用package com.leitao.demo.network;import java.net.InetAddress; import java.net.UnknownHostException;/*** Description: TODO* Author LeiTao* Date 2023/2…

移动WEB开发三、flex布局

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

企业数字化管理是什么?如何建立企业数字化管理?

企业数字化管理是什么&#xff0c;如何建立企业数字化管理&#xff1f; 01 什么是企业数字化管理&#xff1f; 提到企业数字化管理&#xff0c;就不得不联想到机器自动化、业务流程自动化以及数字处理自动化这三个概念的区别&#xff1a; ​而抛开那些又臭又长的概念解读&…

支持域自适应的可解释网络改进药物-靶标预测

预测药物-靶点相互作用是药物发现的关键。最近基于深度学习的方法表现出良好的性能&#xff0c;但仍然存在两个挑战&#xff1a; 如何明确地建模和学习药物和靶标之间的局部相互作用&#xff0c;以更好地预测和解释&#xff1b;如何优化新型药物-靶标对预测的泛化性能。 在这…