TCP协议的相关特性(续)

TCP协议的相关特性

  • 🔎滑动窗口
  • 🔎流量控制
  • 🔎拥塞控制
  • 🔎延时应答
  • 🔎捎带应答
  • 🔎面向字节流(粘包问题)
  • 🔎异常情况
  • 🔎总结

关于 确认应答 超时重传, 连接管理
请参考: 点击这里

🔎滑动窗口

在这里插入图片描述

上图展示了一个固定大小为4个格子的窗口
不断的向前滑动, 每次向前滑动1个格子, 窗口的大小保持不变


在这里插入图片描述

按数据包进行确认应答

采用逐条发送数据的方式传输数据
这种方式花费了大量时间等待ACK

在这里插入图片描述

按滑动窗口方式并行处理

采用批量发送数据的方式传输数据(固定窗口大小)
每次收到一条ACK 就继续发送下一条数据(保持窗口的大小不变, 向前滑动)

通过滑动窗口的方式进行传输数据, 可以提高数据的传输效率

滑动窗口是在批量传输大量数据时, 才会采取的措施
如果数据量较少, 还是会采用逐条发送的方式传输数据

🔎流量控制

滑动窗口的窗口越大, 意味着批量发送的数据越多, 整体的传输速度也就越快

但如果发送的太快, 超出了接收方的接收能力(接收方的接收缓冲区满了)
此时继续发送, 数据就会丢包
这种情况就难免有些得不偿失, 还不如发送的慢些(流量控制)

流量控制的本质就是通过接收方来限制发送方的发送速度

在这里插入图片描述

当ACK 为1时(有效状态), 此时的窗口大小(16)位就会生效
窗口大小的值就是接收方建议发送方发送的窗口大小
(接收方将接收缓冲区的剩余空间作为窗口大小)

举个栗子🥝

在这里插入图片描述

当发送方发现接收方的接收缓冲区满了之后, 就会暂停发送
但是仍然会每隔一段时间发出一个窗口探测报文
如果探测一会发现接收方的接收缓冲区腾出空间了, 就会继续发送

在这里插入图片描述

🔎拥塞控制

在这里插入图片描述

如果说流量控制表示的是接收方的处理能力
那么拥塞控制表示的则是传输路径的处理能力

传输路径上任何一个设备的处理能力遇到瓶颈, 都会对整体的传输效率产生影响
而拥塞控制做的就是衡量中间节点的传输处理能力(找出木桶效应中那块最短的木板)

在这里插入图片描述
图片来自网络

拥塞控制, 衡量中间节点的传输能力
但每次传输的传输路径不同, 导致了中间路径上的节点个数不同, 每个节点的情况也有可能不同
而且网络的拥堵情况不是一成不变的(可以理解为一天之中不可能所有时间都会出现早高峰)
所以每次通过实验的方式, 找到合适的发送速率

根据上图所示进行实验
●拥塞窗口: 按照多大的速率发送数据(暂时不考虑流量控制的情况)
●传输轮次: 第几次发送(第一次发送, 第二次发送, 第三次发送…)
●慢开始: 刚开始传输, 会给一个非常小的窗口(传输速度较慢)
●指数规律增长: 每次增长的速度翻倍, 增长速度非常快(2 --> 4 --> 8 --> 16 --> 32…)
●ssthresh的初始值: 当指数增长达到阈值时, 就会变成线性增长(避免一下超过上限很多, 采用逐渐达到上限的方式)
●网络拥塞: 当线性增长增长到一定程度(出现丢包), 认为当前的窗口大小达到了上限, 就会在下一轮传输时开启新的慢开始

实验流程描述
(1)先以较低的传输速度开始传输(慢开始)
(2)然后以指数级的增长速度传输
(3)当传输速度达到阈值时, 传输速度就会转变为线性增长(为了避免一下超过上限很多)
(4)当线性增长到一定程度, 会出现丢包的现象(认为当前窗口, 达到当前路径的传输上限)
(5)继续新一轮的慢开始
注意: 下一轮的阈值为上一轮的上限的一半(第二轮慢开始的阈值为第一轮慢开始的上限值的一半)

拥塞窗口(拥塞控制实验出来的窗口)
流控窗口(流量控制产生的窗口)
滑动窗口的大小 = Math.min(拥塞窗口, 流控窗口)

