网络原理 --- 传输层Ⅲ TCP协议中的滑动窗口,流量控制和拥塞控制

news2025/1/13 2:37:56

文章目录

  • 网络原理
  • 传输层TCP协议
    • 4.滑动窗口
    • 5.流量控制
    • 6.拥塞控制
  • 总结


网络原理

介绍TCP/IP协议中每一层里面的核心内容~

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

传输层TCP协议

4.滑动窗口

TCP能够保证可靠传输,但是失去了效率!
但是TCP希望能够在保证可靠性的前提下,尽可能地提高效率 (但还是UDP更快)~

滑动窗口就是 提高TCP传输效率的有效机制!!

在这里插入图片描述这是没引入滑动窗口的情况,此时只是朴素的确认应答

主机A大量的时间都消耗在了等待ACK上~
提升效率的方式就是 : 不等ACK了!! 直接往下发下一条 ~

确实是不等ACK了,但是又不是完全不等!

每次批量的发送一波消息,然后再等一波批量ACK,再发一波消息~

把不需要等待,就可以直接发送的数据的量,就称为 “窗口大小

在这里插入图片描述

批量发送四条数据,批量等待4条ACK,此处的窗口大小,就是4000(以字节为单位算的)

💖注意:

主机A是收到一个ACK,就继续发一条数据,而不是等所有的ACK都到了,才统一发下一组~

在这里插入图片描述

一开始白色的框,表示 给主机B发送了4条数据 1001- 5000

2001 这个ACK到达主机A的时候,此时主机A就立即发送5001 - 6000 此时A等待ACK的范围就是2001 - 6000

白色的框,也表示哪些数据在等待确认~

2001这个ACK到达之前,主机A上待确认的数据是1001 - 5000
2001到达之后,意思是1001-2000就确认发送成功了,于是就把1001 - 2000 这个记录从白色的框里删掉了

同时又发送了5001 - 6000这个数据 因此就需要继续等待5001 - 6000ACK

此时要等的数据仍然是4条~
看起来就好像是白色的框 长度没变,往后移了一样

效率高不高取决于窗口大小,窗口越大,效率就越高,窗口越小,效率就越低

假设窗口是 无穷大,此时发送方就完全不需要等待ACK了,此时效率就和UDP一样了

在这里插入图片描述
刚才讨论的是正常情况下,但是如果出现丢包/乱序 怎么办 ?

💢丢包:

  1. 响应的ACK丢了
  2. 传的数据丢了
  1. 响应的ACK丢了
    在这里插入图片描述

此时丢了3个ACK,但是没关系,不用做任何处理!
对于可靠传输没有任何影响!

因为确认序号表示的是该数据之前的序号都收到了!

比如:

1001表示小于1001的数据到了
2001表示小于2001的数据到了

后者大于前者,2001之前的数据到了已经可以证明1001之前的数据已经到了! 是一个包含的关系~

  1. 数据包直接丢了
    在这里插入图片描述

上图就是" 快速重传 "(搭配滑动窗口机制的超时重传)
如果传输的数据很多,批量传输,此时自然是遵守快速重传的机制
如果传输的数据很少(就只有一条),此时仍然是按照超时重传的方式来进行的

在这里插入图片描述
窗口大小越大,确实发送速度会更快~

但是窗口可以无限大吗❓ 接收方可以无限接收吗❓

如果发的太块,接收方处理速度跟不上了,就会导致接收方丢弃一部分数据~
TCP是要保证可靠性的,丢弃的数据TCP还要重传这些数据
这就让本来就处理不过来的接收方,更接收不过来了…

所以就需要再有其他的机制,来对发送方的发送数据,作出限制!

在这里插入图片描述

5.流量控制

在滑动窗口的基础之上,对发送速率作出限制的机制!
就是限制发送方的窗口大小不要太大!!

问问接收方,看看接收方,觉得发多快合适~

这是接收方对于发送方的反制~
接收方根据自己的接收能力,来反向影响发送方接下来的发送速率!!

接收方的接收速率,如何进行量化❓

接收方使用接收缓冲区的剩余空间大小,来作为发送方发送速率(窗口大小)的参考数值!!!
在这里插入图片描述

