tcp连接数过高原因 查看tcp端口连接数

一、本次监控的服务器环境为:
操作系统版本:centos7
zabbix-agnet版本:3.0.8
zabbix-server版本: 3.4.10
二、在安装之前先了解一下tcp的一些知识 , 各个状态的意义如下:
LISTEN – 侦听来自远方TCP端口的连接请求;
SYN-SENT – 在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED – 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED – 代表一个打开的连接 , 数据可以传送给用户;
FIN-WAIT-1 – 等待远程TCP的连接中断请求 , 或先前的连接中断请求的确认;
FIN-WAIT-2 – 从远程TCP等待连接中断请求;
CLOSE-WAIT – 等待从本地用户发来的连接中断请求;
CLOSING – 等待远程TCP对连接中断的确认;
LAST-ACK – 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT – 等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED – 没有任何连接状态;
TCP连接过程是状态的转换 , 促使发生状态转换的是用户调用:OPEN , SEND , RECEIVE , CLOSE , ABORT和STATUS;传送过来的数据段 , 特别那些包括以下标记的数据段SYN , ACK , RST和FIN;还有超时 , 上面所说的都会使TCP状态发生变化 。
详解
1、LISTENING状态
FTP服务启动后首先处于侦听(LISTENING)状态 。
2、ESTABLISHED状态
ESTABLISHED的意思是建立连接 。表示两台机器正在通信 。
3、CLOSE_WAIT
对方主动关闭连接或者网络异常导致连接中断 , 这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭
4、TIME_WAIT
我方主动调用close()断开连接 , 收到对方确认后状态变为TIME_WAIT 。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分 段最大生存期) , 以此来确保旧的连接状态不会对新连接产生影响 。处于TIME_WAIT状态的连接占用的资源不会被内核释放 , 所以作为服务器 , 在可能的情 况下 , 尽量不要主动断开连接 , 以减少TIME_WAIT状态造成的资源浪费 。
目前有一种避免TIME_WAIT资源浪费的方法 , 就是关闭socket的LINGER选项 。但这种做法是TCP协议不推荐使用的 , 在某些情况下这个操作可能会带来错误 。
5、SYN_SENT状态
SYN_SENT状态表示请求连接 , 当你要访问其它的计算机的服务时首先要发个同步信号给该端口 , 此时状态为SYN_SENT , 如果连接成功了就变为 ESTABLISHED , 此时SYN_SENT状态非常短暂 。但如果发现SYN_SENT非常多且在向不同的机器发出 , 那你的机器可能中了冲击波或震荡波 之类的病毒了 。这类病毒为了感染别的计算机 , 它就要扫描别的计算机 , 在扫描的过程中对每个要扫描的计算机都要发出了同步请求 , 这也是出现许多 SYN_SENT的原因 。
三、服务端安装部署
1、先在服务器上新建脚本vim
/etc/zabbix/tcp_connections.sh
#!/bin/bash
#netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ | grep -w “ESTABLISHED” |cut -d” ” -f2
#netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ | grep -w “TIME_WAIT” |cut -d” ” -f2
#netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ | grep -w “LISTEN” |cut -d” ” -f2
ARGS=1
if [ $# -ne “$ARGS” ];then

推荐阅读