TCP缓冲区和4次挥手调优

news2024/11/26 12:35:42

目录

如何修改TCP缓冲区才能兼顾并发数量与传输速度?

四次挥手性能调优

1,为什么建立连接是三次握手,而关闭连接需要四次挥手呢?

2.四次挥手的流程,注意5个状态 

 3.主动方优化

4,被动方调优

最后


如何修改TCP缓冲区才能兼顾并发数量与传输速度?

----------缓冲区动态调节功能-----------

①发送缓冲区自动调整(自动开启): net.ipv4.tcp_wmem = 4096(动态范围下限) 16384(初始默认值) 4194304(动态范围上限) 一旦发送出的数据被确认,而且没有新的数据要发送,就可以把发送缓冲区的内存释放掉

②接收缓冲区自动调整(通过设置net.ipv4.tcp_moderate_rcvbuf = 1开启): net.ipv4.tcp_rmem = 4096(动态范围下限) 87380(初始默认值) 6291456(动态范围上限) 可以依据空闲系统内存的数量来调节接收窗口。如果系统的空闲内存很多,就可以把缓冲区增大一些,这样传给对方的接收窗口也会变大,因而对方的发送速度就会通过增加飞行报文来提升。反之,内存紧张时就会缩小缓冲区,这虽然会减慢速度,但可以保证更多的并发连接正常工作。

③接收缓冲区判断内存空闲的方式: net.ipv4.tcp_mem = 88560 118080 177120 当 TCP 内存小于第 1 个值时,不需要进行自动调节; 在第 1 和第 2 个值之间时,内核开始调节接收缓冲区的大小; 大于第 3 个值时,内核不再为 TCP 分配新内存,此时新连接是无法建立的。 ④带宽时延积的衡量方式:对网络时延多次取样计算平均值,再乘以带宽。


四次挥手性能调优

1,为什么建立连接是三次握手,而关闭连接需要四次挥手呢?

这是因为 TCP 不允许连接处于半打开状态时就单向传输数据,所以在三次握手建立连接时,服务器会把 ACK 和 SYN 放在一起发给客户端,其中,ACK 用来打开客户端的发送通道,SYN 用来打开服务器的发送通道。这样,原本的四次握手就降为三次握手了

 

2.四次挥手的流程,注意5个状态 

 

 3.主动方优化

关闭连接有多种方式,比如进程异常退出时,针对它打开的连接,内核就会发送 RST 报文来关闭。RST 的全称是 Reset 复位的意思,它可以不走四次挥手强行关闭连接,但当报文延迟或者重复传输时,这种方式会导致数据错乱,所以这是不得已而为之的关闭连接方案.

安全关闭连接的方式必须通过四次挥手,它由进程调用 close 或者 shutdown 函数发起,这二者都会向对方发送 FIN 报文(shutdown 参数须传入 SHUT_WR 或者 SHUT_RDWR 才会发送 FIN),区别在于 close 调用后,哪怕对方在半关闭状态下发送的数据到达主动方,进程也无法接收。

此时,这个连接叫做孤儿连接,如果你用 netstat -p 命令,会发现连接对应的进程名为空。而 shutdown 函数调用后,即使连接进入了 FIN_WAIT1 或者 FIN_WAIT2 状态,它也不是孤儿连接,进程仍然可以继续接收数据。 

当连接收到 ACK 进入 FIN_WAIT2 状态后,就表示主动方的发送通道已经关闭,接下来将等待对方发送 FIN 报文,关闭对方的发送通道。这时,如果连接是用 shutdown 函数关闭的,连接可以一直处于 FIN_WAIT2 状态。但对于 close 函数关闭的孤儿连接,这个状态不可以持续太久,默认是60秒.这里的60秒和我们TIME_WAIT 状态的60秒一样.这是因为这两个状态都需要保持 2MSL 时长。MSL 全称是 Maximum Segment Lifetime,它定义了一个报文在网络中的最长生存时间(报文每经过一次路由器的转发,IP 头部的 TTL 字段就会减 1,减到 0 时报文就被丢弃,这就限制了报文的最长存活时间)。

四次挥手的主动方,为了应对丢包,允许在 tcp_orphan_retries 次数内重发 FIN 报文。当收到 ACK 报文,连接就进入了 FIN_WAIT2 状态,此时系统的行为依赖这是否为孤儿连接。