在这里插入图片描述

接收方B收到A的数据之后,就会在ACK应答报文中,把当前 接收缓冲区剩余空间大小的值,反馈给发送方~
在这里插入图片描述
16位能表示的最大数字就是64kb,这是否意味着滑动窗口最大就是64kb呢❓
其实不是!!
TCP报头的选项中,会有一个特殊的值: 窗口大小的扩展因子
这里是可以通过扩展因子来表示更大的值的!!

流量控制图解:

在这里插入图片描述

在这里插入图片描述

6.拥塞控制

流量控制,是通过接收方的处理能力,来衡量发送方的速率的~

刚才只是考虑了接收方的处理速率,难道发送方就可以为所欲为的发送了吗❔
显然也不是,还得考虑中间这些转发节点的情况~
在这里插入图片描述

如果中间的某个设备出问题了,比如卡了,那这个设备就会限制整体的传输速率,如果还按照大的窗口去发,就很容易产生丢包

接收方的处理速率是容易量化的
但是中间结点的情况难以量化~

❓那如何考虑中间结点的情况呢?

思路:

把中间的这些设备,视为一个"整体" 通过"做实验"的方式,来验证发送速度多少合适!!

开始的时候发的慢点~ 如果一路畅通,就适当的提高一下速度 提高到一定程度,发生丢包~ 再降低一下速度~
降低速度之后,发现又通畅了,那就再提高一下速度~

在这样一个反复的提高降低的过程,就达到了一个 “动态平衡

上述这样的动态调整发送速率的机制,就叫做 " 拥塞控制 "

在这里插入图片描述

流量控制,在控制发送方的窗口大小
拥塞控制,也是在控制发送方的窗口大小
💌当这两个控制的窗口大小不同时,取这两个中小的窗口~

在这里插入图片描述
刚才只是简单描述了下拥塞控制思路:
从小的开始,逐渐变大,如果丢包再变小…反复动态调整[宏观策略]

❓TCP实现拥塞控制的具体实现是怎样的呢?

  1. TCP 引入慢启动机制,先发少量的数据 (在发送之初,网络情况前路未知)
  2. 如果不丢包,就要放大拥塞窗口(拥塞控制下的那个窗口大小)
    开始的时候先指数增长(翻倍,就可以在短时间内,摸清楚网络传输承载的底线),达到阈值(防止翻倍翻的太快,一下就超过上限,设置阈值,达到阈值就不再翻倍),就开始线性增长~

在这里插入图片描述

上述看到的过程是TCP传统的拥塞控制的(以前是这么搞的)
后来TCP也在进行演化,拥塞控制也作出了一些改进~
其中的改进就是不再回归到初始值了~
而是回归到一个中间的值~

总结

在这里插入图片描述

你可以叫我哒哒呀
本篇到此结束
“莫愁千里路,自有到来风。”
我们顶峰相见!

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

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

相关文章

达梦数据库在不修改SQL的情况下为SQL指定HINT

前言 在Oracle中可以使用outline、SQL PROFILE等手段去在无需修改SQL语句的情况下,来保证SQL执行计划在不同硬件环境下相同,从而保证SQL语句在不同环境的执行效率。那么,在达梦数据库中则可以使用SF_INJECT_HINT系统函数达到类似的效果。 SF…

Java学习笔记 --- 异常

一、基本介绍 Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常) 执行过程中所发生的异常事件可以分为两类 1、Error(错误):Java虚拟机无法解决的严重问…

十月了,请问2022届的同学们都找到工作了吗?

今年的就业大环境就不多说了,大家都知道。一边是超千万规模的应届毕业生,叠加教培、地产等行业裁员;另一边则是疫情反复影响之下,企业瘦身裁员、停招、缩招。在白领性质的劳动力市场,劳动力供给严重大于需求&#xff0…

【C语言】解题训练

目录 字符串左旋 方法1 方法2 字符串旋转结果判断 方法1 方法2 杨氏矩阵 位段 题目1 题目2 联合体 题目1 题目2 有序序列合并 变种水仙花 找单身狗 字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到…

纷享销客联合B.P商业伙伴携手30+企业CEO走进南天信息

