网络原理TCP/IP(3)

文章目录

  • 滑动窗口
  • 流量控制
  • 拥塞控制
  • 延迟应答
  • 捎带应答

滑动窗口

确认应答策略,对每⼀个发送的数据段,都要给⼀个ACK确认应答.收到ACK后再发送下⼀个数据段.这样做有⼀个比较大的缺点,就是性能较差.尤其是数据往返的时间较长的时候.
为了解决低效率传输,引入了滑动窗口批量传输数据
在这里插入图片描述
窗口大小指的是⽆需等待确认应答⽽可以继续发送数据的最⼤值.上图的窗⼝大小就是4000个字节(四个段).

• 发送前四个段的时候,不需要等待任何ACK,直接发送;

• 收到第⼀个ACK后,滑动窗⼝向后移动,继续发送第五个段的数据;依次类推;

• 操作系统内核为了维护这个滑动窗⼝,需要开辟发送缓冲区来记录当前还有哪些数据没有应答;只有确认应答过的数据,才能从缓冲区删掉;

• 窗⼝越⼤,则⽹络的吞吐率就越⾼;

在这里插入图片描述
那么如果出现了丢包,如何进⾏重传?这⾥分两种情况讨论.
情况⼀:数据包已经抵达,ACK被丢了.
在这里插入图片描述
这种情况下,部分ACK丢了并不要紧,因为可以通过后续的ACK进⾏确认;

情况二:数据包就直接丢了.
在这里插入图片描述
• 当某⼀段报⽂段丢失之后,发送端会⼀直收到1001这样的ACK,就像是在提醒发送端"我想要的是1001"⼀样;
• 如果发送端主机连续三次收到了同样⼀个"1001"这样的应答,就会将对应的数据1001-2000重新发送;
• 这个时候接收端收到了1001之后,再次返回的ACK就是7001了(因为2001-7000)接收端其实之前就已经收到了,被放到了接收端操作系统内核的接收缓冲区中;这种机制被称为"⾼速重发控制"(也叫"快重传").

流量控制

接收端处理数据的速度是有限的.如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继⽽引起丢包重传等等⼀系列连锁反应.因此TCP⽀持根据接收端的处理能⼒,来决定发送端的发送速度.这个机制就叫做流量控制(FlowControl);
• 接收端将⾃⼰可以接收的缓冲区大小放⼊TCP⾸部中的"窗⼝大小"字段,通过ACK端通知发送端;
• 窗⼝大小字段越⼤,说明网络的吞吐量越⾼;
• 接收端⼀旦发现⾃⼰的缓冲区快满了,就会将窗⼝大小设置成⼀个更小的值通知给发送端;
• 发送端接受到这个窗⼝之后,就会减慢自己的发送速度;
• 如果接收端缓冲区满了,就会将窗⼝置为0;这时发送⽅不再发送数据,但是需要定期发送⼀个窗⼝探测数据段,使接收端把窗⼝⼤⼩告诉发送端.
在这里插入图片描述
接收端如何把窗⼝⼤⼩告诉发送端呢?回忆我们的TCP⾸部中,有⼀个16位窗⼝字段,就是存放了窗⼝⼤⼩信息;
那么问题来了,16位数字最大表⽰65535,那么TCP窗⼝最大就是65535字节么?
实际上,TCP⾸部40字节选项中还包含了⼀个窗⼝扩⼤因⼦M,实际窗⼝⼤⼩是窗⼝字段的值左移M;

拥塞控制

和流量控制一样,都是限制发送方发送数据的速率
流量控制是站在接收方的角度来制约发送方速率的
如果当前接收方处理速度很快,但是中间的通信路径出了问题,某个地方堵车了,发送的速度再快也没有用
针对这种情况,把中间路径经过的所有设备视为一个整体,然后通过“实验”的方式,找到一个比较合适的传输速率,如果按照某个窗口大小发送数据之后,出现丢包,就视为中间路径存在拥堵,就减少窗口大小,没出现丢包就视为路径不存在拥堵,继续增加窗口大小
总之流量控制和拥塞控制谁产生的窗口小谁说的算
拥塞控制的窗口是如何试出来的呢?

  1. 慢启动,刚开始传输的数据速率比较小,采用的窗口大小也比较小
  2. 如果上述传输的数据没有出现丢包的情况,说明网络还是流畅的,就要增大窗口大小,此时的增长方式是按照指数增长的
  3. 指数增长不能一直保持,可能会增长太快一下子导致网络拥堵,所以这里引入一个阈值,当拥塞窗口达到阈值之后,此时指数增长就成了线性增长
  4. 线性增长也是一直在增长,积累一段时间之后,传输的速度可能太快,此时还是会引起丢包,一旦出现丢包,就会把拥塞窗口重置成较小的值,回到最初的慢启动过程,并且这里也会根据刚才丢包时的窗口大小,重新设置指数增长到线性增长的阈值
    在这里插入图片描述

