Linux系统中跟TCP相关的内核参数
1. TCP保活机制
参考 《Nginx(三) 配置文件详解 - 基础模块》3.18章节
- net.ipv4.tcp_keepalive_intvl:设置两次相邻探活检测的间隔时间。默认是75秒,单位是秒。
- net.ipv4.tcp_keepalive_probes:设置探活最多检测次数。默认是9次,单位是次。
- net.ipv4.tcp_keepalive_time:设置TCP连接保活时长。默认是7200秒,单位是秒。
2. TCP Fast Open Cookie
net.ipv4.tcp_fastopen:可选值是0、1、2、3,默认是1。设置为0时表示关闭Fast Open Cookie功能,设置为1时表示仅作为客户端时使用Fast Open Cookie功能,设置为2时表示仅作为服务端时使用Fast Open Cookie功能,设置为3时表示无论作为客户端还是服务端时都使用Fast Open Cookie功能。请注意,Fast Open Cookie需要客户端和服务端同时开启才有效,开启后可以用TCP报文首部的Fast Open Cookie选项字段来声明是否使用FOC。FOC生效后,使用HTTP协议通信时,可以减少因三次握手而带来的1个RTT时间消耗(因为三次握手建立连接后,HTTP 请求必须在一个RTT后才能发送)。如果服务器仅作为服务端时,建议设置为2,如果是代理服务器,建议设置为3。
net.ipv4.tcp_fastopen_blackhole_timeout_sec = 3600
net.ipv4.tcp_fastopen_key = 00000000-00000000-00000000-00000000
3. 设置重传次数最大值
- net.ipv4.tcp_orphan_retries:FIN报文重传次数最大值,默认值是0,特指8次。如果FIN报文重传次数达到该值且规定等待时间已结束,连接将直接关闭。如果是孤儿连接,重传次数虽未超过8次,但该连接自首次发出FIN报文开始,存活时间已超tcp_fin_timeout设定的时间,那么此时该连接也将会直接关闭。
- net.ipv4.tcp_retries1:报文超时重传次数达到该值且规定等待时间已结束,指示IP层进行MTU探测、刷新路由等。默认是3次。
- net.ipv4.tcp_retries2:报文超时重传次数达到该值且规定等待时间已结束,连接将会直接关闭。默认是15次。
- net.ipv4.tcp_syn_retries:SYN报文重传次数最大值,默认是6次。如果SYN报文重传次数达到该值且规定等待时间已结束,连接将直接关闭。
- net.ipv4.tcp_synack_retries:SYN+ACK报文重传次数最大值,默认是2次。如果SYN+ACK报文重传次数达到该值且规定等待时间已结束,连接将直接关闭。
4. 孤儿连接
当进程调用 close() 函数关闭连接后,相关句柄已经释放,无论该连接是处于 FIN_WAIT1 状态,还是确实关闭了,此连接已经与进程无关,由内核和另一端完成四次挥手交互,此时这个连接叫做孤儿连接。
使用 close() 函数关闭连接是完全断开连接,同时关闭读和写,无法继续传输数据,是不优雅的,而 shutdown() 函数是优雅关闭连接,可以控制是关闭读还是写。
- net.ipv4.tcp_max_orphans:指定系统内核最多能接管多少个孤儿连接。默认是16384个。如果孤儿连接数量超过该值,新增的孤儿连接将不再通过四次挥手来关闭连接,而是直接发送 RST 报文进行强制关闭,并发出警告信息。
- net.ipv4.tcp_fin_timeout:指定孤儿连接在内核中的最大生存时间,单位是秒,默认是60秒,对应两个MSL,该参数也是设置服务器主动关闭TCP连接时在TIME_WAIT状态的2MSL等待时间。如果在60秒内还未关闭,连接将直接关闭。
- net.ipv4.tcp_orphan_retries:请参考第3章节。
5. 防御SYN Flood攻击
参考 TCP三次握手、四次挥手及状态转换详解
- net.core.somaxconn:增大TCP全连接队列/accept队列大小,也是增大TCP半连接队列的关键参数。默认值是128。
- net.core.tcp_max_syn_backlog :增大TCP半连接队列/SYN队列大小。默认值是1024。
- net.ipv4.tcp_syncookies:设置是否开启syncookies。开启syncookies后,不使用半连接队列就可建立TCP连接。默认值是1,表示仅当 SYN 半连接队列溢出时,才启用它。设置为0时表示关闭,设置为2时表示无条件开启。
- net.core.netdev_max_backlog:设置每个网卡接收队列的最大长度,防止网卡接收过载。默认值是1000个。内核从网卡收到数据包后,在交由协议栈(如IP、TCP)处理前会先将数据包放入一个缓冲队列中,当接数据包的速率大于内核协议栈处理的速率时,这个缓冲队列会不断增长,但不能超过netdev_max_backlog 参数设置的值,否则数据包将被丢弃。默认情况下,netdev_max_backlog 参数的值是与系统的内存大小和 CPU 数量相关的动态值。它会根据系统的硬件配置进行自适应调整,通常情况下不需要手动设置。除非这台服务器需要处理大量的网络请求,我们才将该值调大。
- net.ipv4.tcp_synack_retries:降低SYN+ACK报文重传次数。默认是2次。请参考第3章节。
6. accept队列已满策略
- net.ipv4.tcp_abort_on_overflow:该参数用于设置当accept队列已满时,是否要将后续请求建立的TCP连接置为RST,即返回RST报文。可选值是0或1,默认值是0,表示关闭。当accept队列已满时,如果该参数设置为0,服务端会丢弃掉客户端返回的ack报文。如果设置为1,服务端将发送RST报文给客户端,要求重置连接并重新建立连接。谨慎开启该配置!
7. 窗口放大
- net.ipv4.tcp_window_scaling:设置是否开启窗口放大功能。可选值是0或1,默认是1,表示开启窗口放大功能。
8. 优化TIME-WAIT
- net.ipv4.tcp_tw_reuse:设置是否复用处于 TIME_WAIT 状态的TCP连接,可选值是0或1,默认是0,表示禁止复用连接。请注意,该配置仅适用于主动发起建立TCP连接的一方,也就是仅适用于客户端。开启该选项后,主动发起建立连接的一方在调用 connect() 函数时,如果选择到的端口,已经被相同四元组的连接占用,那么就判断该连接是否处于TIME_WAIT状态,如果该连接处于 TIME_WAIT 状态并且 TIME_WAIT 状态持续时间已超过1秒,那么就重用这个连接,然后就可以正常使用该端口了。所以该选项只适用于主动发起建立连接的一方。如果服务器仅作为服务端,就完全没必要开启该功能。如果服务器是一台代理服务器,建议开启该功能。
- net.ipv4.tcp_timestamps:设置是否开启TCP时间戳功能,可选值是0或1,默认是1,表示开启时间戳功能。开启后,TCP 头部就会使用时间戳选项,便于精确计算RTT,而且还能避免出现因序列号回绕(PAWS)而引起的延迟报文生效的问题。该参数是开启tcp_tw_reuse功能的前提,在开启tcp_tw_reuse功能前,必须将tcp_timestamps设置为1。
- net.ipv4.tcp_max_tw_buckets:设置处于TIME_WAIT状态的TCP连接的最大值,默认值是5000。当系统中处于 TIME_WAIT 状态的TCP连接数超过该值时,新关闭的连接就不再经历 TIME_WAIT状态,而是直接关闭,这个方法比较暴力。
- net.ipv4.tcp_fin_timeout:该参数用于设置2MSL时间,请参考第4章节。
9. 快速重传
参考 《TCP 核心工作机制》
- net.ipv4.tcp_sack:设置是否开启选择性确认SACK,可选值是0或1,默认是1,表示开启SACK。
- net.ipv4.tcp_dsack:设置是否开启D-SACK(选择性确认时标识重复收到的数据),可选值是0或1,默认是1,表示开启D-SACK。
- net.ipv4.tcp_comp_sack_delay_ns:设置在压缩SACK报文期间,SACK报文的延迟发送时间。单位是ns(纳秒),默认值是1000000ns,也就是1ms。
- net.ipv4.tcp_comp_sack_nr:设置压缩SACK报文的最大数量。默认值是44。
10. 拥塞控制
- net.ipv4.tcp_congestion_control = cubic
- net.ipv4.tcp_allowed_congestion_control = reno cubic
- net.ipv4.tcp_available_congestion_control = reno cubic
11. 设置缓冲区
- tcp_wmem:设置发送缓冲区大小/范围,默认值是“4096 16384 4194304”,3个参数单位都是字节Byte。
- tcp_rmem:设置接收缓冲区大小/范围,默认值是“4096 87380 6291456”,3个参数单位都是字节Byte。
- tcp_mem:设置TCP缓冲区大小/范围,默认值是“42147 56197 84294”,3个参数值单位都是页面,一个页面是4kb,
- tcp_moderate_rcvbuf:设置是否开启接收缓冲区动态调整功能,可选值是0或1,默认是1,表示开启。
- net.ipv4.tcp_adv_win_scale = 1
相关文章:
Linux系统中跟TCP相关的内核参数
1. TCP保活机制 参考 《Nginx(三) 配置文件详解 - 基础模块》3.18章节 net.ipv4.tcp_keepalive_intvl:设置两次相邻探活检测的间隔时间。默认是75秒,单位是秒。net.ipv4.tcp_keepalive_probes:设置探活最多检测次数。默认是9次,单…...
代理模式(Proxy)
代理模式(Proxy Pattern)是一种结构型设计模式,用于为另一个对象提供一个代替品或占位符以控制对这个对象的访问。这个模式主要用于延迟处理操作或者在进行实际操作前后进行其它处理。 代理模式的实现通常涉及以下角色: 抽象主题(Subject):定义了代理和真实对象的共用接…...
在MacOS上Qt配置OpenCV并进行测试
目录 一.Qt环境准备 二.在Qt项目中加载Opencv库并编写代码测试 1.使用Opencv加载图片 (1)在Qt中创建一个新项目 (2)在.pro文件中链接OpenCV库 (3)添加新资源文件 (4)在mainw…...
java数据结构与算法刷题-----LeetCode167:两数之和 II - 输入有序数组
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 思路 题目要求我们找到两个数相加的和,等于target指定的值。而…...
Linux:jumpserver V3的安装与升级(在线离线)(2)
官方文档写的非常详细,我这篇文章时间长了,会随着官方版本更新而落后 JumpServer - 开源堡垒机 - 官网https://www.jumpserver.org/安装和升级在官网也有详细的信息,我写本章是为了记录一下实验 我的系统是centos7.9 在线安装 在确定我们可…...
【GoLang】Go语言几种标准库介绍(一)
你见过哪些令你膛目结舌的代码技巧? 文章目录 你见过哪些令你膛目结舌的代码技巧?前言几种库bufio(带缓冲的 I/O 操作)特性示例 bytes (实现字节操作)特性示例 总结专栏集锦写在最后 前言 随着计算机科学的迅猛发展,编…...
短剧分销系统:月入百w的新模式
随着我国短剧的高速发展,越来越多的人进入到了短剧影视行业。本文旨在介绍短剧市场的发展前景以及短剧分销系统的设计和开发。 一、短剧发展背景 短剧具有时长短、剧情紧凑、节奏快、剧情新颖等特点,满足了国内观众的碎片化时间,在当下短视频…...
鞋服用户运营策略如何实现有效闭环?
实现长期价值和业务闭环是企业经营的关键。对于鞋服行业来说,如何基于客户旅程编排(Customer Journey Orchestration,简称 CJO)实现用户运营策略的有效闭环,提升长期价值呢? 本文围绕该主题,从鞋…...
简单工厂、工厂方法、抽象工厂和策略模式
摘要 本文简单介绍软件开发过程中面临的痛点和几个总体原则。详细介绍了简单工厂、工厂方法、抽象工厂和策略模式的实现,以及各种模式之间的相似、区别。 背景 开发面临哪些问题(痛点)? 相信做过大型软件开发的tx都遇到过以下类似…...
junit mocktio request打桩
Controller下request组装参数 HttpServletRequest request new MockHttpServletRequest(); ((MockHttpServletRequest) request).addHeader("router","login"); ((MockHttpServletRequest) request).addParameter("test","wwww"); …...
第十四节TypeScript 联合类型
1、简介 联合类型可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。 注意:只能赋值指定的类型,如果赋值其它类型就会报错的。 2、创建联合类型的语法格式: Type1|Type2|Type3 实例&a…...
[x86汇编语言]从实模式到保护模式第二版
下载汇编器:https://www.nasm.us/pub/nasm/releasebuilds/2.16.02rc6/win64/ mov ax, 0x3f add bx,ax add cx,ax 编译: C:\Users\HP>cd D:\BaiduNetdiskDownload\01b站\lizhong\myasm C:\Users\HP>D: D:\BaiduNetdiskDownload\01b站\lizhong…...
基本的逻辑门
前言 本篇文章介绍基本的逻辑门,然后给出C语言描述 逻辑门是在集成电路上的基本组件。简单的逻辑门可由晶体管组成。这些晶体管的组合可以使代表两种信号的高低电平在通过它们之后产生高电平或者低电平的信号。高、低电平可以分别代表逻辑上的“真”与“假”或二进…...
云原生系列3-Kubernetes
1、Kubernetes概述 k8s缩写是因为k和s之间有八个字符。k8s是基于容器技术的分布式架构方案。官网:https://kubernetes.io/zh-cn/ Google在 2014年开源了Kubernetes项目,Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的…...
R-列表、矩阵、数组转化为向量
目录 一、c()函数 二、unlist()函数 一、c()函数 c():对应的英文是combine. 当你使用c()函数时,它会将输入的对象连接成一个向量。因此,无论输入是矩阵、数组还是列表,c()函数都会将它们连接成一个简单的向量。因此ÿ…...
算法通关村-番外篇排序算法
大家好我是苏麟 , 今天带来番外篇 . 冒泡排序 BubbleSort 最基本的排序算法,最常用的排序算法 . 我们以关键字序列{26,53,48,11,13,48,32,15}看一下排序过程: 动画演示 : 代码如下 : (基础版) class Solution {public int[] sortArray(int[] nums) {for(int i …...
三种方式简单搭建http本地文件服务
有时候想写一个简单的html文件,然后加上一些image、js、css文件用于测试。希望有一个简单的http服务,总结了如下三种方式,欢迎讨论更多高效的方式。 (一)使用Web Server for Chrome浏览器扩展 之前写过一篇博文&#x…...
设计模式--适配器模式
实验8:适配器模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解适配器模式的动机,掌握该模式的结构; 2、能够利用适配器模式解决实际问题。 [实验任务]:双向适配器 实现一个双向…...
Node.js教程-express框架
概述 Express是基于Node.js平台(建立在Node.js内置的http模块上),快速、开放、极简的Web开发框架。 中文官网 http://www.expressjs.com.cn/。 Github地址:https://github.com/orgs/expressjs。 Express核心特性: 可设置中间件来响应 HTTP…...
location.origin兼容
if (!window.location.origin) {window.location.origin window.location.protocol "//" window.location.hostname (window.location.port ? : window.location.port: );}...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
