4.5 TCP优化
TCP 三次握手的性能提升
三次握手的过程在一个 HTTP 请求的平均时间占比 10% 以上,所以要正确使用三次握手的中参数,需要先用netstat命令查看是哪个握手阶段出了问题,主动发起连接的客户端优化相对简单些,而服务端需要监听端口,属于被动连接方,其间保持许多的中间状态,优化方法相对复杂一些。
客户端优化
调整SYN报文重传次数
三次握手建立连接的首要目的是「同步序列号」。只有同步序列号才有可靠传输,SYN 的全称就叫 Synchronize Sequence Numbers(同步序列号)。
客户端作为主动发起连接方,首先发送SYN包,于是客户端连接会处于SYN_SENT状态,客户端没有收到服务端传过来的ACK+SYN就会重传SYN,重发的次数由 tcp_syn_retries 参数控制,默认是 5 次;每次超时时间是上一次的2倍。可以根据网络的稳定性和目标服务器的繁忙程度修改 SYN 的重传次数,调整客户端的三次握手时间上限。
服务端优化
调整SYN 半连接队列长度
要想增大半连接队列,不能只单纯增大 tcp_max_syn_backlog 的值,还需一同增大 somaxconn 和 backlog,也就是增大 accept 队列。否则,只单纯增大 tcp_max_syn_backlog 是无效的。
如果 SYN 半连接队列已满,只能丢弃连接吗?
开启 syncookies 功能就可以在不使用 SYN 半连接队列的情况下成功建立连接。
调整 SYN+ACK 报文重传次数
客户端收到服务端的ACK+SYN后恢复ACK给服务器,同时客户端连接状态由SYN-SENT变为ESTABLELISHED,表示连接建立成功,服务端需要接收到客户端的ACK才会变成ESTABLELISHED,如果没收到客户端的ACK就会重传ACK+SYN同时一直处于 SYN_RCV 状态。
当网络繁忙、不稳定时,报文丢失就会变严重,此时应该调大重发次数。反之则可以调小重发次数。修改重发次数的方法是,调整 tcp_synack_retries 参数。
调整accept队列长度
服务器收到ACK后建立连接成功,此时内核会把连接从半连接队列中移除,然后创建新的完全连接,并将其添加到accept队列,等待进程调用accept函数时把连接取出来。
如果进程不能及时地调用 accept 函数,就会造成 accept 队列(也称全连接队列)溢出,最终导致建立好的 TCP 连接被丢弃。
如何查看accept连接队列已满
netstat -s 可以隔几秒钟执行下,如果这个数字一直在增加的话,说明 accept 连接队列偶尔满了。
如何绕过三次握手
TCP Fast Open 功能需要客户端和服务端同时支持,才有效果,使得 HTTP 请求减少了 1 个 RTT 的时间
TCP三次握手优化总结
TCP 四次挥手的性能提升
主动方优化,关闭连接的方式通常有两种,分别是 RST 报文关闭和 FIN 报文关闭。
close函数和shutdown函数有什么区别?
调用了 close 函数意味着完全断开连接,完全断开不仅指无法传输数据,而且也不能发送数据。 此时,调用了 close 函数的一方的连接叫做「孤儿连接」,如果你用 netstat -p 命令,会发现连接对应的进程名为空。
使用 close 函数关闭连接是不优雅的。于是,就出现了一种优雅关闭连接的 shutdown
函数,它可以控制只关闭一个方向的连接:
主动方的优化
调整FIN报文重传次数
第一次挥手 ,调整tcp_orphan_retries参数,降低
调整FIN WAIT2状态的时间
主动方收到ACK后进入FIN—WAIT2状态,表示主动方的发送通道已经关闭,接下来将等待对方发送FIN报文,关闭对方的发送通道。
如果此时连接使用shutdown函数关闭的,连接可以一直处于FIN—WAIT2状态,因为还可以继续发送或接收数据。但是对于close函数关闭的孤儿连接,由于无法再发送和接收数据,所以这个状态不可持续太久,,而 tcp_fin_timeout 控制了这个状态下连接的持续时长,默认值是 60 秒:
调整孤儿连接的上限个数
当进程调用了close函数关闭连接,此时连接就会是孤儿连接,因为无法再发送和接收数据,有个tcp_max_orphans孤儿连接数量参数,大于他就不再走tcp四次挥手直接RST复位报文关闭。
Time wait的作用
①:防止历史连接的数据,被后面相同四元组的连接错误接收:2MSL这个时间足以让两个方向上的历史数据包都被丢弃,使得原来连接的数据包在网路中都自然消失,再出现数据一定都是新建立连接所产生的。
②:保证被动关闭连接的一方,能被正确关闭 :等待足够长的时间使得ACK能让被动关闭方接收,从而帮助其正确关闭。
调整time wait 状态的上限个数
tcp_max_tw_buckets 参数,当 TIME_WAIT 的连接数量超过该参数时,新关闭的连接就不再经历 TIME_WAIT 而直接关闭,并发增多,可以适当增大这个数量,也不是越大越好,资源有限。
复用time_wait状态的连接
tcp_tw_reuse 和 tcp_timestamps 设置为1,只作用在 connect 函数,也就是客户端,将TIME_WAIT状态的端口复用作为客户端的新连接,只适用于客户端。
被动方的优化
close_wait状态的数量
被动方收到FIN就开始进入close_wait状态,等待进程调用close函数关闭连接。因此,出现大量CLOSE_WAIT状态的连接。
减少FIN报文重传次数
TCP 数据传输的性能提升
扩大窗口大小
TCP提供一种可以让发送方数据根据接收方的实际接收能力控制发送的数据量-滑动窗口
内核接收到报文,必须使用缓冲区存放他们,这样剩余缓冲区空间变小,接收窗口也变小;
进程调用read函数,报文被读入内存空间,内核缓存被清空,主机可以接收更多的报文,窗口大。
接收方把报文大小放到TCP报文头部的窗口字段中
默认的滑动窗口最大值只有 64 KB,不满足当今的高速网络的要求,要想提升发送速度必须提升滑动窗口的上限,在 Linux 下是通过设置 tcp_window_scaling
为 1 做到的,此时最大值可高达 1GB。
调整发送缓冲区范围
发送缓冲区是自行调节的,当发送方发送的数据被确认后,并且没有新的数据要发送,就会把发送缓冲区的内存释放掉。
调整接收缓冲区范围
接收缓冲区可以根据系统空闲内存的大小来调节接收窗口:
发送缓冲区的调节功能是自动开启的,而接收缓冲区则需要配置 tcp_moderate_rcvbuf 为 1 来开启调节功能
接收缓冲区动态调节
,我们应该把缓冲区的上限设置为带宽时延积。发送缓冲区的调节功能是自动打开的,而接收缓冲区需要把 tcp_moderate_rcvbuf 设置为 1 来开启。其中,调节的依据是 TCP 内存范围 tcp_mem。
调整内存范围
通过 tcp_mem 配置完成一般情况下这些值是在系统启动时根据系统内存数量计算得到的
相关文章:
4.5 TCP优化
TCP 三次握手的性能提升 三次握手的过程在一个 HTTP 请求的平均时间占比 10% 以上,所以要正确使用三次握手的中参数,需要先用netstat命令查看是哪个握手阶段出了问题,主动发起连接的客户端优化相对简单些,而服务端需要监听端口&a…...
pdf太大怎么压缩大小?这样压缩文件很简单
工作和学习中,用到PDF文件的机会还是比较多的,但有时候PDF文件过大会给我们带来困扰,比如上传PDF文件时会因超出系统大小导致无法上传,这时候简单的解决方法就是压缩PDF文件,下面就来看看具体的操作方法吧~ 方法一&…...
【IMX6ULL驱动开发学习】09.Linux之I2C框架简介和驱动程序模板
参考:Linux之I2C驱动_linux i2c驱动_风间琉璃•的博客-CSDN博客 目录 一、I2C驱动框架简介 1.1 I2C总线驱动 1.2 I2C设备驱动 二、I2C总线-设备-驱动模型 2.1 i2c_driver 2.2 i2c_client 2.3 I2C 设备数据收发和处理 三、Linux I2C驱动程序模板…...
【seaweedfs】3、f4: Facebook’s Warm BLOB Storage System 分布式对象存储的冷热数据
论文地址 Facebook的照片、视频和其他需要可靠存储和快速访问的二进制大型对象(BLOB)的语料库非常庞大,而且还在继续增长。随着BLOB占用空间的增加,将它们存储在我们传统的存储系统-- Haystack 中变得越来越低效。为了提高我们的存储效率(以Blob的有效复…...
基于亚马逊云科技服务,构建大语言模型问答知识库
随着大语言模型效果明显提升,其相关的应用不断涌现呈现出越来越火爆的趋势。其中一种比较被广泛关注的技术路线是大语言模型(LLM)知识召回(Knowledge Retrieval)的方式,在私域知识问答方面可以很好的弥补通…...
SpingMVC拦截器-用户登录权限控制分析
视频链接:08-SpringMVC拦截器-用户登录权限控制代码实现2_哔哩哔哩_bilibili 114 1、做了一个用户跟角色添加的相关操作 1.1 这个后台工程,没有进行相关操作也能够进行登录: 2、现在我做一个用户的权限控制,如果当前我没有进行操…...
MDTA模块(Restormer)
From a layer normalized tensor Y ∈ R H ^ W ^ C ^ \mathbf{Y} \in \mathbb{R}^{\hat{H} \times \hat{W} \times \hat{C}} Y∈RH^W^C^, our MDTA first generates query ( Q ) (\mathbf{Q}) (Q), key ( K ) (\mathbf{K}) (K) and value ( V ) (\mathbf{V}) (V) project…...
C++ 新特性 | C++ 11 | decltype 关键字
一、decltype 关键字 1、介绍 decltype 是 C11 新增的一个用来推导表达式类型的关键字。和 auto 的功能一样,用来在编译时期进行自动类型推导。引入 decltype 是因为 auto 并不适用于所有的自动类型推导场景,在某些特殊情况下 auto 用起来很不方便&…...
2023国赛数学建模思路 - 案例:退火算法
文章目录 1 退火算法原理1.1 物理背景1.2 背后的数学模型 2 退火算法实现2.1 算法流程2.2算法实现 建模资料 ## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&a…...
ubuntu20.04 编译安装运行emqx
文章目录 安装依赖编译运行登录dashboard压力测试 安装依赖 Erlang/OTP OTP 24 或 25 版本 apt-get install libncurses5-dev sudo apt-get install erlang如果安装的erlang版本小于24的话,可以使用如下方法自行编译erlang 1.源码获取 wget https://github.com/erla…...
ARM linux ALSA 音频驱动开发方法
+他V hezkz17进数字音频系统研究开发交流答疑群(课题组) 一 linux ALSA介绍 ALSA (Advanced Linux Sound Architecture) 是一个用于提供音频功能的开源软件框架。它是Linux操作系统中音频驱动程序和用户空间应用程序之间的接口。ALSA 提供了访问声卡硬件的低级别API,并支持…...
设计模式二十三:模板方法模式(Template Method Pattern)
定义了一个算法的框架,将算法的具体步骤延迟到子类中实现。这样可以在不改变算法结构的情况下,允许子类重写算法的特定步骤以满足自己的需求 模版方法使用场景 算法框架固定,但具体步骤可以变化:当你有一个算法的整体结构是固定…...
[Linux]进程状态
[Linux]进程状态 文章目录 [Linux]进程状态进程状态的概念阻塞状态挂起状态Linux下的进程状态孤儿进程 进程状态的概念 了解进程状态前,首先要知道一个正在运行的进程不是无时无刻都在CPU上进行运算的,而是在操作系统的管理下,和其他正在运行…...
Python爬虫逆向实战案例(五)——YRX竞赛题第五题
题目:抓取全部5页直播间热度,计算前5名直播间热度的加和 地址:https://match.yuanrenxue.cn/match/5 cookie中m值分析 首先打开开发者工具进行抓包分析,从抓到的包来看,参数传递了查询参数m与f,同时页面中…...
js识别图片中的文字插件 tesseract.js
使用方法及步骤 1.安装依赖 npm i tesseract.js 2.引入插件 import { createWorker } from tesseract.js;//worker多线程引入这个import Tesseract from tesseract.js;//js单线程引入这个 3.使用插件识别图片 //使用worker线程识别(async () > {console.time()const wo…...
Linux设备驱动移植(设备数)
一、设备数 设备树是一种描述硬件信息的数据结构,Linux内核运行时可以通过设备树将硬件信息直接传递给Linux内核,而不再需要在Linux内核中包含大量的冗余编码 设备数语法概述 设备树文件 dts 设备树源文件 dtsi 类似于头文件,包含一些公共的…...
【移动端开发】鸿蒙系统开发入门:代码示例与详解
一、引言 随着华为鸿蒙系统的日益成熟,越来越多的开发者开始关注这一新兴的操作平台。本文旨在为初学者提供一份详尽的鸿蒙系统开发入门指南,通过具体的代码示例,引导大家逐步掌握鸿蒙开发的基本概念和技术。 二、鸿蒙系统开发基础 鸿蒙系…...
Jenkins的流水线详解
来源:u.kubeinfo.cn/ozoxBB 什么是流水线 声明式流水线 Jenkinsfile 的使用 什么是流水线 jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。…...
DIFFEDIT-图像编辑论文解读
文章目录 摘要算法Step1:计算编辑maskStep2:编码Step3:使用mask引导进行解码理论分析: 实验数据集:扩散模型:ImageNet数据集上实验消融实验IMAGEN数据集上实验COCO数据集上实验 结论 论文: 《D…...
【优选算法】—— 字符串匹配算法
在本期的字符串匹配算法中,我将给大家带来常见的两种经典的示例: 1、暴力匹配(BF)算法 2、KMP算法 目录 (一)暴力匹配(BF)算法 1、思想 2、演示 3、代码展示 (二&…...
Docker容器:docker consul的注册与发现及consul-template守护进程
文章目录 一.docker consul的注册与发现介绍1.什么是服务注册与发现2.什么是consul3.docker consul的应用场景4.consul提供的一些关键特性5.数据流向 二.consul部署1.consul服务器(192.168.198.12)(1)建立 Consul 服务启动consul后…...
Blazor 依赖注入妙用:巧设回调
文章目录 前言依赖注入特性需求解决方案示意图 前言 依赖注入我之前写过一篇文章,没看过的可以看看这个。 C# Blazor 学习笔记(10):依赖注入 依赖注入特性 只能Razor组件中注入所有Razor组件在作用域注入的都是同一个依赖。作用域可以看看我之前的文章。 需求 …...
Python 基础 -- Tutorial(三)
7、输入和输出 有几种方法可以表示程序的输出;数据可以以人类可读的形式打印出来,或者写入文件以备将来使用。本章将讨论其中的一些可能性。 7.1 更花哨的输出格式 到目前为止,我们已经遇到了两种写值的方法:表达式语句和print()函数。(第三种方法是使…...
基于STM32的四旋翼无人机项目(二):MPU6050姿态解算(含上位机3D姿态显示教学)
前言:本文为手把手教学飞控核心知识点之一的姿态解算——MPU6050 姿态解算(飞控专栏第2篇)。项目中飞行器使用 MPU6050 传感器对飞行器的姿态进行解算(四元数方法),搭配设计的卡尔曼滤波器与一阶低通滤波器…...
微信小程序开发教学系列(1)- 开发入门
第一章:微信小程序简介与入门 1.1 简介 微信小程序是一种基于微信平台的应用程序,可以在微信内直接使用,无需下载和安装。它具有小巧、高效、便捷的特点,可以满足用户在微信中获取信息、使用服务的需求。 微信小程序采用前端技…...
Nginx虚拟主机(server块)部署Vue项目
需求 配置虚拟主机,实现一个Nginx运行多个服务。 实现 使用Server块。不同的端口号,表示不同的服务;同时在配置中指定,Vue安装包所在的位置。 配置 Vue项目,放在 html/test 目录下。 config中的配置如下…...
JAVA开发环境接口swagger-ui使用总结
一、前言 swagger-ui是java开发中生产api说明文档的插件,这是后端工程师和前端工程师联调接口的桥梁。生成的文档就减少了很多没必要的沟通提高开发和测试效率。 二、 swagger-ui的使用 1、引入maven依赖 <dependency><groupId>io.springfox</grou…...
mongodb 数据库管理(数据库、集合、文档)
目录 一、数据库操作 1、创建数据库 2、删除数据库 二、集合操作 1、创建集合 2、删除集合 三、文档操作 1、创建文档 2、 插入文档 3、查看文档 4、更新文档 1)update() 方法 2)replace() 方法 一、数据库操作 1、创建数据库 创建数据库…...
分布式与集群的定义及异同
分布式与集群的定义及异同 分布式定义优点不足 集群优点不足 异同 分布式 定义 分布式是指将一个系统或应用程序分散到多个计算机或服务器上进行处理和管理的技术。它是指多个系统协同合作完成一个特定任务的系统。例如,可以将一个大业务拆分成多个子业务…...
电脑端teams一直在线小程序,简单好用易上手
居家办公的你,会不会想要摸鱼!!会不会想要下楼拿快递!!会不会想要出去下馆子!!!然而,teams的5分钟不操作电脑状态就变为离开大大的阻挡了你幸福生活的脚步!&a…...
网站建设静态部分报告总结/搜索引擎营销的优势和劣势
编程新手都遇到过,跟着视频敲代码,很容易,项目里面的功能都可以仿照实现。 但如果交给你完整的实现一个全新应用项目,就不知道从哪里开始。 甚至好多初学者过个一头半个月都不知道项目里面运用了哪些知识点,连项目本身…...
有哪些建设工程类网站/视频营销成功的案例
Android WeakReference 带来的问题 背景 其实开始的时候本人也像很多人一样,因为Handler出现的内存泄露问题,因此开始使用起weakReference的,还信心满满的以为,从此我和我的小伙伴再也不担心内存泄露。 然而,其实weakR…...
如何实现网站开发手机验证码/aso优化分析
http://hi.baidu.com/james_yulei/blog/item/22af66eccf7b5cf7b2fb9539.html转载于:https://www.cnblogs.com/piaopiao7891/archive/2012/07/03/2574248.html...
有哪些网站可以做任务返现/网络营销人员招聘
复制/移动或删除文件 File类的Copy/Move方法 1.将C盘根目录下的Text.txt文本文件复制到D盘根目录下 File.Copy("C:\\Text.txt","D:\\Text.txt"); 2.将C盘根目录下的Text.txt文本文件移动到D盘根目录下 File.Move("C:\\Text.txt","D:\\Text.…...
网站配色设计/网络营销的三种方式
本文内容来源于网络整理 学习编程虽然对有些人来说是件乐事,但是对大多数人来说仍然是一件比较枯燥困难的事情。当然,面临这样困惑的人并不是你一个。于是就出现了许多通过游戏来教你编程的平台,寓教于乐,让你快乐学习编程。 今天…...
石家庄企业如何建网站/一键seo提交收录
log4j没有实现类,需引入slf4j实现转载于:https://www.cnblogs.com/youcandoit-/p/8078947.html...