关于Linux的TCP相关参数的整理

从 TCP/IP 协议谈 Linux 内核参数优化 在硬件资源有限的情况下,最大的压榨服务器性能,提高服务器的并发处理能力,是很多技术人员思考的问题,除了优化Nginx/PHP-FPM/Mysql/Redis这类服务软件配置外,还可以通过修改Linux的内核相关TCP参数,来最大的提高服务器性能。 在Linux内核参数优化之前,我们需要先搞懂TCP/IP协议,这是我们实施优化的理论依据。 TCP/IP协议 TCP/IP协议是十分复杂的协议,完... 阅读详情

title: 关于Linux的TCP相关参数的整理
date: 2017-2-5 14:08:21
categories:

  • 实习
    tags:
  • Linux
  • 整理
  • TCP

虽然学习过TCP的三次握手与四次挥手,但是对于Linux服务器的这方面参数所知甚少。故在网上搜集了一下,整理如下:

net.ipv4.tcp_syncookies = 1

表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1

表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1

表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;

net.ipv4.tcp_fin_timeout

修改系統默认的 TIMEOUT 时间。

net.ipv4.tcp_keepalive_time = 1200

表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。linux内核包含对keepalive的支持。其中使用了三个参数:tcp_keepalive_time(开启keepalive的闲置时长)tcp_keepalive_intvl(keepalive探测包的发送间隔) 和tcp_keepalive_probes (如果对方不予应答,探测包的发送次数);

net.ipv4.ip_local_port_range = 10000 65000

表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!)

net.ipv4.tcp_max_syn_backlog = 8192

表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

net.core.rmem_max = 16777216

最大socket读buffer,可参考的优化值:873200

net.core.wmem_max = 16777216

最大socket写buffer,可参考的优化值:873200

net.ipv4.tcp_synack_retries = 2

为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。

net.ipv4.tcp_syn_retries = 2

在内核放弃建立连接之前发送SYN包的数量。

net.ipv4.tcp_tw_reuse = 1

开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。

net.ipv4.tcp_wmem = 8192 436600 873200

TCP写buffer,可参考的优化值: 8192 436600 873200

net.ipv4.tcp_rmem = 32768 436600 873200

TCP读buffer,可参考的优化值: 32768 436600 873200

net.ipv4.tcp_mem = 94500000 91500000 92700000

同样有3个值,意思是:

  • net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力。
  • net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段。
  • net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket。
    上述内存单位是页,而不是字节。可参考的优化值是:786432 1048576 1572864

net.core.somaxconn

定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。默认值128,优化值2048。

经过这样的优化配置之后,你的服务器的TCP并发处理能力会显著提高。以上配置仅供参考,用于生产环境请根据自己的实际情况。

同时补充下相关概念:

未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

Backlog参数:表示未连接队列的最大容纳数目。

SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

修改/etc/sysctl.conf再执行以下命令,让修改结果立即生效:/sbin/sysctl -p

参考:

服务器编程入门(3)TCP协议详解 问题聚焦: 本节从如下四个方面讨论TCP协议: TCP头部信息:指定通信的源端端口号、目的端端口号、管理TCP连接,控制两个方向的数据流 TCP状态转移过程:TCP连接的任意一端都是一个状态机 TCP数据流:两种主要类型:交互数据流,成块数据流 TCP数据流的控制:保证可靠传输和提高网络通信质量,两个方面:超时重传,拥塞控制 阅读详情

相关推荐

Linux网络编程之TCP相关

目录TCP连接建立服务器端客户端TCP断开连接一些细节:1.文件描述符的阻塞非阻塞问题2.三次握手发生在哪步3.关于 listen 第二个参数 backlog4.通信的一端突然断开会怎样5.shutduwn 和 close6.RST包总结参考 最近在学习一些Linux网络编程,这里整理一下TCP相关内容 TCP连接建立 建立连接需要三次握手,对应的socket编程如下(忽略了异常处理): 服务器端 #include <sys/socket.h> #include <arpa/inet.h&

laplacebh的博客 796

linux内核参数优化建议

linux内核参数优化 net.ipv4.tcp_synack_retries = 2    #当服务器接收到客户端发送的SYNC连接请求报文后,回应SYNC+ACK报文,并等待客户端的ACK确认,如果超时会进行重传,重传次数由下列参数设置,默认为5 net.ipv4.tcp_syn_retries = 2     #客户端发起SYN...

weixin_40368523的博客 1507

tcp_fin_timeout

node2:/root/test#sysctl -w net.ipv4.tcp_fin_timeout="1" net.ipv4.tcp_fin_timeout = 1 node2:/root/test#time python close1.py Traceback (most recent call last): File "close1.py", line 9, in <module> s.recv(999) socket.timeout: timed out real 0.

zhaoyangjian724的专栏 1154

网络分析流量FIN_WAIT_2状态解释

