【网络原理】——拥塞控制,延时/捎带应答,面向字节流,异常情况

8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:拥塞控制(重点)

1:情境引入

2:解决方案

3:如何找寻最佳窗口

4:总结

二:延时应答

三:捎带应答

四:面向字节流

1:粘包问题

2:解决方案

(1)分隔符标志

(2)指定包的长度

(3)应用层协议格式

(4)知识回顾

五:异常情况

1:一方出现进程崩溃

2:正常流程关机

3:一方断电

(1)断电的是接收方

(2)断电的是发送方

①问题引入

②心跳包

③特点

4:网线断开

六:应用场景


一:拥塞控制(重点)

通过“流量控制”的学习,我们可以通过从接收方的角度来制约发送方的发送速率,(即:动态控制窗口大小)。接下来我们引入的拥塞控制也是要限制发送方发送数据的速率

1:情境引入

我们知道,数据在传输的过程当中需要经过交换机和路由器的转发,进而可以选择很多条路径到达接受方,现在假设数据在路径上阻塞了,此时就算接收方,接受数据的速度非常快也无济于事。

2:解决方案

假设发送方按照某个窗口大小进行数据发送,发生了丢包情况,就视为“路径拥塞”,此时就要缩小窗口;如果没有拥塞,就扩大窗口

3:如何找寻最佳窗口

(1)慢启动:不知道网络拥塞情况,所以起始传输速率很小,使用小窗口,避免网络带宽吃紧。

(2)如无丢包,指数增大窗口大小(增加传输速率)

(3)指数增大到“阈值”,改用线性增大窗口大小(求稳)

(4)线性增大到一定数值,发生“丢包”,重新把窗口设置为较小值(旧版本是设置为非常小的值,已被废弃,TCP Reno版本重新设置的值是以一个较高的值为起点,看图)

此时指数增长转变为线性增长的阈值也会被重新设置

4:总结

“流量控制”和“拥塞控制”遵循谁的窗口更小,谁说的算

二:延时应答

“延时应答”机制也是以“流量控制”机制和“拥塞控制”机制为基础,通过延迟返回ack来达到,尽可能增大窗口的目的

可以形象想象成,以前是一个数据就对应一个ack,现在是每隔几个数据再返回一个ack,这样不仅提高了效率,还节省了ack的开销

当然这里即使接收的数据没有达到一定的数量,也会返回ack

三:捎带应答

“捎带应答”机制是基于“延时应答”机制的,我们不仅可以通过改变窗口大小来提高数据传输效率,还可以通过尽可能的合并数据包提高传输效率。

正常情况下②③发送数据包之间会有一定时间间隔,通过“延时应答”机制,把②③合并成一个TCP数据包,进行发送

因为ack报文本身并不带有载荷,我们只需要把合并后的数据包中六位标志符中ack的值设置为1,并且设置确认序号以及窗口大小即可,这几个属性与一个response报文并不冲突

注:这里的模型,不能理解成“三次握手”,因为数据传输的连接一般都是“长连接”,中间可能有好几次ack+response

四:面向字节流

1:粘包问题

粘(nian)引入:从之前的学习我们知道,一个TCP数据报到达接受方之后,需要调用server 的API中的read方法,read出来的结果就是应用层数据包

由于read的过程非常灵活,就无法区分出来从哪到哪是一个完整的数据包,

2:解决方案

明确包与包之间的边界

(1)分隔符标志

通过特殊符号作为分隔符,见到分隔符,就视为一个包结束了

例如:之前的写的TCP回显服务器中就应用到了这种思想

(2)指定包的长度

例如:在包的首部,加上一个特殊的空间来表示整个数据的长度

注:粘包问题,不是TCP独有的问题,只要是面向字节流,就会存在这样的问题

注:我们之前学习的UDP数据报包不存在这样的问题,UDP的传输单位是UDP数据报,每一个数据报,只承载一个应用层数据包。

UDP的接收缓冲区类似于一个链表。

(3)应用层协议格式

——xml,json,protobuffer

(4)知识回顾

数据报(Datagram)

