当前位置: 首页 > news >正文

网络原理必知会

衔接上文:网络原理必知会_念君思宁的博客-CSDN博客

流量控制:

流量控制也是保证可靠性的机制

对于滑动窗口,批量发送数据而言,窗口越大,相当于批量发送的数据越多,整体的速度也就越快了,但是,速度越快越好吗??(不一定哟)

如果你发送的太快了,瞬间就把接收方缓冲区给打满了,当接下来继续发送,此时数据就会丢包,这种情况下得不偿失,还不如发的慢点了!!通过流量控制,本质上就是让接收方来限制一下发送方的速度!让发送方慢点,甚至阻塞一下!!

拥塞控制:

滑动窗口的大小,取决于流量控制和拥塞控制!!

  • 流量控制:衡量了接收方的处理能力!!
  • 拥塞控制:衡量了传输路径的处理能力!!

其中的中间节点是一系列的交换机和路由器《——》木桶效率

很明显再传输路径上,任何一个设备处理能力,如果遇到瓶颈,都会对整体的传输速率产生明显影响!!

拥塞控制:就是要衡量中间节点的传输能力!

拥塞控制要衡量中间路径!但是中间路径上有多少节点??(路由器,交换机)每个节点的当前情况??甚至每次传输走的路径??这些都是不一样的!!因此,可以通过实验的方式,找到一个合适的发送速率!!

开始的时候,按照一个小的速率发送,如果不丢包,就可以提高一下速率(扩大窗口的大小),如果出现丢包,则立即把速率调小,重复上述的过程,一直到动态平衡状态!!

另外:网络的拥堵情况,也不是一成不变的,处在时刻变化中,此时,处于拥塞控制,这样的策略也就能很好的适应变化的网络环境!

因此,拥塞窗口《——》拥塞控制,实验出来的窗口,则实际发送方的窗口大小为:拥塞窗口和流量窗口的最小值!!

延时应答:

提高传输效率!

TCP可靠性的核心是:确认应答!

ACK要发,但不是立即发,而是稍微磨蹭一会再发!

延时应答的效果就是通过这个延时,该接收方应用程序,趁机多消费点数据,此时反馈的窗口大小,就会更大一丢丢,此时发送方的发送速率也就能更快一些(同时也能满足让接收方能够处理过来!),当然,也不是所有的包都延迟,也得看情况!!

  • 数量限制:每隔N个包就应答一次
  • 时间限制:超过最大延迟时间就应答一次

捎带应答:

捎带应答基于延时应答!

补充:客户端服务器的通信模型:

  1. 一问一答:绝大部分服务器都是这样的
  2. 多问一答:上传大文件
  3. 一问多答:下载大文件
  4. 多问多答:游戏串流

当然,客户端服务器之间的通信模型,通常是“一问一答”这种模式的!!

面向字节流:

暗藏杀机——》粘包问题!

所谓的“一句话”就相当于一个“应用层数据报”;

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

如:好啊好啊好个P不给拉倒,如何进行分开??