延迟应答

如果接收数据的主机⽴刻返回ACK应答,这时候返回的窗⼝可能⽐较⼩.
• 假设接收端缓冲区为1M.⼀次收到了500K的数据;如果⽴刻应答,返回的窗⼝就是500K;
• 但实际上可能处理端处理的速度很快,10ms之内就把500K数据从缓冲区消费掉了;
• 在这种情况下,接收端处理还远没有达到⾃⼰的极限,即使窗⼝再放⼤⼀些,也能处理过来;
• 如果接收端稍微等⼀会再应答,⽐如等待200ms再应答,那么这个时候返回的窗⼝⼤⼩就是1M;
⼀定要记得,窗⼝越⼤,⽹络吞吐量就越⼤,传输效率就越⾼.我们的⽬标是在保证⽹络不拥塞的情况下尽量提⾼传输效率;那么所有的包都可以延迟应答么?
肯定也不是;
• 数量限制:每隔N个包就应答⼀次;
• 时间限制:超过最⼤延迟时间就应答⼀次;具体的数量和超时时间,依操作系统不同也有差异;⼀般N取2,超时时间取200ms;

在这里插入图片描述

捎带应答

在延迟应答的基础上,我们发现,很多情况下,客⼾端服务器在应⽤层也是"⼀发⼀收"的.意味着客⼾端给服务器说了"How are you",服务器也会给客⼾端回⼀个"Fine,thank you";
那么这个时候ACK就可以搭顺⻛⻋,和服务器回应的"Fine,thank you"⼀起回给客⼾端
在这里插入图片描述

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

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

相关文章

镜舟科技客户成功团队负责人孟庆欢:湖仓一体将成为数据架构的新范式

大数据产业创新服务媒体 ——聚焦数据 改变商业 随着数字化的概念逐步深入不同领域企业的运营中,业务形态和数字化路径也越来越丰富。这也为企业数据处理、储存的方式提出了更多要求。对于企业,尤其是数据驱动型企业来说,需要强大的解决方案…

STM32F407 CAN 静默回环模式 配置

CAN 静默回环模式 【 Silent_LoopBack】 自发自收,这种方式作“热自检”使用,即自我检查,不干扰总线,也不受总线干扰. 发送:发出的数据,只会传输到自己的输入端,不会影响总线.接收&#x…

隐写术:隐藏信息的秘密艺术

一、引言 隐写术,这个充满神秘色彩的词汇,似乎让我们回到了间谍和秘密特工的时代。但实际上,隐写术在现代社会仍然有着广泛的应用,例如在军事、情报、商业等领域。本文将带你走进隐写术的世界,探索它的原理、应用和防…

Vue3+TS+Vite+Pinia学习总结

VUE3介绍 vue2和vue3之间的区别 因为需要遍历data对象上所有属性,所以如果data对象属性结构嵌套很深,就会存在性能问题。因为需要遍历属性,所有需要提前知道对象上有哪些属性,才能将其转化为getter和setter,所以vue2中无法将data新…

物流平台架构设计与实践

随着电商行业的迅猛发展,物流行业也得到了极大的发展。从最初的传统物流到现在的智慧物流,物流技术和模式也在不断的更新与升级。物流平台作为连接电商和物流的重要媒介,其架构设计和实践显得尤为重要。 一、物流平台架构设计 1. 前端架构设…

Selenium处理Alert弹窗

页面弹窗有 3 种类型: alert(警告信息) confirm(确认信息) prompt(提示输入) 对于页面出现的 alert 弹窗,Selenium 提供如下方法: 序号 方法/属性 描述 1 ac…

leetcode正则表达式匹配问题(困难)

1.题目描述 2.解题思路,这道题自己没做出来,看了官方的题解,感觉对自己来说确实是比较难想的。使用了动态规划的解决方案,这种方案看题解都不一定能看明白,不过有个评论画图讲解的非常明白。其实仔细看题解的话&#…