在HTTP应用中,存在一个问题,SERVER由于某种原因关闭连接,如KEEPALIVE的超时,这样,作为主动关闭的SERVER一方就会进入 FIN_WAIT2状态,但TCP/IP协议栈有个问题,FIN_WAIT2状态是没有超时的(不象TIME_WAIT状态),所以如果CLIENT不关闭,这个FIN_WAIT_2状态将保持到系统重新启动,越来越多的FIN_WAIT_2状态会致使内核crash。 出现fin_wait_2一般为客户端,如果为服务端出现,则表明是服务端主动发起的断开。 可能产生原因: 1。常连.

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 1万+

先进封装技术的一些优缺点探讨

半导体封装技术是半导体制造过程中的关键环节,它不仅保护了芯片免受物理损伤,还提供了电气连接和散热功能。随着技术的发展,出现了多种先进的封装技术,每种技术都有其特定的应用场景和优缺点。

阿拉伯梳子的专栏 2168

从“氛围编程“到“智能体工程“:AI编程范式的认知跃迁与工程实践

摘要: 2026年,ClaudeCode负责人鲍里斯·切尔尼提出用“智能体工程”(Agent Engineering)替代流行的“氛围编程”(Vibe Coding),认为后者过于主观,无法体现AI编程的系统化与工程化本质。智能体工程强调记忆系统、工具编排、任务分解、可观测性等核心技术,将AI编程从“玄学辅助”升级为可度量、可规模化的工程学科。本文通过对比术语差异、构建知识体系,并结合代码实例(如带记忆系统的代码生成Agent和可观测性系统),展示了智能体工程的实际应用。行业案例(如ClaudeCode的并

yyq916的博客 1060

linux服务器TCP相关设置

linux服务器TCP相关设置

weixin_44371237的博客 1042

如何用 Python 实现自动化测试?详细步骤和代码示例

Python自动化测试实战指南 本文系统介绍了使用Python构建自动化测试体系的完整方案。主要内容包括: 环境搭建:Python 3.8+虚拟环境配置,安装pytest、Selenium等核心测试库 分层测试实现: 单元测试:通过计算器示例演示pytest断言和异常测试 API测试:使用requests库进行RESTful接口验证 UI测试:Selenium WebDriver实现网页交互测试 高级特性: 使用fixture管理测试依赖 参数化实现数据驱动测试 生成HTML和Allure测试报告 GitH

m0_64424835的博客 449

linux tcp查看参数,关于Linux的TCP相关参数的整理

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?虽然学习过TCP的三次握手与四次挥手,但是对于Linux服务器的这方面参数所知甚少。故在网上搜集了一下,整理如下:net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;net.ipv4.tcp_...

weixin_39536728的博客 1849

ESP32-S3模组上跑通esp32-camera(32)

ESP32-S3模组上跑通esp32-camera(32)

phmatthaus的专栏 770

16、二阶差分功耗分析(DPA)的再审视

本文深入探讨了二阶差分功耗分析(DPA)中的关键问题,包括不同组合函数的性能、信息论分析以及在有轮廓和无轮廓攻击场景下的实验结果。通过对掩码AES和DES的模拟和实际攻击实验,研究了归一化乘积、求和和绝对差值等组合函数在不同噪声水平下的效率,并强调了信息论分析在评估侧信道对抗措施中的重要性。

leaf8的博客 117

TCP超时重传

Linux高性能服务器编程》中的内容整理。

qq_38390435的博客 399

项目经理必看:如何建立高效的相关方沟通机制?

你是否遇到过这样的场景?客户突然说“这不是我要的”,开发团队抱怨“需求总变”,高层追问“进度滞后为什么不早说”?这些问题的根源往往是——相关方沟通机制失效。本文聚焦“如何建立高效沟通机制”,覆盖从识别相关方到持续优化的全流程,适用于IT、产品、工程等各类项目。本文将按“理解问题→拆解核心概念→掌握工具方法→实战落地→未来趋势”的逻辑展开,重点讲解“相关方分析矩阵”“沟通计划表”等实用工具,并用“组织生日派对”的案例贯穿全文,让抽象概念变得可感知。相关方识别:用“权力/利益矩阵”找对人(像派对邀请关键客人)

项目管理的博客 1295

最全1 Linux防火墙设置_echo-reply,2024年最新Linux运维视频开发面试问题

为了做好运维面试路上的助攻手,特整理了上百道,让你面试不慌心不跳,高薪offer怀里抱!这次整理的面试题,本份面试集锦涵盖了1、什么是运维?2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?3、现在给你三百台服务器,你怎么对他们进行管理?4、简述raid0 raid1raid5二种工作模式的工作原理及特点5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

m0_60229361的博客 892

【Unity Shader】Special Effects(十二)Glow 外发光(UI)

Properties_GlowColor ("外发光颜色", Color) = (0, 0, 0, 1)_GlowIntensity("外发光强度", Range(0, 1)) = 1参数详解:_GlowColor:外发光颜色,指定外发光的显示颜色。_GlowIntensity:外发光强度,指定外发光的显示强度,0为不可见,1为最强强度。

神码编程 931

使用node-red网关读取modbus设备点表,并上传到市政低碳平台来统计数据

最近做了一个物联网项目,具体是这样的,利用node-red网关盒子,来采集Modbus设备的点表,然后将数据转换,封装,最终上传到市政的低碳平台。上一步封装了点表的数据,调用低碳平台还需要账号密码,建筑id,这些都是固定信息,所以我们单独提出来。上一步获取到了原始的点表数据,下一步就是将这些点表数据与在低碳平台创建的采集的对应起来,并且设置好分类。读取modbus的节点,会有两个输出,我是使用的第一个输出。msg.meters 是一个数组,里面的每一个元素都是一个点表,比如厨房用水,园区照明,

知无涯 947

花一个星期时间呕心沥血整理出高频软件测试/自动化测试面试题和答案

离我们的金九银十越来越近了,很多的小伙伴也开始找新的工作了,这里给大家出了一个测开的面试题先祝各位面试顺利了,在文章的末尾也有大量的软件测试和自动化测试的面试题。 #01如何制定测试计划?❶参考点1.是否拥有测试计划的制定经验2.是否具备合理安排测试的能力3.是否具备文档输出的能力❷面试命中率 80%❸参考答案测试计划包括测试目标、测试范围、测试环境的说明、测试类型的说明(功能,安全,性能,稳定性)、测试工具、模块的划分、测试负责人、测试执行轮次的时间安排、相关文档在文档管理库中的位置、测试的风险 。其中

分享测试知识 562

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

嵌入式linux学习笔记--TCP通讯整理

之前的项目中使用到了比较多的tcp 通讯相关的知识,一直也没有进行整理,今天准备拿出时间好好的整理一下TCP通讯的整个过程。预计会整理linux和windows两个版本的tcp通讯的流程。 1.TCP通讯的函数的介绍 ...

jeason的博客 3619

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux常用网络命令参数整理

NAME tcpdump - dump traffic on a networkSYNOPSIS tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ] [ --number ] [ -Q in

SSS 1033

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Linux TCP参数调优

在写这篇文章之前写过一篇文章:tcp too many orphaned sockets 问题引发的思考,里面讲了主要讲了下端口,socket相关也涉及到部分参数调优,但是最近又遇到一些网络方面的问题涉及到一些调参,所以我觉得应该单独整理一片关于TCP调优的博客,也不会显得那么冗余和杂乱了。 (下文中涉及到对/etc/sysctl.conf中参数的修改都是永久修改,后文 不再赘述。方法:将参数添加...

业精于勤,荒于嬉;行成于思,毁于随 1305

Linux 深入理解网络超时内核参数,TCP超时与网络行为_tcp_fastopen_blackhole_timeout_sec(2)

参数定义了系统监测到任务挂起(无响应)的时间阈值。如果一个任务在指定的秒数内没有任何响应,系统将记录一条警告信息。这个参数通常用于识别和调试系统中的死锁或其他内核级问题。

2401_83620959的博客 909

Linux内核调参常用整理

介绍一下Linux常见内核参数

m0_62856417的博客 1354

【Linux网络篇】:简单的TCP网络程序编写以及相关内容的扩展

本文介绍了基于TCP协议的简单网络程序实现,包括服务端和客户端的开发流程。文章详细讲解了关键系统调用接口如socket()、bind()、listen()、accept()、connect()等函数的使用方法,并提供了完整的代码实现。服务端通过创建套接字、绑定端口、监听连接、处理请求等步骤建立通信;客户端则通过创建套接字、连接服务器、发送和接收数据来完成交互。示例代码展示了如何将理论知识转化为实际可运行的网络程序,帮助读者理解TCP网络编程的基本原理和实现方式。

2301_82347435的博客 1386

Linux tcp socket相关参数设置

内容主要从网络上摘抄的,稍作了一下整理 来源1: http://www.cnblogs.com/alli/archive/2011/01/11/1932599.html 1.进程打开文件数限制 ulimit –n ==》 ulimit –n 1000000 这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,...

weixin_30677475的博客 177

linux内核参数注释与优化

linux内核参数注释与优化 目录 1、linux内核参数注释 2、两种修改内核参数方法 3、内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观。 学习linux也有不少时间了,每次优化linux内核参数时,都是在网上拷贝而使用,甚至别人没有列出来的参数就不管了,难道我就不需要了吗? 参考文章: linux内核...

newxwj的博客 530
上一篇: Java线程池的技巧及应用小结
下一篇: 事物的状态-状态模式
chengshuo678
博客等级 码龄14年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值