Linux性能学习(4.5):网络_TCP四次挥手内核参数优化

文章目录

  • 1 四次挥手
  • 2 参数优化
    • 2.1 tcp_orphan_retries--->FIN报文重传次数
    • 2.2 tcp_max_orphans--->孤儿连接最大数量
    • 2.3 tcp_fin_timeout--->FINE_WAIT2状态等待时间
    • 2.4 tcp_max_tw_buckets
    • 2.5 tcp_tw_reuse--->复用未释放的端口
  • 3 总结

参考资料:
1. RFC793

在Client和Server断开连接时候,会经历四次交互,称为四次挥手,本篇简单介绍下四次交互。

1 四次挥手

在这里插入图片描述

如上图,客户端和服务端都可以主动先发起close操作,在这里,我们假设Client先发送close操作。

  • 第一次交互:Client和Server都处于ESTABLISHED状态,正常进行通信,此时Client应用程序调用close()或shutdown()来关闭连接。那么内核就会发送FIN报文给到Server。此时Client的状态为FIN_WAIT1;
  • 第二次交互:Server收到FIN报文后,内核自动回复ACK报文。此时Server的状态为CLOSE_WAIT,Client收到ACK之后,状态变为FIN_WAIT2;
  • 第三次交互:Server应用程序调用close函数来关闭连接,并发送SIN报文,此时Server的状态为LAST_ACK;
  • 第四次交互:Client收到FIN之后,回复ACK报文,状态变为TIME_WAIT,等待2MSL后,连接彻底关闭,Server收到ACK后会立马关闭连接。

2MSL的时长为30*2=60s,RFC793定义了MSL为2分钟,Linux设置成了30s,MSL是指报文在网络中的最长生存时间,之所以定义2MSL,是假设发送的ACK丢失,最大消耗一个MSL时间,然后Server端重发一次FIN报文,最大消耗一次MSL事件,那么此时出于TIME_WAIT状态的Client端收到FIN报文后仍然可以发送一次ACK,如果多次丢失,考虑到概率以及性能问题,直接忽略,即只考虑一次丢失。

等待2MSL时间,也不完全是为了数据的重发,而是一种安全保证。如果不等待,立马完全关闭,那么可能被应用程序里面使用这个端口,因为网络因素、Server端重发等因素可能会收到旧的重发的FIN报文,那么新的连接就会被被误关闭;并且也可以防止新的连接收到旧的数据,造成异常。

PS:有时候可能Server收到FIN报文之后,里面close掉,所以可能会出现ACK+FIN在同一个报文中,回复给Client,这时四次握手就变成三次握手了。

PPS:如果Client进程异常退出了,内核就会主动发送RST报文给到Server,然后直接关闭连接,不走正常的四次挥手流程。

2 参数优化

2.1 tcp_orphan_retries—>FIN报文重传次数

当第一次交互时候,如果Client发送FIN包后,一直没有收到Server的ACK,那么就会重发,重发次数受tcp_orphan_retries内核参数控制。

# cat /proc/sys/net/ipv4/tcp_orphan_retries                  
0

默认值为0,表示8次。如果此值大于0,则为正常重试的次数。

如果超过tcp_orphan_retries重试的次数,还没有收到ACK报文,则直接关闭连接。

在第三次交互中,如果Server发送FIN之后,没有收到ACK报文,也会重发,重发次数受tcp_orphan_retries参数控制。

2.2 tcp_max_orphans—>孤儿连接最大数量

当Client端应用程序调用close关闭连接后,此时这个连接已经和应用程序无关了,为孤儿进程,剩下的事由内核来发送FIN包,来和Server进行四次挥手。

那么如果此时发送缓冲区还有数据没有发送完,那么就需要等待发送完,才能把FIN报文发送出去,或者TCP的流控功能,当Server端将接收窗口为0,即Client端不能发送数据,那么Client的连接就会长时间处于FIN_WAIT1状态。

如果一个连接长时间处于FIN_WAIT1状态,就会导致系统资源被长时间占用,因此tcp_max_orphans 参数来定义最大的孤儿连接数量,如果数量大于此值,那么就会直接发送RST报文,不走正常四次握手流程。