数字化智能化建设的当下,数字化服务商承担着承上启下的核心力量。企业数字化转型成为刚需,意味着ICT企业的市场前景持续乐观,但在疫情和竞争加剧之下,企业发展也遭遇增长的挑战,如何在数字中国的趋势之下,乘…

大学网课搜题公众号系统

大学网课搜题公众号系统 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转&#xf…

【从小白到大白05】c和c++内存管理

c和c内存管理 文章目录c和c内存管理c内存管理方式new/delete操作内置类型new申请动态空间delete释放空间new和delete操作自定义类型operator new与operator delete函数new[]和delete[]定位new(placement-new)总结以上内存泄露以上就是全部内容啦&#xf…

WPS-JS宏开发-基础知识-03-三大基本结构

系统:Windows 11 软件:WPS表格11 本系列介绍一款类Excel的软件,WPS表格当然也是介绍其宏开发,不同的是,使用的JS宏会同样介绍多个系列,本系列介绍一些基础知识 Part 1: 三大逻辑结构 一个具体的…

如何给字符串字段加索引?

1.引例 现在的系统中,很多都会包含邮箱字段,那要如何给这个字段建立索引呢? 假设,现在维护了一个用户表,其中包含邮箱,定义如下: mysql>create table SUser(ID int primary key,email var…

OpenGL之多边形偏移、雾效、纹理映射

1.1 OpenGL中可以设置物体的点、线、面绘制模式。如果需要同时绘制多种模式,如下以面和线模式绘制两遍模型,可以看到线不连续,当镜头推远推近时会出现闪烁现象。 void glPolygonMode(GLenum face,GLenum mode);face :GL_FRONT,GL…

分治暴力求解最近点对问题 + 时间性能量化分析

Catalogue1 Intro2 Problem3 Time performance analysis4 Solution5 Reference1 Intro 本文旨在讨论分治和暴力在求解最近点对问题时的时间性能问题,关于解题部分不做过多讲解,只附上相关代码。 2 Problem 给定平面上N个点,找出其中的一对…

【Linux】第七章 进程控制(进程创建+进程终止+进程等待+进程替换+min_shell)

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

【路径规划-多式联运】基于遗传算法求解多式联运运输问题(考虑碳交易)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

字符串和编码那些事

一、字符编码 1. ASCII字符编码 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte) 由于计算机是美国人发明的&#…

【Apache Spark 】第 11 章使用 Apache Spark 管理、部署和扩展机器学习管道

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

编程神器Copilot逐字抄袭他人代码?

自面世后就饱受争议的 GitHub Copilot 编程神器最近又遭遇舆论风暴。 日前,德州农工大学的一位计算机科学教授 Tim Davis 在推特上发文称, GitHub Copilot 在没有标注来源也没有 LGPL 许可的情况下,输出了大量应该受版权保护的代码。 Tim Davis 还发了自己和 GitHub Copil…

90后汕头返种水稻 国稻种芯·中国水稻会:广东新农人田保姆

90后汕头返种水稻 国稻种芯中国水稻会:广东新农人田保姆 南方日报 张伟炜 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康大会报道:“5月稻谷病虫害防护非常…

机器学习(周志华)课后习题

第1章 绪论 1.1 表1.1若只包含编号1和4的两个样例,试给出相应的版本空间。 版本空间:与训练及一致的假设集合。 色泽青绿,根蒂*,敲声*; 色泽*,根蒂蜷缩,敲声*; 色泽*,根…

nuxt.js 进行项目重构-首页

nuxt.js 也是基于vue 的 那么就离不开组件化开发 我们按照组件结构来进行分析 navTop 页面的头部 通用组件 分隔了三个位置 适用于大多数头部 且预留插槽 <template><div class"nav-top"><div class"left"><slot name"left…

Spring5入门到实战------10、操作术语解释--Aspectj注解开发实例。AOP切面编程的实际应用

1、操作术语 1.1、连接点 类里面哪些方法可以被增强、这些方法被称为连接点。比如&#xff1a;用户控制层有登录、注册、修改密码、修改信息等方法。假如只有登录类和注册类可以被增强&#xff0c;登录和注册方法就称为连接点 1.2、切入点 实际被真正增强的方法&#xff0c…