UDP无连接的数据传输单元,通常用于网络层,每个数据报独立传输,传输不可靠

数据包(Packet)

是TCP/IP协议通信传输中的数据单位,处于网络层。数据包是一个完整的数据单元,它包含了网络层传输所需的所有信息

有连接,可靠传输

两者关系

数据包是整个的数据单元,而数据报是组成这个数据单元的分组

每一层封装后的数据都可以称作数据报,也就是说,一个完整的数据包是由若干个数据报组成的。

五:异常情况

考虑比“丢包”严重的情况,我们应该如何处理呢?

1:一方出现进程崩溃

进程无论是正常结束还是崩溃,都会触发回收文件资源,关闭文件这样的效果,(即四次挥手)

TCP的连接生命周期比进程更长,虽然进程退出了,但是TCP连接仍然存在,可以进行四次挥手

2:正常流程关机

主机关机,强杀进程,“四次挥手”挥的快,可以在数据结构中删除掉对端的连接信息;

挥的不够快,至少也能发送一个FIN给对方,如果久久收不到ack,会进行“超时重传”,重传几次后还是收不到ack,就单方面的释放连接信息。

3:一方断电

(1)断电的是接收方

发送方发送FIN后,收不到ack,重传后,还是没反应,进入“复位连接”

下面这张图是TCP数据报中六位标志符

RST——复位报文段

URG——TCP中有一些特殊的数据包,携带一些特殊功能的数据

PSH——push催促对方快点发送信息

(2)断电的是发送方

①问题引入

接受方本来就是在阻塞等待“发送方”发送数据,如果发送方“挂了”,接受方怎么区分出,发送方是“挂了”还是暂时刚好没有发送数据。

②心跳包

TCP中,接收方一段时间没有接受到发送方的数据,就会发送一个“心跳包”来确认发送方是否还处于“存活状态”

③特点

心跳包是周期性的发送

没有心跳,视为对端挂了,那就单方面的断开连接

4:网线断开

哦吼~~~~属于是物理打击了

六:应用场景

如果需要可靠传输:首选TCP

需要传送数据包很大:首选TCP

绝大部分的场景都可以优先考虑TCP

UCP相比较于TCP最大的优势就是,传输效率,比如有些场景中,对可靠性要求不高,对效率要求很高,那就可以考虑UDP

如何用UDP来实现可靠性传输(重点)

我们的思路就是借鉴TCP传输的这些特性(不止这些)进行类比

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

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

相关文章

【Docker】安装部署项目流程(Pycharm版)

安装部署步骤 1.准备项目 第一步要准备好你所需要部署的项目,确保在工作目录下所以程序.py文件正常调用并能正确运行 如上,main要在工作目录中能跑通,这里有一点需要注意 在IDE src不要标记为源代码根目录,观察一下是否能跑通代…

【计算机网络 - 基础问题】每日 3 题(五十)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

Java最全面试题->Java基础面试题->JavaSE面试题->面向对象面试题

面向对象 下边是我自己整理的面试题,基本已经很全面了,想要的可以私信我,我会不定期去更新思维导图 哪里不会点哪里 1.面向对象和面向过程的区别 面向对象: 优点:易维护,复用,扩展。面向对象…

解决DOTA-v2.0数据集上传结果至官网BUG: No space left on device

时间:2024.10.20 一、DOTA-v2.0数据集上传结果至官网BUG: No space left on device IOError at /evaluation1/ [Errno 28] No space left on device二、解决方法,法一 上传的结果文件太大了,把服务器磁盘占满了。 将结果中精度…

【算法】KMP字符串匹配算法

目录 一、暴力 二、KMP 2.1 思路 2.2 next数组 2.3 实现 2.4 例题 一个人能走的多远不在于他在顺境时能走的多快,而在于他在逆境时多久能找到曾经的自己。 …

elementui时间选择器time-picker返回值不对的问题

1. 问题 天杀的elementui的time-picker,导致我开发的系统出现了一次生产问题,原因竟然是因为组件库的bug!直接上截图。 如图,正常情况下,选择时间后,想要得到的值理应是当天的时间,如图是当年…

