Linux TCP 系统参数配置

我们这里应用的是CentOS5.3,并内核使用的是2.6.18-128.el5PAE #1 SMP 。修改部分TCP ,有的是为了提高性能与负载,但是存在降低稳定性的风险。有的则是安全方面的配置,则有可能牺牲了性能。

1.TCP keepalive TCP连接保鲜设置

echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 15 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes

keepalive是TCP保鲜定时器。当网络两端建立了TCP连接之后,闲置idle(双方没有任何数据流发送往来)了tcp_keepalive_time后,服务器内核就会尝试向客户端发送侦测包,来判断TCP连接状况(有可能客户端崩溃、强制关闭了应用、主机不可达等等)。如果没有收到对方的回答(ack包),则会在tcp_keepalive_intvl后再次尝试发送侦测包,直到收到对对方的ack,如果一直没有收到对方的ack,一共会尝试tcp_keepalive_probes次,每次的间隔时间在这里分别是15s, 30s, 45s, 60s, 75s。如果尝试tcp_keepalive_probes,依然没有收到对方的ack包,则会丢弃该TCP连接。

2. syn cookies设置

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

在CentOS5.3中,该选项默认值是1,即启用syn cookies功能。我们建议先关闭,直到确定受到syn flood攻击的时候再开启syn cookies功能,有效地防止syn flood攻击。也可以通过iptables规则拒绝syn flood攻击。

3.TCP  连接建立设置

echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 2 > /proc/sys/net/ipv4/tcp_syn_retries
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries

tcp_max_syn_backlog  SYN队列的长度,时常称之为未建立连接队列。系统内核维护着这样的一个队列,用于容纳状态为SYN_RESC的TCP连接(half-open connection),即那些依然尚未得到客户端确认(ack)的TCP连接请求。加大该值,可以容纳更多的等待连接的网络连接数。

tcp_syn_retries  新建TCP连接请求,需要发送一个SYN包,该值决定内核需要尝试发送多少次syn连接请求才决定放弃建立连接。默认值是5. 对于高负责且通信良好的物理网络而言,调整为2

tcp_synack_retries  对于远端SYN连接请求,内核会发送SYN+ACK数据包来确认收到了上一个SYN连接请求包,然后等待远端的确认(ack数据包)。该值则指定了内核会向远端发送tcp_synack_retires次SYN+ACK数据包。默认设定值是5,可以调整为2

4. TCP 连接断开相关设置

echo 30 >  /proc/sys/net/ipv4/tcp_fin_timeout
echo 15000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 >  /proc/sys/net/ipv4/tcp_tw_recycle

tcp_fin_timeout 对于由本端主动断开连接的TCP连接,本端会主动发送一个FIN数据报,在收到远端ACK后,且并没有收到远端FIN包之前,该TCP连接的状态是FIN_WAIT_2状态,此时当远端关闭了应用,网络不可达(拔网张),程序不可断僵死等等,本端会一直保留状态为FIN_WAIT_2状态的TCP连接,该值tcp_fin_timeout则指定了状态为FIN_WAIT_2的TCP连接保存多长时间,一个FIN_WAIT_2的TCP连接最多占1.5k内存。系统默认值是60秒,可以将此值调整为30秒,甚至10秒。

tcp_max_tw_buckets 系统同时处理TIME_WAIT sockets数目。如果一旦TIME_WAIT tcp连接数超过了这个数目,系统会强制清除并且显示警告消息。设立该限制,主要是防止那些简单的DoS攻击,加大该值有可能消耗更多的内存资源。如果TIME_WAIT socket过多,则有可能耗尽内存资源。默认值是18w,可以将此值设置为5000~30000 tcp_tw_resue 是否可以使用TIME_WAIT tcp连接用于建立新的tcp连接。

tcp_tw_recycle 是否开启快带回收TIME_WAIT tcp连接的功能。

5. tcp 内存资源使用相参数设定

echo 16777216 > /proc/sys/net/core/rmem_max
echo 16777216 > /proc/sys/net/core/wmem_max
cat /proc/sys/net/ipv4/tcp_mem
echo “4096 65536 16777216″ > /proc/sys/net/ipv4/tcp_rmem
echo “4096 87380 16777216″ > /proc/sys/net/ipv4/tcp_wmem

rmem_max 定义了接收窗口可以使用的最大值,可以根据BDP值进行调节。

wmem_max 定义了发送窗口可以使用的最大值,可以根据BDP什值进行调整。

tcp_mem [low, pressure, high] TCP用这三个值来跟踪内存使用情况,来限定资源占用。通常情况下,在系统boot之时,内核会根据可用内存总数计算出这些值。如果出现了Out of socket memory,则可以试着修改这个参数。

1)low: 当TCP使用了低于该值的内存页面数时,TCP不会考滤释放内存。

2)pressure: 当TCP使用了超过该值的内存页面数量,TCP试图稳定其对内存的占用,进入pressure模式,直到内存消耗达于low值,退出该模式。

3)hight:允许所有tcp sockets用于排队缓冲数据报的内存页数。

tcp_rmem [min, default, max]

1)min 为每个TCP连接(tcp socket)预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。

2)default 为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 rmem_default的值,所以有可能被rmem_default覆盖。

3)max 该值为每个tcp连接(tcp socket)用于接收缓冲的内存最大值。该值不会影响wmem_max的值,设置了选项参数 SO_SNDBUF则不受该值影响。

