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

拥塞控制与TCP子问题(粘包问题,异常情况等)

​拥塞控制

除了拥塞控制

以上的策越都是为了解决tcp 客户端和服务端提高效率,解决丢包的策略

但是拥塞控制是了为解决网络拥堵

出现了大面积丢包,我们发送方会判定是网络出现了问题?

丢包好解决,我们直接采用超时重传,但是此时网络已经出问题了,你再重传,不还是丢包吗,并且网络出问题,其他服务器也会出现问题,此时大量的报文重传,对网络造成更的重创

TCP考虑了网络,出现大面积丢包->判断网络出现堵塞->拥堵避免算法

虽然TCP有了滑动窗口这个大杀器,能够高效可靠的发送大量的数据,但是如果在刚开始阶段就发送大量的数据,仍然可能引发问题.

因为网络上有很多的计算机,可能当前的网络状态就已经比较拥堵,在不清楚当前网络状态下,贸然发送大量的数据是很有可能引起雪上加霜的.

拥塞窗口

拥塞窗口采用慢启动策略

慢启动策略 2的n次方 以指数级增长

前期慢,增数快

​​​​

拥塞窗口就是一个数字,放发送数据量超过了拥塞窗口,就很大概率,引发网络拥塞

滑动窗口不仅仅考虑对方接受数据能力的多少,还要考虑网络情况

滑动窗口决定了我们一次发送数据量的大小

要做到上面两点?

滑动窗口大小=min(拥塞窗口,对方窗口大小)

滑动窗口初始end=min(拥塞窗口,对方窗口大小)

我们需要担心后期指数增速太快,造成网络拥塞?

a.不用担心,滑动窗口大小=min(拥塞窗口,对方窗口大小),当拥塞床快增长到一定程度,会被对方窗口大小所牵制

b.我们还引入了慢启动的阈值 ssthresh,当超过阈值,指数增长变成线性增长,造成了网络拥塞,我们直接将拥塞窗口降为1,但此时我们已经知道会引起网络拥塞的最大典,后面增长就可以避免拥塞,这种策越我们就叫做拥塞控制算法

但是网络窗口不会停止变化,它要一直变化,对网络的状况进行检测

tips:这张图并不是网络实际的发送量,还要考虑对方的窗口大小

总结: 通过控制拥塞窗口和慢启动阈值达到发送数据速率达到最大值就叫拥塞控制

Tcp想要尽快的传输数据给对方,又要考虑网络拥堵所采取的折中的方案

延迟应答

如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小.

提高了tcp传输效率

​​​

当主机A发出第一个报文,主机B可以等一等,再应答,等主机发了地等上层取走缓冲区的数据,主机B可以给主机A一个更大的窗口。

捎带应答

发送ACK+数据的报文

确认序号填的就是ACK的确认序号

序号填的是数据序号

合在一起就叫捎带应答

TCP子问题

面向字节流

创建TCP的一个socket,同时会在内核中创建发送缓冲区和接受缓冲区

可能10个报文的数据都是在缓冲区的,也可能是20个,我们不管,我们只要考虑上层从缓冲区读取一个个字节再到上层进行处理。

粘包问题

没有定任何协议,我们没有对从缓冲区读取的字节流做处理,导致数据多读或少读,导致数据粘黏

由用户层定义协议就是为了解决数据粘包问题

例如http按行读取报头,再读到空行,再读到携带数据。解决了基于tcp的http协议的粘包问题

而udp有没有这个问题呢?

没有,他是以数据包的形式发送的

所以我们用户使用tcp得解决两个问题?

1.解决粘包问题

2.对数据进行序列化和反序列化

Tcp异常情况

进程终止:自动正常关闭(四次挥手)

机器重启:提示用户是否关闭进程

机器断电/拔网线:没机会四次挥手,服务端会保活,试探客户端是否还活着。

网线一拔一插:客户端建立新连接,但莫名收到服务器上一次连接的报文,此时客户端发送RST,立即终止旧的连接。

相关文章:

拥塞控制与TCP子问题(粘包问题,异常情况等)

​拥塞控制 除了拥塞控制 以上的策越都是为了解决tcp 客户端和服务端提高效率,解决丢包的策略 但是拥塞控制是了为解决网络拥堵 出现了大面积丢包,我们发送方会判定是网络出现了问题? 丢包好解决,我们直接采用超时重传&#…...

stm32入门教程--DMA 超详细!!!

目录 简介 工作模式 1、数据转运DMA 2、ADC扫描模式DMA 简介 工作模式 1、数据转运DMA 这个例子的任务是将SRAM的数组DataA,转运到另一个数组DataB中,这个基本结构里的各个参数应该如何配置呢? 首先是外设站点和存储器站点的起始地址、…...

【使用Flask构建RESTful API】从零开始开发简单的Web服务!