那么,疑问就来了?如何解决粘包问题??

  1. 定义分隔符:粘包问题的有效解决方案!(约定以“ . ”(点号)结尾
  2. 约定长度:约定数据的前4个字节,表示整个数据报的长度

这两点都是自定义应用层协议的注意事项!!


异常情况:

  1. 进程关闭/进程崩溃

    进程没了,socket是文件,也随之被关闭

    虽然进程没了,但是连接还在,仍然可以继续四次挥手

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

       先杀死所有的用户进程:进程没了,socket是文件,也随之被关闭,虽然进程没了,但是连接还在,仍然可以继续四次挥手,如果挥完,更好,如果没有挥完(比如:对方发来fin,咱们还没来得及ack就关机了,此时对端就会重传fin,重传几次之后,发现都没有ack,就尝试重置连接,如果还不行,就直接释放连接!!

  3. 主机掉电(拔电源,很快的,啪的一下就🆗了)《——台式机,不考虑笔记本
    瞬间机器就关了,来不及进行任何挥手操作

    1.对端是发送方:

    对端就会收不到ack——》超时重传——》重置连接——》释放连接

    2.对端是接收方:

    对端没有方法立即知道,你这边是没来得及发送数据??还是直接就没了??其实TCP内置了“心跳包”(保活机制)心跳包具有周期性,当心跳没了,那就挂了!

    虽然对端是接收方,对端会定期给咱们发送一个心跳包(ping),咱们返回一个(pong),如果每个ping都有及时的pong,这个时候,说明当前对端的状态良好,如果ping过去之后,没有pong,说明心跳没了,怕是这边挂了!!

    心跳包是周期性的,没有那么的及时,而发送方发过去的数据没ack,反馈的更快!!

  4. 网线断开
    同上(主机掉电)

TCP小结:

小结一下瞬间开心!!

  1. 确认应答
  2. 超时重传
  3. 连接管理:三次握手,四次挥手
  4. 滑动窗口:批量传输
  5. 流量控制:接收方根据自己的处理能力,反向约束发送方传输速度,接收方缓冲区剩余空间的大小——》ack应答报文窗口的大小
  6. 拥塞控制
  7. 延时应答
  8. 捎带应答
  9. 面向字节流:粘包问题
  10. 异常处理:心跳包

TCP可靠传输,效率没那么高,绝大部分场景下,都可以使用TCP

UDP不可靠传输,效率高,对于效率要求较高,且可靠性要求不高的情况下可使用!

TCP是直接和咱们的代码打交道的,咱们就不得不多了解一些了!IP是在更深层的地方,很难直接解除到!

相关文章:

网络原理必知会

衔接上文:网络原理必知会_念君思宁的博客-CSDN博客 流量控制: 流量控制也是保证可靠性的机制 对于滑动窗口,批量发送数据而言,窗口越大,相当于批量发送的数据越多,整体的速度也就越快了,但是&…...

ELK 日志分析系统介绍与部署

目录 一、ELK 简介: 1.开源工具介绍: 2.其它组件: 2.1 Filebeat: 2.2 Fluentd: 2.3 缓存/消息队列(redis、kafka、RabbitMQ等): 3. filebeat 结合 logstash 带来好处: 二、为什么要…...

Android 内存治理之线程

1、 前言 当我们在应用程序中启动一个线程的时候,也是有可能发生OOM错误的。当我们看到以下log的时候,就说明系统分配线程栈失败了。 java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory这种情况可能是两种原因导致的。…...

三、K8S之ReplicaSet

ReplicaSet 一、概述 Kubernetes最核心的功能是编排,编排操作都是依靠控制器对象来完成,高级控制器控制着基础的控制器,基础控制器再去控制Pod,Pod里面再包容器。K8S项目里API对象层级大概就是这样。 而ReplicaSet这个控制器是…...

【基础篇】四、本地部署Flink

文章目录 1、本地独立部署会话模式的Flink2、本地独立部署会话模式的Flink集群3、向Flink集群提交作业4、Standalone方式部署单作业模式5、Standalone方式部署应用模式的Flink Flink的常见三种部署方式: 独立部署(Standalone部署)基于K8S部署…...

简述什么是迭代器(Iterator)?

迭代器(Iterator)是一种设计模式,Java 中的迭代器是集合框架中的一个接口,它可以让程序员遍历集合中的元素而无需暴露集合的内部结构。使用迭代器可以遍历任何类型的集合,例如 List、Set 和 Map 等。 通过调用集合类的 iterator() 方法可以获取一个迭代器,并使用 hasNext…...

DarkGate恶意软件通过消息服务传播

导语 近日,一种名为DarkGate的恶意软件通过消息服务平台如Skype和Microsoft Teams进行传播。它冒充PDF文件,利用用户的好奇心诱使其打开,进而下载并执行恶意代码。这种攻击手段使用了Visual Basic for Applications(VBA&#xff0…...

LeetCode——动态规划篇(六)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 目录 300. 最长递增子序列 - 力扣(LeetCode) 674. 最长连续递增序列 - 力扣(LeetCode) 718. 最长重复子数组 - 力扣&#xff08…...

sql 注入(2), 文件读写 木马植入 远程控制

sql 注入 文件读写 木马植入 远程控制 一, 检测读写权限 查看mysql全局变量 SHOW GLOBAL VARIABLES LIKE %secure%secure_file_priv 空, 则任意读写secure_file_priv 路径, 则只能读写该路径下的文件secure_file_priv NULL, 则禁止读写二, 读取文件, 使用 load_file() 函数…...

求直角三角形第三点的坐标

文章目录 求直角三角形第三点的坐标1. 原理2. 数学公式3. 推导过程 求直角三角形第三点的坐标 1. 原理 已知内容有: P1、P2 两点的坐标; dis1 为 P1与P2两点之间的距离; dis2 为 P2与P3两点之间的距离; 求解: …...

【Kotlin精简】第3章 类与接口

1 简介 Kotlin类的声明和Java没有什么区别,Kotlin中,类的声明也使用class关键字,如果只是声明一个空类,Kotlin和Java没有任何区别,不过定义类的其他成员会有一些区别。实例化类不用写new,类被继承或者重写…...

关于面试以及小白入职后的一些建议

面试的本质 面试的过程是一个互相选择的过程;面试官的诉求是,了解应聘者的个人基本信息、工作态度、专业能力及其他综合能力是否与公司招聘岗位匹配;面试者的诉求是,拿下招聘岗位offer,获得工作报酬; 面试…...

Excel 从网站获取表格

文章目录 导入网站数据导入股票实时行情 用 Excel 获取网站数据的缺点:只能获取表格类的数据,不能获取非结构化的数据。 导入网站数据 转到地址之后: 实测该功能经常导致 Excel 卡死。 导入股票实时行情...

rsync 备份工具(附rsync+inotify 实时同步部署实例)

rsync 备份工具(附rsyncinotify 实时同步部署实例) 1、rsync概述1.1关于rsync1.2rsync 的特点1.3工作原理 2、rsync相关命令2.1基本格式和常用选项2.2启动和关闭rsync服务2.3下行同步基本格式2.4上行同步基本格式2.5免交互2.5.1指定密码文件2.5.2rsync-daemon方式2.…...

Java架构师缓存性能优化

目录 1 缓存的负载策略2 缓存的序列化问题3 缓存命中率低4 缓存对数据库高并发访问5 缓存数据刷新的策略5.1. 实时策略5.2. 异步策略5.3. 定时策略6 何时写缓存7 批量数据来更新缓存8 缓存数据过期的策略9 缓存数据如何恢复10 缓存数据如何迁移11 缓存冷启动和缓存预热想学习架…...

探索服务器潜能:创意项目、在线社区与其他应用

目录 一、部署自己的创意项目 优势: 劣势: 结论: 二、打造一款全新的在线社区 优势: 劣势: 结论: 三、其他用途 总结: 随着互联网的发展,越来越多的人开始拥有自己的服务器…...

「网络编程」网络层协议_ IP协议学习_及深入理解

「前言」文章内容是网络层的IP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、IP协议简介二、IP协议报头三、IP网段划分(子网划分)四、特殊的IP地址五、IP地址的数量限制六、私有IP地址和公网IP地址七、路由八、分…...

Go 1.21 新内置函数:min、max 和 clear

max 函数 func max[T cmp.Ordered](x T, y …T) T 这是一个泛型函数,用于从一组值中寻找并返回 最大值,该函数至少要传递一个参数。在上述函数签名中,T 表示类型参数,它必须满足 cmp.Ordered 接口中定义的数据类型要求&#xff0…...

家居行业如何打破获客困局?2023重庆建博会现场,智哪儿AI营销第一课给出了答案

10月12日-14日,2023中国(重庆)建筑及装饰材料博览会(简称:2023中国重庆建博会)正在重庆国际博览中心如火如荼地进行。「智哪儿」携手2023中国重庆建博会主办方共同主办的《2023家居行业AI营销第一课&#x…...

Spring framework Day11:策略模式中注入所有实现类

前言 什么是策略模式? 策略模式(Strategy Pattern)是一种面向对象设计模式,它定义了算法族(一组相似的算法),并且将每个算法都封装起来,使得它们可以互相替换。策略模式让算法的变…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...