tcp_wmem [min, default, max] 如上(tcp_rmen)只不过用于发送缓存。

注:

1)可以通过sysctl -w 或者写入/etc/sysctl.conf永久保存

2)性能调优仅在于需要的时候进行调整,调整以后需要采集数据与基准测试数据进行比较。建议,不需要盲从地调整这些参数。

 原文发布时间为:2013-05-29

本文来自合作伙伴“Linux中国”

时间: 2024-07-30 10:50:34

Linux TCP 系统参数配置的相关文章

linux中iptables配置学习笔记

iptables是一个Linux下优秀的nat+防火墙工具,我使用该工具以较低配置的传统pc配置了一个灵活强劲的防火墙+nat系统,小有心得,看了网上也有很多这方面的文章,但是似乎要么说的比较少,要么就是比较偏,内容不全,容易误导,我研究了一段时间的iptables同时也用了很久,有点滴经验,写来供大家参考,同时也备日后自己翻阅. 首先要说明的是,iptables操作的是2.4以上内核的netfilter.所以需要linux的内核在2.4以上.其功能与安全性远远比其前辈 ipfwadm,ipch

阿里云使用Linux系统应用配置有哪些问题

Linux下如何进行FTP设置 ECS Linux服务器如何配置网站以及绑定域名 Ubuntu安装vncserver实现图形化访问 阿里云Docker镜像库 ECS linux中添加ftp用户,并设置相应的权限 CentOS6.5安装vncserver实现图形化访问 Linux SCP命令复制传输文件的用法 Mysql,phpmyadmin密码忘了怎么办 Linux下l2tp客户端xl2tpd的安装配置 使用SFTP方式传输文件 ECS Linux系统盘网站数据更换至数据盘 WDCP的报错处理

Linux下nginx配置https协议访问的方法_Linux

一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/nginx -V 如下所示: configure arguments: --prefix=/usr/local/nginx --with-google_perftools_module --without-http_memcached_module --user=www --group=www --

Linux系统静态网络配置

  Linux系统静态网络配置 启动Linux系统后,首先查看机器的网络配置: 1.ifconfig了解网卡信息,查看ethX 2.sudo vim /etc/network/interfaces 配置网络参数,如: auto lo iface lo inet loopback auto eth0 iface eth0 inet static address (ip地址) netmask (子网掩码) geteway (网关) 3.然后配置DNS:sudo vim /etc/resolv.con

Linux系统怎么配置DHCP服务

大家知道dhcp可以动态ip地址分配服务拉!在一个网络中,可能电脑不可能好多的情况下,大家那么总是手动给每个电脑分配ip地址等多数网络的设定.可能一个网络中存在上百台电脑,大家也要一台台跑去设定他们的ip地址,那样本人希望人总会调整的头昏,还得上串下跳的到处跑.Linux系统怎么配置DHCP服务呢? DHCPd后台程序老是读取配置文件/etc/dhcpd.conf, 下面给出一本人主机上的DHCP配置文件的例子: ddns-update-style interim; ignore client-

linux中apache配置两个域名指向同一个ip地址不成功

问题描述 linux中apache配置两个域名指向同一个ip地址不成功 两个域名解析完毕,在linux服务器中配置apache文件后有一个域名不成功.测试过解析没问题,将有问题的域名指向其它有域名的服务器发现可用~望求高手出手帮忙~ 解决方案 看看这个 解决方案二: 看看这个

脚本-求推荐几个linux系统自动化配置的软件或系统

问题描述 求推荐几个linux系统自动化配置的软件或系统 求推荐几个linux系统自动化配置的软件或系统,就是利用这样的软件可以,进行一些linux系统的自动配置,而不用再去手动配置,最好软件中可根据需求添加自己写的脚本???有这样的软件或系统吗?求推荐几个. 解决方案 系统部署 一.Kickstart 主要针对Redhat和CentOS操作系统的安装和初始配置,不过网络的配置仍然需要一台一台地进行. 二.Cobbler 与Kickstart类似,主要支持的也是Redhat和CentOS,不过它

新手学Linux(四)----Linux下安装配置MongoDB数据库

一安装步骤     1下载及解压     2创建数据库文件夹与日志文件夹     3启动MongoDB 二设置MongoDB数据库     第一步     第二步     第三步     最近在学习研究linux,今天就教教大家怎么在linux上安装配置MongoDB数据库 一.安装步骤     1.下载及解压     MongoDB的下载地址:mongodb-linux-x86_64-rhel62-3.0.7     下载完成后用WinSCP复制到/usr/local/下,然后进行解压,解压命

Linux服务器安全配置实例(二)用户账户权限配置

没有绝对的安全 在上一篇文章<linux服务器安全配置实例(一)>中介绍了我对ssh服务的一些常用的安全配置和性能优化. 其实ssh服务是我们进入服务器的一扇大门,这扇大门是提供正常人使用钥匙打开后进屋的.而对于一些恶意的小伙伴,他们会使用一些非法的方式,比如走窗户.暴力开锁等去不经过我们的同意就进屋大肆破坏. 走窗户:通过一些系统的0day漏洞或者第三方服务以及软件的漏洞溢出或者注入,在服务器中运行恶意的代码来得到登陆权限. 暴力开锁:通过一些暴力破解软件,暴力破解我们的ssh服务.网站管理