使用Flask构建RESTful API:从零开始开发简单的Web服务 引言 随着Web应用程序的广泛使用,RESTful API已成为现代Web服务的核心技术之一。通过RESTful API,我们可以轻松地创建、读取、更新和删除(CRUD)数据&#xff0c…...

用sdcc给51单片机编译C程序

学习单片机大部分人用的是Keil uVision,虽然好用,可大部分人用的是盗版,其实单片机程序小的话,完全可以用文本编辑器(推荐notepad)编写,然后用免费的sdcc来编译,下面介绍一下大致的过程。 sdcc…...

Java Lock LockSupport 源码

前言 相关系列 《Java & Lock & 目录》(持续更新)《Java & Lock & LockSupport & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Java & Lock & LockSupport & 总结》(学习总结/最新…...

Elasticsearch基础操作入门

阅前准备知识 学习 Elasticsearch (简称 ES) 的查询方式,建议从以下几个步骤入手: 理解 Elasticsearch 的基础概念 首先要了解 Elasticsearch 的核心概念,例如: Index(索引):相当于数据库中…...

跨域问题解决办法

跨域问题在Web开发中是一个常见的问题,特别是在前后端分离的开发模式下。以下是一些解决跨域问题的办法: 一、后端配置CORS(跨来源资源共享) CORS是一种机制,它使用额外的HTTP头来告诉浏览器一个网页的当前来源&…...

【数据结构与算法】力扣 23. 合并 K 个升序链表

题干描述 23. 合并 K 个升序链表 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入: lists [[1,4,5],[1,3,4],[2,6]] 输出: [1,1,2,3,4,4,5,6]…...

Java Lock CountDownLatch 总结

前言 相关系列 《Java & Lock & 目录》(持续更新)《Java & Lock & CountDownLatch & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Java & Lock & CountDownLatch & 总结》(学习总…...

vue+spreadjs开发

创建vue3项目 pnpm create vite --registryhttp://registry.npm.taobao.org安装spreadjs包 pnpm install "grapecity-software/spread-sheets17.1.7" "grapecity-software/spread-sheets-resources-zh17.1.7" "grapecity-software/spread-sheets-vu…...

针对初学者的PyTorch项目推荐

文章目录 1. MNIST手写数字识别2. CIFAR-10图像分类3. 图像风格迁移4. 文本生成(使用RNN)5. 简单的问答系统6. 简单的生成对抗网络(GAN)7. 简单的推荐系统 对于初学者来说,选择一些简单且具有教育意义的项目来实践PyTo…...

Helm Chart文件介绍

介绍(这个还没有完善 ,目前在找工作呢) Helm是Kubernetes的包管理器,类似于Ubuntu中的apt、CentOS中的yum或Python中的pip,可以快速查找、下载和安装软件包。Helm主要由客户端组件helm和服务端组件Tiller组成&#xf…...

1Panel 是新一代的 Linux 服务器运维管理面板

1Panel 是一款新一代的 Linux 服务器运维管理面板,旨在通过现代化的 Web 界面帮助用户轻松管理 Linux 服务器。它集成了主机监控、文件管理、数据库管理、容器管理等功能,并且支持多语言和国际化,包括英语、中文(繁体)和日语。以下是 1Panel …...

Qml-ShaderEffect的使用

Qml-ShaderEffect的使用 ShaderEffect的概述 ShaderEffect使用自定义的顶点和片段着色器用于渲染一个矩形。用于在qml场景中添加阴影、模糊、着色和页面卷曲等效果。 Qt5和Qt6中ShaderEffect有一定区别,在Qt6中由于支持不同的渲染API,ShaderEffect是用…...

鸿蒙next之axios二次封装并携带cookie

由于官方提供的ohos.net.http模块,直接使用不是很灵活,就引入了第三方ohos/axios库。 以下是引入axios并进行二次封装的步骤: 1、DevEco Studio打开终端输入命令安装插件 ohpm install ohos/axios 2、新建RequestUtil.ets import { JSON, …...

WordPress中最值得推荐的AI插件:专家级指南

WordPress平台上,人工智能(AI)技术不断发展,为用户提供了丰富的工具和功能。对于有经验的用户,这些工具不仅能提升网站性能和用户体验,还能在安全和互动方面提供更多支持。在这篇文章中,我将为大…...

HTTP介绍及请求过程

HTTP(HyperText Transfer Protocol),即超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。以下是关于 HTTP 的详细介绍: 一、基本概念 定义与作用: HTTP 是互联网上应用最为广泛的一种网络协议,它定义了客户端和服务器之间请求和响应的标准方式。…...

WebGL进阶(五)-可视域

理论基础: 顶点着色器 Vertex Shader 主要是负责处理顶点位置、顶点颜色、顶点向量等顶点的数据;处理一些顶点的变换:例如在进行视图变换和投影变换时MVP矩阵会改变顶点的位置信息。 输入: 顶点着色器输入部分主要是声明&…...

2024性价比家居好物有哪些?推荐五款值得每个家庭拥有的好物品牌!

每年双11的时候我都特别喜欢买一些家居好物,今年双11也不例外,经过我一两周的精心挑选,专门选了五款性价比高的家居好物,接下来给大家分享一下! 家居好物一、希亦ACE Pro内衣洗衣机 我买过、评测过的内衣洗衣机&#…...

字节青训-查找热点数据问题

问题描述 给你一个整数数组 nums 和一个整数 k&#xff0c;请你返回其中出现频率前 k 高的元素。请按升序排列。 1 < nums.length < 10^5k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一&#xff0c;换句话说&#xff0c;数组中前 k 个高频元素的集合…...

T型翼/尾板导向的穿浪双体船姿态控制【附代码】

✨ 长期致力于穿浪双体船、T型翼、尾板、多自由度姿态控制、舒适性评估研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;动态水翼升力模型与耦合运动方…...

Allegro PCB设计小技巧:如何让Route Keepout区域既能走线又能打过孔(附详细步骤图)

Allegro PCB设计实战&#xff1a;Route Keepout区域的灵活控制技巧 在高速PCB设计中&#xff0c;Route Keepout区域的管理常常让工程师陷入两难境地——元件封装自带的限制区域与实际布线需求产生冲突。特别是处理PCIE等高速信号时&#xff0c;这种矛盾尤为突出。传统做法要么完…...

开源ELM327 OBD-II适配器:从硬件设计到多协议固件实现全解析

1. 项目概述&#xff1a;开源ELM327 OBD适配器如果你对汽车诊断、数据监控或者嵌入式开发感兴趣&#xff0c;那么自己动手做一个OBD-II适配器绝对是个能让你学到很多东西的硬核项目。今天要聊的&#xff0c;就是一个完全开源的、基于NXP LPC1517微控制器的ELM327兼容OBD适配器。…...

yolo视频识别 车辆速度估计识别 yolo11视频实时速度测量与测速估计

文章目录YOLOv11&#xff1a;视频实时速度测量与测速估计一、YOLOv11概述二、速度测量原理三、距离测量方法四、应用场景五、实践案例以下是关于使用YOLOv11进行视频实时速度测量与测速估计的介绍&#xff1a; YOLOv11&#xff1a;视频实时速度测量与测速估计 随着计算机视觉…...

基于SMD与贝壳的微型音频装置:从电路设计到嵌入式开发的完整实践

1. 项目概述&#xff1a;一个藏在贝壳里的声音世界你小时候有没有捡起一个海螺壳&#xff0c;把它贴在耳边&#xff0c;然后听到里面传来“呜呜”的海风声&#xff1f;那个瞬间&#xff0c;仿佛整个海洋都被装进了小小的贝壳里。今天这个项目&#xff0c;就是把那个童年的魔法&…...

告别漫长等待:UE5.2.1 Windows打包效率优化与插件问题排查指南

告别漫长等待&#xff1a;UE5.2.1 Windows打包效率优化与插件问题排查指南第一次点击"打包项目"按钮时&#xff0c;进度条仿佛被冻结的场景&#xff0c;每个UE5开发者都经历过。尤其当项目规模达到数十GB时&#xff0c;等待时间可能超过一小时——这背后隐藏着引擎底…...

Arduino ADC自检:用RC电路诊断模数转换器故障

1. 项目概述&#xff1a;当你的体重秤开始“说谎”你有没有遇到过这样的情况&#xff1a;站上家里的电子体重秤&#xff0c;屏幕上跳出来的数字让你瞬间怀疑人生&#xff1f;要么是轻得离谱&#xff0c;要么是重得吓人&#xff0c;更诡异的是&#xff0c;它可能只在两个固定的、…...

别再瞎拖拽了!Unity Prefab从创建到批量修改的保姆级工作流(含变体与嵌套实战)

Unity Prefab高效工作流&#xff1a;从创建到批量修改的实战指南在Unity项目开发中&#xff0c;Prefab&#xff08;预制体&#xff09;是最基础也最强大的工具之一。但很多开发者&#xff0c;尤其是初学者&#xff0c;往往停留在简单的"拖拽-修改"阶段&#xff0c;没…...

XZ1018,100V,40A,NMOS 封装:TO252

封装&#xff1a;TO252类型&#xff1a;NVDS&#xff1a;100V VGS&#xff1a; 20V ID&#xff1a;40ARDS(ON)&#xff1a;10V <14mΩRDS(ON)&#xff1a;4.5V <19mΩ型号&#xff1a; XZ1018 封装&#xff1a;TO252类型&#xf…...

Metabase:零代码 BI 数据可视化工具,自建数据看板

Metabase&#xff1a;零代码 BI 数据可视化工具&#xff0c;自建数据看板 在数据驱动决策的时代&#xff0c;能快速看到业务数据的变化趋势至关重要。然而&#xff0c;专业 BI 工具&#xff08;如 Tableau、Power BI&#xff09;价格昂贵&#xff0c;而让每个业务同学都学 SQL …...