# cat /proc/sys/net/ipv4/tcp_max_orphans                     
512

2.3 tcp_fin_timeout—>FINE_WAIT2状态等待时间

当Client收到ACK后,就处于FINE_WAIT2状态,等待Server的FIN报文,此时如果Client应用程序是调用shutdown关闭连接,则一直处于FINE_WAT2状态,在这种状态下,还可以收发数据;如果是调用close关闭的,那么如果超时没有收到FIN报文,就会直接关闭。超时时间受tcp_fin_timeout参数控制。

# cat /proc/sys/net/ipv4/tcp_fin_timeout             
60

2.4 tcp_max_tw_buckets

Client处于TIME_WAIT状态下,会等待2MSL时间然后彻底关闭连接。但是这种状态也会导致系统资源被长时间占用,因此tcp_max_tw_buckets 参数来定义最大的TIME_WAIT状态的连接数量,如果数量大于此值,那么就会直接关闭,不再经历2MSL时间关闭。

# cat /proc/sys/net/ipv4/tcp_max_tw_buckets                  
512

2.5 tcp_tw_reuse—>复用未释放的端口

Client处于TIME_WAIT状态下,这个时候端口仍然被占用,因此应用程序无法使用此端口建立新的连接。因此,可通过tcp_tw_reuse参数来使能可以使用处于TIME_WAIT状态的端口。

# cat /proc/sys/net/ipv4/tcp_tw_reuse                        
0

0关闭,1使能。

另外,如果使能了这个功能,还需要打开TCP时间戳功能,并且需要双方都打开。

# cat /proc/sys/net/ipv4/tcp_timestamps                      
1

3 总结

在这里插入图片描述

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

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

相关文章

星图按转化线索回传对接思路与示例

一、什么是星图?二、什么是线索转化?三、对接中的一些疑问?四、如何对接开发?五、星图侧如何联调测试? 一、什么是星图? 抖音星图是抖音电商蓝图下,为品牌方、MCN公司和明星/达人服务并收取分…

【DFS】17. 电话号码的字母组合

