linux内核参数优化

 

复制代码
net.ipv4.tcp_max_tw_buckets;net.ipv4.tcp_tw_recycle;net.ipv4.tcp_tw_reuse
==================================================================================
net.ipv4.tcp_max_tw_buckets
    对于tcp连接,服务端和客户端通信完后状态变为timewait,假如某台服务器非常忙,连接数特别多的话,那么这个timewait数量就会越来越大。
    毕竟它也是会占用一定的资源,所以应该有一个最大值,当超过这个值,系统就会删除最早的连接,这样始终保持在一个数量级。
    这个数值就是由net.ipv4.tcp_max_tw_buckets这个参数来决定的。
    CentOS7系统,你可以使用sysctl -a |grep tw_buckets来查看它的值,默认为32768,
    你可以适当把它调低,比如调整到8000,毕竟这个状态的连接太多也是会消耗资源的。
    但你不要把它调到几十、几百这样,因为这种状态的tcp连接也是有用的,
    如果同样的客户端再次和服务端通信,就不用再次建立新的连接了,用这个旧的通道,省时省力。

net.ipv4.tcp_tw_recycle = 1
    该参数的作用是快速回收timewait状态的连接。上面虽然提到系统会自动删除掉timewait状态的连接,但如果把这样的连接重新利用起来岂不是更好。
    所以该参数设置为1就可以让timewait状态的连接快速回收,它需要和下面的参数配合一起使用。

net.ipv4.tcp_tw_reuse = 1
    该参数设置为1,将timewait状态的连接重新用于新的TCP连接,要结合上面的参数一起使用。
net.ipv4.tcp_max_tw_buckets;net.ipv4.tcp_tw_recycle;net.ipv4.tcp_tw_reuse
复制代码

 

复制代码
net.ipv4.tcp_syncookies;net.ipv4.tcp_max_syn_backlog;net.ipv4.tcp_syn_retries;net.ipv4.tcp_synack_retries;
==========================================================================================
net.ipv4.tcp_syncookies = 1
    tcp三次握手中,客户端向服务端发起syn请求,服务端收到后,也会向客户端发起syn请求同时连带ack确认,
    假如客户端发送请求后直接断开和服务端的连接,不接收服务端发起的这个请求,服务端会重试多次,
    这个重试的过程会持续一段时间(通常高于30s),当这种状态的连接数量非常大时,服务器会消耗很大的资源,从而造成瘫痪,
    正常的连接进不来,这种恶意的半连接行为其实叫做syn flood攻击。
    设置为1,是开启SYN Cookies,开启后可以避免发生上述的syn flood攻击。
    开启该参数后,服务端接收客户端的ack后,再向客户端发送ack+syn之前会要求client在短时间内回应一个序号,
    如果客户端不能提供序号或者提供的序号不对则认为该客户端不合法,于是不会发ack+syn给客户端,更涉及不到重试。

net.ipv4.tcp_max_syn_backlog
    该参数定义系统能接受的最大半连接状态的tcp连接数。客户端向服务端发送了syn包,服务端收到后,会记录一下,
    该参数决定最多能记录几个这样的连接。在CentOS7,默认是256,当有syn flood攻击时,这个数值太小则很容易导致服务器瘫痪,
    实际上此时服务器并没有消耗太多资源(cpu、内存等),所以可以适当调大它,比如调整到30000。

net.ipv4.tcp_syn_retries
    该参数适用于客户端,它定义发起syn的最大重试次数,默认为6,建议改为2。

net.ipv4.tcp_synack_retries
    该参数适用于服务端,它定义发起syn+ack的最大重试次数,默认为5,建议改为2,可以适当预防syn flood攻击。
net.ipv4.tcp_syncookies;net.ipv4.tcp_max_syn_backlog;net.ipv4.tcp_syn_retries;net.ipv4.tcp_synack_retries;
复制代码

 