🔎延时应答

在这里插入图片描述
读取到数据立即返回ACK, 此时ACK 里面带有的窗口大小设为N
当等待片刻, 再去返回ACK, 此时ACK 里面带有的窗口大小, 大概率>N
(等待过程中, 应用程序消费接收缓冲区中的数据)

延时应答的效果
就是通过延时, 让接收方的应用程序利用延时的这段时间多读取一些数据
这样返回的ACK 携带的窗口就会大一些, 这样发送方的发送效率就会快一些(仍然满足流量控制)

🔎捎带应答

捎带应答是基于延时应答的一种模式

在这里插入图片描述
基于延时应答
此时的 I am fine, thank you(ACK)会稍等一会再发送
就可能会把 And you捎带着一起发送(捎带应答)

🔎面向字节流(粘包问题)

当A 给B 连续发了多个应用层数据报之后
这些数据就累积到B 的接收缓冲区, 紧紧的挨在一起
此时B 的应用程序读取数据时, 就难以区分从哪到哪是一个完整的应用层数据报

举个栗子🥝

在这里插入图片描述
在这里插入图片描述
同学B
有可能将您看看我是那人吗
理解为(1)您看看我 (2)是那人吗

此时同学B 的接收缓冲区就难以区分从哪到哪是一个完整的应用层数据报

解决方法
(1)定义分隔符(类似于我们将每句话的结尾加上个句号, 代表一句话的结束)
(2)约定长度(类似于约定一句话的最长范围, 超过这个范围, 就不是这句话了)

🔎异常情况

(1)进程关闭 / 进程崩溃

进程虽然没了, 但是连接还在, 仍然可以四次挥手(断开连接)

(2)主机关闭(正常流程关机)

主机关闭会先关闭所有的用户进程
(可能进行完整的四次挥手, 也可能无法进行完整的四次挥手)

a. 进行完整的四次挥手
正常断开连接

b. 未进行完整的四次挥手
比如当对方发送fin, 还未来得及ACK 就关机了
此时对方就会超时重传fin, 重传几次之后, 发现都没有ACK, 就会尝试重置连接
如果还不行, 就会断开连接

(3)主机断电(非正常流程关机)

机器瞬间关闭, 来不及挥手
有两种可能: a. 对方是发送方 b. 对方是接收方

a. 对方是发送方
对方发送fin, 收不到ACK
超时重传fin, 重传几次之后, 发现都没有ACK, 尝试重置连接
如果还不行, 就会断开连接

b. 对方是接收方
对方无法知道发送方是直接没了还是没来的及发送新的数据
于是引出了“心跳包”

心跳包的属性: (1)周期性的 (2)没有心跳了, 表示挂了
于是接收方通过定期给发送方发送心跳包判断接收方是否还存在
如果存在, 等待发送方发送数据
如果不存在, 断开连接

(4)网线断开

这种情况与(3)主机断电相同

🔎总结

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【场景生成与削减】基于蒙特卡洛法场景生成及启发式同步回带削减风电、光伏、负荷研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

无人机遥感影像应用

目录 一、无人机遥感技术 二、无人机遥感影像数据生产 三、无人机遥感影像应用 一、无人机遥感技术 1.无人机遥感系统组成 1.1无人机遥感系统组成—无人机平台 1.2无人机遥感系统组成—传感器 2.无人机遥感技术的特点 高时效性:准确并快速获取地表数据 高分辨率…

[强化学习]学习路线和关键词拾零

强化学习学习方法和路线 学习路线 先从基础教材开始,构建RL的知识框架,熟悉关键名词和公式推导,扩展到Model-Free的Value-Based和Policy-Based方法,同时参考github的代码练习。接下来精读几篇经典论文,如DQN,PPO等。…

Python高光谱遥感数据处理与机器学习

Python高光谱遥感数据处理与机器学习 第一章、高光谱基础 高光谱遥感简介 什么是高光谱遥感? 高光谱遥感为什么重要? 高光谱遥感与其他遥感技术的区别是什么? 高光谱遥感的历史和发展 高光谱传感器与数据获取 高光谱传感器类型 如何获…

ai改写句子软件-ai改写