【DFS】17. 电话号码的字母组合 Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我bua! TOC 题目: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rikjhVFD-1691333891079)(C:\Us…

IAR开发环境的安装、配置和新建STM32工程模板

IAR到环境配置到新建工程模板-以STM32为例 一、 简单介绍一下IAR软件1. IAR的安装(1) 下载IAR集成开发环境安装文件(2) 安装 2. 软件注册授权 二、IAR上手使用(基于STM32标准库新建工程)1、下载标准库文件2、在IAR新建工程&#x…

华为云交付

文章目录 一、华为云-公有云架构华为公有云的主要服务1.华为云服务—计算类2.华为云服务——存储类3.华为云服务—网络类4.华为云服务—管理和监督类5.华为云数据库 二、待续 一、华为云-公有云架构 华为公有云的主要服务 ECS:弹性云服务器( Elastic Cl…

交互流程图设计软件都有哪些?

交互流程图是设计行业信息流、观点流或组件流的图形代表。但是市场上应该如何选择各种交互流程图软件呢?如何使用高质量的交互流程图软件来绘制高端氛围的高档流程图?今天,小边给您带来了十个超级实用的交互流程图软件,我希望能帮…

解决宝塔面板升级获取更新包失败,请稍后更新或联系宝塔运维

宝塔Linux面板执行升级命令后失败,提示“获取更新包失败,请稍后更新或联系宝塔运维”如何解决?新手站长分享宝塔面板升级失败的解决方法: 宝塔面板升级失败解决方法 1、使用root账户登录到你的云服务器上,宝塔Linux面…

亿欧智库:2023中国宠物行业新趋势洞察报告(附下载)

关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 户外赛道本质上迎合了全球共性需求的增长,从养宠意愿的转化到养宠生活的需求,多层次的需求推动行业发展新趋势 从需求端进行分析,可以将养宠意愿的转化分为三个层…

Python语法:... for ... in ... if ...

Python中,for...in...[if]...语句是一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素组成新的List,其中if是可以省略的。下面举几个简单的例子进行说明 [for in ]: ...for ....in..... 语句. 实例如下: (1) …

零知识证明技术概述

简述 隐私泄露问题给企业带来了巨大的损失,本文简述零知识证明技术并且给出对应的应用示例: 什么是零知识证明? 零知识证明又被称为零知识协议,利用数学知识在双方不需要直接传递信息本身的前提下来验证信息的正确性。这个思想…

LLM reasoners 入门实验 24点游戏

LLM reasoners Ber666/llm-reasoners 实验过程 实验样例24games,examples/tot_game24,在inference.py中配置使用代理和open ai的api key。 首先安装依赖 git clone https://github.com/Ber666/llm-reasoners cd llm-reasoners pip install -e .然后…

【JAVA】继承

作者主页:paper jie的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精…

437. 路径总和 III

题目描述: 主要思路: 方法一:递归 从每个节点开始一次递归 class Solution { public:int ans0;void dfs(TreeNode* now,int targetSum, long sum){if(!now)return;sumnow->val;if(sumtargetSum)ans1;dfs(now->left,targetSum,sum);df…

[Docker实现测试部署CI/CD----构建成功后钉钉告警(7)]

目录 15、钉钉告警创建项目群,然后添加机器人添加机器人Jenkins 系统配置项目配置修改Jenkinsfile文件,添加钉钉提示信息测试 不修改Jenkinsfile文件,添加钉钉提示信息测试 15、钉钉告警 创建项目群,然后添加机器人 首先需要在钉…

Grafana制作图表-自定义Flink监控图表

简要 有时候我们在官网的Grafana下载的图表是这样的,如下图 #算子的处理时间,就是处理数据的延迟数据抓取,这个的说明看下下面的文章 metrics.latency.interval: 60 metrics.reporter.promgateway.class: org.apache.flink.metrics.prometh…

websocket服务端大报文发送连接自动断开分析

概述 当前springboot版本&#xff1a;2.7.4 使用依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>现象概述&#xff1a; 客户端和服务端已经有心跳…

《大型网站技术架构》第二篇 架构-高可用

高可用在公司中的重要性 对公司而言&#xff0c;可用性关系网站的生死存亡。对个人而言&#xff0c;可用性关系到自己的绩效升迁。 工程师对架构做了许多优化、对代码做了很多重构&#xff0c;对性能、扩展性、伸缩性做了很多改善&#xff0c;但别人未必能直观地感受到&#…

windows系统安装ElasticSearch7.9.3笔记

windows系统安装ElasticSearch7.9.3笔记 从es中文社区 或elastic官网下载安装包 ES中文社区-浏览器地址https://elasticsearch.cn/download/ 下载7.9.3版本的相关安装包 下载的安装包清单如下 开始配置使用带ik分词器和拼音分词器的ES7.9.3 分别解压这3个zip 拷贝ik分词器…

MATLAB(R2023a)添加工具箱TooLbox的方法-以GPOPS为例

一、找到工具箱存放位置 首先我们需要找到工具箱的存放位置&#xff0c;点击这个设置路径可以看到 我们的matlab工具箱的存放位置 C:\Program Files\MATLAB\R2023a\toolbox\matlab 从资源管理器中打开这个位置&#xff0c;可以看到里面各种工具箱 二、放入工具箱 解压我们…

[JavaScript游戏开发] Q版地图上让英雄、地图都动起来

系列文章目录 第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测 第四章 绘制Q版地图、键盘上下左右地图场景切换 第五章 Q版地图上让英雄、地图都动起来…

微信小程序中的全局数据共享(状态管理)使用介绍

开发工具&#xff1a;微信开发者工具Stable 1.06 一、状态管理简介 微信小程序全局状态是指可以在不同页面之间共享的数据或状态。 它可以存储用户的登录状态、个人信息、全局配置信息等。 二、安装MobX 1、安装NPM 在资源管理器的空白地方点右键&#xff0c;选择“在外部…