关于网络面试题汇总

什么是TCP/IP五层模型?它们的作用是啥?基于TCP/IP实现的应用(层协议)有哪些? TCP/IP五层模型,从上向下分别是: 应用层:应用程序本身,应用层的作用是负责应用程序之间的…

Python实现PDF到HTML的转换

PDF文件是共享和分发文档的常用选择,但提取和再利用PDF文件中的内容可能会非常麻烦。而利用Python将PDF文件转换为HTML是解决此问题的理想方案之一,这样做可以增强文档可访问性,使文档可搜索,同时增强文档在不同场景中的实用性。此…

HTML+CSS:WIFI开关按钮

效果演示 实现了一个按钮的切换效果,当用户点击按钮时,按钮会从一个颜色渐变到另一个颜色,同时按钮的边框和阴影效果也会发生变化。同时,按钮的图标也会从一个颜色渐变到另一个颜色。这个效果可以用来提醒用户进行操作&#xff0c…

一步步成为React全栈大师:从环境搭建到应用部署

文章目录 第一步:环境搭建第二步:了解React基础第三步:组件与路由第四步:状态管理第五步:接口与数据交互第六步:样式与布局第七步:测试第八步:构建与部署《深入浅出React开发指南》内…

MagicVideo-V2:多阶段高保真视频生成框架

本项工作介绍了MagicVideo-V2,将文本到图像模型、视频运动生成器、参考图像embedding模块和帧内插模块集成到端到端的视频生成流程中。由于这些架构设计的好处,MagicVideo-V2能够生成具有极高保真度和流畅度的美观高分辨率视频。通过大规模用户评估&…

未来电话呼叫技术的社会影响与发展趋势----云微呼

未来电话呼叫技术将以更为智能化、便捷化和个性化为主要发展趋势,其所带来的社会影响也将是多层面的。以下将探讨未来电话呼叫技术可能的发展趋势以及对社会的影响: 智能化助力生活便捷: 未来电话呼叫技术将更加智能化,通过人工智…

Spring事件之注解@EventListener讲解

文章目录 1 注解EventListener1.1 示例Demo1.1.1 简单例子1.1.2 解耦1.1.3 Spring事件 1.2 深入EventListener1.2.1 debug调试1.2.2 问题一: Spring是怎么知道要去触发这个方法1.2.3 问题二:ApplicationListenerMethodAdapter1.2.4 问题三:Si…

【Python】【完整代码】解析Excel 文件中的内容并检查是否包含某字符串,并返回判断结果

示例: 开发需求:解析Excel 文件中的内容并检查是否包含 "Fail" 字符,若没有则返回True,若有则返回False 实现代码: #!/usr/bin/env python3 # -*- encoding: utf-8 -*-File : check_excel_for_fail.py Ti…

华为机考入门python3--(7)牛客7-取近似值

分类:数字 知识点: str转float float(str) 向上取整 math.ceil(float_num) 向下取整 math.floor(float_num) 题目来自【牛客】 import math def round_to_int(float_num): # 如果小数点后的数值大于等于0.5,则向上取整&#xf…

【HarmonyOS】鸿蒙开发之ArkTs初步认识——第2.1章

ArkTs简介 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。 以下图可以展示Js,TS,ArkTs的关系 ArkTs基础语…

开发知识点-拍黄片的好基友的依赖管理工具-composer

composer 介绍主要特性使用Composer的优势 基本使用文档 介绍 Composer 是 PHP 的一个依赖管理工具,它允许项目创建者和开发者声明项目所依赖的库,并自动安装这些依赖项。 它在PHP社区中被广泛使用,几乎成为了现代PHP开发的标准配置。 主要…

面试150 颠倒二进制位 位运算分治 逻辑右移

Problem: 190. 颠倒二进制位 文章目录 思路复杂度位运算分治法 思路 👨‍🏫 参考题解 >>>:逻辑右移(符号位一起移动,高位补零) 复杂度 时间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) 空间…

Javaweb之SpringBootWeb案例之 @ConfigurationProperties的详细解析

4.3 ConfigurationProperties 讲解完了yml配置文件之后,最后再来介绍一个注解ConfigurationProperties。在介绍注解之前,我们先来看一个场景,分析下代码当中可能存在的问题: 我们在application.properties或者application.yml中配…