linux内核关闭tcp校验,linux内核tcp调优规范与方案
1、TCP常用内核参数优化
上一篇我们介绍了服务器上有大量的TIME_WAIT等待,可能造成的危害,以及给web服务器带来负担。如何解决这个问题呢,其实,解决思路很简单,就是让服务器能够快速回收和重用那些TIME_WAIT的资源即可。这就是对tcp调优。
在linux系统上,对tcp调优主要是通过调整Linux内核参数来实现的,其实主要是对/proc文件系统进行设置,/proc文件系统是一种内核和内核模块用来向进程(process) 发送信息的机制(所以叫做/proc)。通过这个伪文件系统我们可以和内核内部数据结构进行交互,在运行中改变内核参数。 与其他文件系统不同,/proc存在于内存之中而不是硬盘上。proc文件系统以文件的形式向用户空间提供了访问接口,这些接口可以用于在运行时获取相关信息或者修改参数配置,因而它是非常方便的一个接口。
/proc目录下存放着大多数的内核参数,并且可以在系统运行的同时进行更改, 但是,重新启动机器后就会失效,怎么解决呢,我们可以通过将更改的内核参数写入 /etc/sysctl.conf文件中实现永久更改,在/etc/sysctl.conf文件中添加或者修改如何设置:
#对于一个新建连接,内核要发送多少个SYN连接请求才决定放弃,不应该大于255,默认值是5,这里设置为2.
net.ipv4.tcp_syn_retries=2
#表示当keepalive启用的时候,TCP发送keepalive消息的频度。缺省是7200秒,改为300秒
net.ipv4.tcp_keepalive_time=300
#表示孤儿socket废弃前重试的次数,重负载web服务器建议调小。
net.ipv4.tcp_orphan_retries=1
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_fin_timeout=30
#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 8192 (注意:这个队列大小除了系统设置外,程序里面也要设置)
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻 击,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
修改完之后执行/sbin/sysctl -p让参数生效。
其实TIME-WAIT的问题还是比较好处理的,可以通过调节服务器参数实现,有时候还会出现CLOSE_WAIT很多的情况,CLOSE_WAIT是在对方关闭连接之后服务器程序自己没有进一步发出ACK信号。换句话说,就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直被程序占着。所以解决CLOSE_WAIT过多的方法还需要检查程序,检查代码,因为问题很大程度上出在服务器程序中。
到此为止,TCP优化到一段落。
2、TCP洪水攻 击(SYN Flood)的诊断和处理
SYN Flood是当前最流行的DoS(拒绝服务)与DDoS(分布式拒绝服务)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请求连接第一个握手包(SYN包),被攻 击服务器回应第二个握手包(SYN+ACK包),因为对方是假冒IP,对方永远收不到包且不会回应第三个握手包。导致被攻 击服务器保持大量SYN_RECV状态的“半连接”,并且会重试默认5次回应第二个握手包,直到塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来。
那么如何诊断SYN Flood问题呢,一般情况下如果发现网站打开缓慢、CPU负载高、ssh登陆慢甚至登陆不上,同时在系统日志中发现如下信息:
[root@test ~]# tail -f /var/log/messages
Mar 12 02:38:03 test kernel: possible SYN flooding on port 80. Sending cookies.
Mar 12 02:39:04 test kernel: possible SYN flooding on port 80. Sending cookies.
Mar 12 02:40:04 test kernel: possible SYN flooding on port 80. Sending cookies.
如果出现类似这种情况,那可能就是遭遇了TCP洪水***。
此时,通过如下命令检查TCP连接状态:
[root@localhost ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIMEWAIT 7807
FINWAIT1 59
ESTABLISHED 8112
FINWAIT2 809
SYNRECV 198098
CLOSING 27
LASTACK 36
检查发现,SYNRECV连接数会非常多。
针对这个问题,首先要做应急处理,那就是找到请求数请最多的IP地址,查找攻 击来源,使用如下命令组合:
[root@localhost ~]# netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n3
36.171.242
149.130.152
149.130.18
查到可疑的IP后,利用iptables临时封掉最大嫌疑攻 击的IP或IP号段。
接着,还需要调整系统内核参数,来抵挡这种攻 击,根据上面对SYN Flood攻 击的特点,我们只需修改操作系统内核参数即可有效缓解。主要参数如下:
net.ipv4.tcpsyncookies = 1
net.ipv4.tcpmaxsynbacklog = 81920
net.ipv4.tcpsynackretries = 2
三个参数的含义分别为启用SYN Cookie、设置SYN最大队列长度以及设置SYN+ACK最大重试次数。
SYN Cookie的作用是缓解服务器资源压力。启用之前,服务器在接到SYN数据包后,会立即分配存储空间,并随机化一个数字作为SYN号发送SYN+ACK数据包。然后保存连接的状态信息等待客户端确认。而在启用SYN Cookie之后,服务器不再马上分配存储空间,而且通过基于时间种子的随机数算法设置一个SYN号,替代完全随机的SYN号。发送完SYN+ACK确认报文之后,清空资源不保存任何状态信息。直到服务器接到客户端的最终ACK包。同时,通过Cookie检验算法鉴定是否与发出去的SYN+ACK报文序列号匹配,匹配则通过完成握手,失败则丢弃。
tcpmaxsynbacklog则是使用服务器的内存资源,换取更大的等待队列长度,让攻 击数据包不至于占满所有连接而导致正常用户无法完成握手。
net.ipv4.tcpsynackretries是降低服务器SYN+ACK报文重试次数(默认是5次),尽快释放等待资源。
这三种措施与攻 击的三种危害一一对应,完完全全是对症下药。但这些措施也是双刃剑,设置过大可能消耗服务器更多的内存资源,甚至影响正常用户建立TCP连接,因此,需要评估服务器硬件资源和大小谨慎设置。
linux内核关闭tcp校验,linux内核tcp调优规范与方案相关推荐
- linux满负荷运行tail,linux内核tcp调优规范与方案
1.TCP常用内核参数优化 上一篇我们介绍了服务器上有大量的TIME_WAIT等待,可能造成的危害,以及给web服务器带来负担.如何解决这个问题呢,其实,解决思路很简单,就是让服务器能够快速回收和重用 ...
- Linux 网络包接收过程的监控与调优
Linux内核对网络包的接收过程大致可以分为接收到RingBuffer.硬中断处理.ksoftirqd软中断处理几个过程.其中在ksoftirqd软中断处理中,把数据包从RingBuffer中摘下来, ...
- 在RedHat Enterprise Linux 上Oracle 9i的安装配置与调优
1 安装配置Oracle 9i数据库 本章描述内容如下所示: 1.1 安装前的准备工作 介绍在安装Oracle之前所需的准备工作. 1.2安装前的系统设置 介绍在安装Oracle之前所必须的系统设置. ...
- 51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程(高俊峰)
51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程 第一课 Linux运维经验分享与思路 1.一般把主机名,写到hosts下 127.0.0.1 hostname,因为 ...
- Linux内核TCP/IP参数分析与调优
如图展示的是TCP的三个阶段.1,TCP三次握手. 2,TCP数据传输. 3,TCP的四次挥手. SYN:(同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建 ...
- linux下关闭网络服务,Linux 关闭网络管理服务
关于各种类型数据char.int.double.float 所占空间长度的计算,而char类型让我长姿势了 #include int main() { using namespace std; //i ...
- Linux网络包接收过程的监控与调优
Linux内核对网络包的接收过程大致可以分为接收到RingBuffer.硬中断处理.ksoftirqd软中断处理几个过程.其中在ksoftirqd软中断处理中,把数据包从RingBuffer中摘下来, ...
- linux修改文件句柄数生效_linux系统层面调优和常见的面试题
linux系统层面调优和常见的面试题mp.weixin.qq.com 无论对Spark集群,还是Hadoop集群等大数据相关的集群进行调优,对linux系统层面的调优都是必不可少的,这里主要介绍3种 ...
- Linux内核 TCP/IP、Socket参数调优
详见http://blog.csdn.net/u010009038/article/details/51917460 转载于:https://blog.51cto.com/jack88/2063979
最新文章
- Ubuntu:安装deb文件包
- jsp将数字转换为价格并求和_在JSP页面怎么实现求和操作和百分比操作
- 使用dbunit和system-rules测试代码
- linux二重进程,二叉树递归实现与二重指针
- 【渝粤题库】陕西师范大学292969 会计学 作业 (专升本、高起本)
- gdb调试时调用函数、设置观察点以及GDB的宏
- android学习笔记---31_多线程断点下载器,下载原理实现
- (原创)C++ IOC框架
- Linux系统编程——进程替换:exec 函数族
- unix下ODBC连接MySQL编程_通过unixODBC访问PostgreSQL数据库
- 颜色列表(中英文名称,RGB HSV CMYK值)
- 磁性元件:初始磁导率、有效磁导率、品质因数、矫顽力、电感因数。。。。。
- 2019年蚂蚁金服面经(已拿Offer)!附答案!!
- Vue中的视频播放插件( vue-video-player )
- android定制离线地图,在Android上创建离线地图
- 二维码原理及生成示例
- 西安电子科技大学c语言答案,西安电子科技大学2021春 面向对象程序设计(C++)大作业答案...
- 高性能Javascript(1)
- 【牛客挑战赛63】圣遗物
- 读书笔记:《流畅的Python》第21章 类元编程
热门文章
- Java连接Mysql数据库增删改查实现
- html获取微信code,get-weixin-code.html
- a=10a=0C语言,C语言程序设计10A卷试题及答案.doc
- 用撸Arduino的方法撸STM32F103xx
- SQLmap的下载和安装,以及其参数大全和使用教程(值得收藏)
- linux打开u盘里的文件,Linux下U盘内容为只读文件不能存储其他内容的解决办法
- php 什么时候销毁对象,什么决定什么时候在PHP中销毁类对象?
- 读入一段文本到 vector 对象,每个单词存储为 vector 中的一个元素。把 vector 对象中每个单词转化为大写字母。输出 vector 对象中转化后的元素,每八个单词为一行输出。
- python turtle绕原点旋转_Python基本图形绘制
- Android开发之通过反射获取全局的application