如果这是 close 函数关闭的孤儿连接,那么在 tcp_fin_timeout 秒内没有收到对方的 FIN 报文,连接就直接关闭,反之 shutdown 函数关闭的连接则不受此限制。毕竟孤儿连接可能在重发次数内存在数分钟之久,为了应对孤儿连接占用太多的资源,tcp_max_orphans 定义了最大孤儿连接的数量,超过时连接就会直接释放。

当接收到 FIN 报文,并返回 ACK 后,主动方的连接进入 TIME_WAIT 状态。这一状态会持续 1 分钟,为了防止 TIME_WAIT 状态占用太多的资源,tcp_max_tw_buckets 定义了最大数量,超过时连接也会直接释放。当 TIME_WAIT 状态过多时,还可以通过设置 tcp_tw_reuse 和tcp_timestamps 为 1 ,将 TIME_WAIT 状态的端口复用于作为客户端的新连接。

4,被动方调优

被动关闭的连接方应对非常简单,它在回复 ACK 后就进入了 CLOSE_WAIT 状态,等待进程调用 close 函数关闭连接。因此,出现大量 CLOSE_WAIT 状态的连接时,应当从应用程序中找问题。当被动方发送 FIN 报文后,连接就进入 LAST_ACK 状态,在未等来 ACK 时,会在 tcp_orphan_retries 参数的控制下重发 FIN 报文。需要你注意的是,如果被动方迅速调用 close 函数,那么被动方的 ACK 和 FIN 有可能在一个报文中发送,这样看起来,四次挥手会变成三次挥手,这只是一种特殊情况,不用在意。

最后

 接下来,双方在等待 ACK 报文的过程中,都等来了 FIN 报文。这是一种新情况,所以连接会进入一种叫做 CLOSING 的新状态,它替代了 FIN_WAIT2 状态。此时,内核回复 ACK 确认对方发送通道的关闭,仅己方的 FIN 报文对应的 ACK 还没有收到。所以,CLOSING 状态与 LAST_ACK 状态下的连接很相似,它会在适时重发 FIN 报文的情况下最终关闭

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NUC972开发板学习过程

1、搭建linux环境的过程,设置交叉编译器的环境变量过程中会出现各种问题; 解决方法: 第一步、一定要Ubuntu系统换源,换源后sudo apt-get update; 第二步、sudo apt-get install lib32stdc6 第三步、使用 vim编辑器…

创新指南|连锁经营,先从单店盈利模型做起

随着数字化时代的到来,数据成为了企业创新的重要资源。有价值的数据的涌现和发展为企业提供了前所未有的机会。数据为创新带来新动力,创造了新产品和服务、产生了新的商业模式,并带来了新的创业机会。数据驱动的创新已成为许多企业创新的重要…

4.1.tensorRT基础(1)-概述

目录 前言1. tensorRT基础概述2. tensorRT补充知识2.1 什么是tensorRT?2.2 tensorRT特性2.3 tensorRT工作流程2.4 常见方案2.5 tensorRT库文件 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记&#…

springboot+ElasticSearch+Logstash+Kibana实现日志采集ELK

ElasticSearchLogstashKibana日志管理 一、什么是ELK? ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。一般情况下我们可以把日志保存在日志文件当中,也可以把日志存入数据库当中。但随着业务量的增加&#xf…

2.多线程-初阶(上)

文章目录 1. 认识线程(Thread)1.1 概念1.2 第一个多线程程序1.3 创建线程1.3.1方法1 继承 Thread 类1.3.2方法2 实现 Runnable 接口 1.4 多线程的优势-增加运行速度1.5 PCB、PID、进程和线程之间的关系 2. Thread(/θred/) 类及常见方法2.1 Thread 的常见…

《Maven实战》读后感

目录 一、一些思考1、为什么平时编写的Java项目也叫做Maven项目?2、平常的Java项目目录为什么长这样,可以改变目录结构吗?3、对于Maven项目来说,Maven能帮我们做什么?4、为什么一定需要Maven私服,不要行不行…

easyrecovery数据恢复软件2023免费版下载

easyrecovery数据恢复软件2023免费版下载是一款操作简单、功能强大数据恢复软件,通过easyrecovery可以从硬盘、光盘、U盘、数码相机、手机等各种设备中恢复被删除或丢失的文件、图片、音频、视频等数据文件。 EasyRecovery数据恢复软件是一款功能强大的数据恢复软件&#xff0c…

卡尔曼滤波的理解