复制代码
net.ipv4.ip_local_port_range
================================================================================================
net.ipv4.ip_local_port_range
    该参数定义端口范围,系统默认保留端口为1024及以下,以上部分为自定义端口。这个参数适用于客户端,
    当客户端和服务端建立连接时,比如说访问服务端的80端口,客户端随机开启了一个端口和服务端发起连接,
    这个参数定义随机端口的范围。默认为32768 61000,建议调整为1025 61000。
net.ipv4.ip_local_port_range
复制代码

 

复制代码
net.ipv4.tcp_fin_timeout
================================================================================================
net.ipv4.tcp_fin_timeout
    tcp连接的状态中,客户端上有一个是FIN-WAIT-2状态,它是状态变迁为timewait前一个状态。
    该参数定义不属于任何进程的该连接状态的超时时间,默认值为60,建议调整为6。
net.ipv4.tcp_fin_timeout
复制代码

 

复制代码
net.ipv4.tcp_keepalive_time;net.ipv4.tcp_keepalive_intvl;net.ipv4.tcp_keepalive_probes
========================================================================================
net.ipv4.tcp_keepalive_time
    tcp连接状态里,有一个是established状态,只有在这个状态下,客户端和服务端才能通信。正常情况下,当通信完毕,
    客户端或服务端会告诉对方要关闭连接,此时状态就会变为timewait,如果客户端没有告诉服务端,
    并且服务端也没有告诉客户端关闭的话(例如,客户端那边断网了),此时需要该参数来判定。
    比如客户端已经断网了,但服务端上本次连接的状态依然是established,服务端为了确认客户端是否断网,
    就需要每隔一段时间去发一个探测包去确认一下看看对方是否在线。这个时间就由该参数决定。它的默认值为7200秒,建议设置为30秒。

net.ipv4.tcp_keepalive_intvl
    该参数和上面的参数是一起的,服务端在规定时间内发起了探测,查看客户端是否在线,如果客户端并没有确认,
    此时服务端还不能认定为对方不在线,而是要尝试多次。该参数定义重新发送探测的时间,即第一次发现对方有问题后,过多久再次发起探测。
    默认值为75秒,可以改为3秒。

net.ipv4.tcp_keepalive_probes
    net.ipv4.tcp_keepalive_time、net.ipv4.tcp_keepalive_intvl参数规定了何时发起探测和探测失败后再过多久再发起探测,但并没有定义一共探测几次才算结束。
    该参数定义发起探测的包的数量。默认为9,建议设置2。
    设置和范例
    在Linux下调整内核参数,可以直接编辑配置文件/etc/sysctl.conf,然后执行sysctl -p命令生效
net.ipv4.tcp_keepalive_time;net.ipv4.tcp_keepalive_intvl;net.ipv4.tcp_keepalive_probes
复制代码

 

linux内核参数优化

/proc/sys/net/ipv4/ 下网络参数的理解以及sysctl命令修改内核参数(待总结)

复制代码
sysctl -w net.ipv4.conf.eth0.rp_filter=0
    
rp_filter参数用于控制系统是否开启对数据包源地址的校验, 收到包后根据source ip到route表中检查是否否和最佳路由,否的话扔掉这个包【可以防止DDoS,攻击等】
    0:不开启源地址校验。
    ​1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
        严格校验进出包是否走同一块网卡,若回包走另一块网卡,则触发了内核的rp_filter扔包逻辑。
    ​2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不通,则直接丢弃该数据包。

通过netstat -s来观察IPReversePathFilter
$netstat -s | grep -i filter
    IPReversePathFilter: 35428
$netstat -s | grep -i filter
    IPReversePathFilter: 35435
    能明显看到这个数字在增加,如果没开rp_filter 就看不到这个指标或者数值不变


https://plantegg.github.io/2019/05/16/%E7%BD%91%E7%BB%9C%E9%80%9A%E4%B8%8D%E9%80%9A%E6%98%AF%E4%B8%AA%E5%A4%A7%E9%97%AE%E9%A2%98--%E5%8D%8A%E5%A4%9C%E9%B8%A1%E5%8F%AB/
net.ipv4.conf.eth0.rp_filter
复制代码

 

posted @   雲淡風輕333  阅读(25)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示