AI免费伪原创:助力网站内容升级 您是否曾经为网站优化而烦恼,无论是内容更新还是SEO优化,都需要大量的时间和精力。但是,您是否知道,现在有一款能够使用AI技术来帮助您完成这些任务,而且还是免费的呢&…

瑞吉外卖-项目笔记

文章目录 1.业务开发day011.软件开发整体介绍2.项目整体介绍:star:3.开发环境搭建4.登录功能:star4.1代码实现 5.退出功能6.页面效果出现 day021.完善登录功能2.新增员工功能 1.业务开发 day01 1.软件开发整体介绍 2.项目整体介绍⭐️ 后端:管理菜品和…

基于web的病号康复训练系统asp.net+sqlserver+C#

本系统主要内容分为病号管理模块,康复师管理模块,管理员管理模块等三大模块 1,病号管理模块主要分为:用户管理,在线问答,在线预约,用户中心,信息查询. 2. 康复师管理模块主要有:康复师信息管理,病人信息管理,预约信息管理,留言信息管理,训练计…

< elementUi组件封装: 通过 el-tag、el-popover、vue动画等实现公告轮播 >

文章目录 👉 前言👉 一、效果演示👉 二、实现思路👉 三、实现案例往期内容 💨 👉 前言 在 Vue elementUi 开发中,遇到这么一个需求,要实现公告轮播的效果。说实话,一开…

C++、STL标准模板库和泛型编程 ——迭代器、 算法、仿函数(侯捷)

C、STL标准模板库和泛型编程 ——迭代器、 算法、仿函数 (侯捷) 迭代器iterator_category 算法accumulatefor_eachreplacecountfindsortbinary_search 仿函数 functors(六大部件中最简单的一种!) 使用一个东西,却不明白它的道理&a…

Android类似微信首页的页面开发教程(Kotlin)二

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

【Vue】学习笔记-Vue生命周期

引出生命周期 生命周期 a.又名生命周期回调函数、生命周期函数、生命周期钩子 b.是什么:vue 在关键时刻帮助我们调用一些特殊名称的函数 c.生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的 d.生命周期函数中的this指向是vm或组件实…

拷贝构造与深浅拷贝

文章目录 一、拷贝构造函数二、拷贝初始化三、深浅拷贝 一、拷贝构造函数 如果一个构造函数的第一个参数是自身类型的引用,而且任何额外参数都有默认值,则此构造函数是拷贝构造函数。 class person { public: person(); //默认构造函数 pe…

米文动力 EVO Orin 刷机和克隆操作说明

刷机说明 博主在卸载 cuda 以及 python 后重启后黑屏无法显示,重刷系统才恢复正常。 下载 EVO Orin 用户手册(官网没有,所以上传到 CSDN 供下载)官网下载 EVO Orin 镜像文件 使用 tar -xvf 解压下载的 bootloader 和镜像包得到 …

计算机办公自动化——Python批量生成请假条

Python使用openpyxl、docx批量生成请假条 前言第三方库的安装示例代码运行效果 前言 加入你有一个下图所示的表格,需要批量生成他们的请假条,你会选择如何做呢?是一步一步的手打,还是呼唤请假人手打呢? 下面我们来看…

react中前端同学如何模拟使用后端接口操作数据?

为什么前端同学需要模拟后端数据 作为一个前端,在实现项目功能的时候,需要在前端写一个静态的json数据,进行测试。 项目中后端的接口往往是较晚才会出来,并且还要写接口文档,于是我们的前端的许多开发都要等到接口给…

基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用,是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估(Millennium ecosystem assessment,MA)提出生态系统服务包括供给、调节、…

[pgrx开发postgresql数据库扩展]4.基本计算函数的编写与性能对比

前言 再次声明: 并不是所有场景都需要(或者适合)用rust来写的,绝大部分操作数据库的功能和计算,用SQL就已经足够了! 本系列中,所有的案例,仅用于说明pgrx的能力,而并非…

Docker --- 简介、安装

一、什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会…

基于Java+SpringBoot+vue学生学习平台详细设计实现

基于JavaSpringBootvue学生学习平台详细设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…

用SQL语句操作Oracle数据库——数据更新

数据更新 数据库中的数据更新操作有3种:1)向表中添加若干行数据(增);2)删除表中的若干行数据(删);3)修改表中的数据(改)。对于这3种操作&#xf…
最新文章