看了B站up主DR_CAN讲的卡尔曼滤波(链接)。up讲的非常好,强烈推荐,看完终于明白了卡尔曼滤波的奥秘。下面是我对其中内容的注解,或者说自己的理解。大部分推导省略了,但保留了算法的思想脉络。 引入 首先看…

Verilog基础之十七、锁相环PLL

目录 一、前言 1.1 背景 1.2 PLL结构 二、工程设计 2.1 PLL IP核配置 2.2 设计代码 2.3 测试代码 2.4 仿真结果 2.5 常见问题 一、前言 1.1 背景 若将一个FPGA工程看做一个人体,时钟的重要性丝毫不亚于心脏对于人体的重要性,时钟的每一个周期对…

支付、购物车、搜索、文件上传、登录、还款、订单测试怎么做?

支付功能怎么测试:1、从功能方面考虑: 1)、正常完成支付的流程; 2)、支付中断后继续支付的流程; 3)、支付中断后结束支付的流程; 4)、单订单支付的流程; 5&am…

【无标题】(前沿)

Java编程语言 目前为止最流行的 是Java编程语言 但是编程与语言有很多中php。phyone。 c c. c# java html. css javascript vue() 说到计算机有很多同学会说,就有很多人会说35的节点,我问一下同学们现在哪一个行业,是没有35岁的节点&#x…

7.5 SpringBoot 拦截器Interceptor实战 统一角色权限校验

文章目录 前言一、定义注解annotation二、拦截角色注解1. 在拦截器哪里拦截?2. 如何拦截角色注解?3. 角色如何读取?4. 最后做角色校验 三、应用:给管理员操作接口加注解四、PostMan测试最后 前言 在【7.1】管理员图书录入和修改API&#xf…

c语言指针进阶(二)

目录 引言 函数指针数组 指向函数指针数组的指针 回调函数 引言 大家好,我是c语言boom成家宝,今天博主带来的依然是指针的进阶讲解。上一篇博客博主有介绍指针,数组指针,指针数组,以及函数指针的概念以及应用&…

【Azure】Azure成本管理:规划、监控、计算和优化成本 [文末送书]

开篇先来一个不是总结的总结:平衡成本与性能始终是一个重大挑战。(此处省略各种场景的解释) 文章目录 前言一、Azure 成本管理工具1.1 什么是成本管理1.2 成本管理的主要功能 二、Azure 中可能影响成本的因素2.1 影响成本的因素2.1.1 资源类型…

leetcode|math|9.172.69.50.

9. Palindrome Number to_string 就行 172. Factorial Trailing Zeroes 不能直接乘起来,会overflow!! 166! 就是要找166乘到1一共有几个5。5,10,15,25...都算。166/5就是算一共有几个5。但是25其实贡献了…

【周末闲谈】感受AI时代魅力,创意无界限

i 个人主页:【😊个人主页】 系列专栏:【❤️周末闲谈】 文章目录 前言人工智能的应用领域问题求解逻辑推理与定理证明自然语言处理智能信息检索技术专家系统 人工智能的三大短板展望未来从专用智能向通用智能发展从人工智能向人机混合智能发展…

Jdk 版本升级

Jdk 版本升级(多版本配置) 一、配置多版本 首先如果系统第一次安装JDK 1.登录oracle官网Java Downloads | Oracle下载,此教程以Jdk1.8为例,一键下一步即可安装成功。 2.配置环境变量 然后在系统path路径中添加: %JAVA_HOME%…

单片机第一季:零基础10——串口通信和RS485

目录 1,串口通讯基础 1.1,同步和异步 1.2,并行和串行 1.3,单工、半双工与全双工通信 1.4,通信速率 2,单片机串口通讯 2.1,接口标准 2.2,通讯协议 2.3,串口…

834. 树中距离之和

给定一个无向、连通的树。树中有 n 个标记为 0…n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges , edges[i] [ai, bi]表示树中的节点 ai 和 bi 之间有一条边。 返回长度为 n 的数组 answer ,其中 answer[i] 是树中第 i 个节点与所有其他节点之间…

opencv环境搭建

1. 上网(你懂的,没有网装不了) 2. 参考视频:https://www.bilibili.com/video/BV1R44y157hW/?spm_id_from333.880.my_history.page.click&vd_source377867a48dd3d812b9d6521c8fc76de2 3. 这里我选择的是4.8的版本。 4. cmak…