zotero文献管理学习

1 zotero软件简介 zotero是一款开源的文献管理软件。如果你听说或使用过EndNote,那么可能会对“文献管理”有一定的概念。可以简单地这样理解:zotero一定程度上可以作为EndNote的平替。 EndNote需要注册付费,对于无专业科研机构隶属关系的企…

使用apipost连接openai的接口进行模型对话

使用apipost连接openai的接口进行模型对话 1.API准备2.APIPOST配置2.1请求地址和header的设置2.2认证API设置2.3body设置2.4结果 1.API准备 这里使用网络上的API,使用硅基流动的 API Key,所以接下来便是注册并获取 API Key 了。 首先,我们打…

轻量级可视化数据分析报表,分组汇总表!

什么是可视化分组汇总表? 可视化分组汇总表,是一种结合了数据分组、聚合计算与视觉呈现功能的数据分析展示功能。它能够按照指定的维度(如时间、地区、产品类型等)对数据进行分组,还能自动计算各组的统计指标&#xf…

RabbitMQ 入门(四)SpringAMQP五种消息类型(Work Queue)

一、WorkQueue(工作消息队列) Work queues,也被称为(Task queues),任务模型。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。 当消息处理比较耗时的时候,可能生产消息的速度会远远大于…

官龙村捐赠图书整理有感

今天(2024年10月20日),我有幸参加了在深圳南山区西丽官龙村举行的义工活动,主要任务是整理捐赠的图书,并根据小学和中学的需求进行分类打包。这次活动不仅让我体会到了劳动的辛苦,更让我感受到了助人为乐的…

如何使用Python合并Excel文件中的多个Sheet

在日常工作中,我们经常会遇到需要处理多个Excel工作表(Sheet)的情况。比如,一个Excel文件中包含了一个月内每天的数据,每个工作表代表一天。有时候,为了方便分析,我们需要将这些分散的数据合并到…

【MySQL】详解MySQL数据类型

一、数据类型 各类型的数值范围: 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。对于int类型可能存放不下的数据,尽量不使用unsigned,unsigned int 同样可…

国家信息安全水平考试(NISP一级)最新题库-第十六章

目录 另外免费为大家准备了刷题小程序和docx文档,有需要的可以私信获取 1 防火墙是一种较早使用、实用性很强的网络安全防御技术,以下关于防火墙说法错误的是() A.防火墙阻挡对网络的非法访问和不安全数据的传递;B.防…

强对流降水临近预报

强对流降水是一种最常见的灾害性天气,其突发性和局地性强、生命史短、灾害重等特点极易给人民生产和生活带来巨大的破坏和伤害。如果可以提前预知此类天气状态,则可以挽回巨大的生命财产损失,尤其是短时(0~12小时)和临…

基础篇:带你打开Vue的大门(二)

目录 学习目标: 核心技能目标 学习内容: 学习产出: 学习目标: 能够创建Vue实例并理解其基本选项。 理解el、data、methods等选项的作用。 掌握数据绑定: 理解单向数据绑定和双向数据绑定的区别。能够使用v-bind和…

MySQL进阶之(十二)MySQL事务日志-undo log

十二、MySQL事务日志-undo log 12.1 undo log 引入12.2 undo log 的作用01、回滚数据02、MVCC 12.3 undo log 的存储结构01、回滚段与 undo 页02、回滚段与事务03、回滚段中的数据分类 12.4 undo log 的类型12.5 undo log 的生命周期01、执行 insert 操作02、执行 update 操作0…

Kubernetes部署练习

Kubernetes详细笔记 文章目录 Kubernetes 一、Kubernetes介绍 1.1、应用部署方式演变1.2、kubernetes简介1.3、kubernetes组件1.4、kubernetes概念 二、集群环境搭建 2.1、环境规划 2.1.1、集群类型2.1.2、安装方式2.1.3、主机规划 2.2、环境搭建 2.2.1、主机安装2.2.2、环境初…

如何开启华为交换机 http

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

【计算机网络 - 基础问题】每日 3 题(四十七)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…