监控tcp连接

  • Post author:
  • Post category:其他


一、TCP协议

TCP(Transmission Control Protocol)传输控制协议: 提供面向连接的

可靠的

数据传输、适合传输大数据、速度慢


三次握手:

  1. 第一次握手:建立连接。客户端发送连接请求报文,将SYN位 置为1,Seq (Sequence Number)为x;然后,客户端进入SYN_SEND(同步发送)状态,等待服务器的确认;
  2. 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Ack (Acknowledgment Number)为x+1(Seq+1);同时,自己还要发送SYN请求信息,将SYN位 置为1,Seq为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV(同步接收)状态;
  3. 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Ack设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED(建立连接)状态,完成TCP三次握手。

四次挥手:

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

  1. 第一次挥手:主机1(可以使客户端,也可以是服务器端),设置Seq和Ack,向主机2发送一个FIN报文段, 主机1进入FIN_WAIT_1状态 主机1告诉主机2: 我没有数据要发送了,请求关闭连接
  2. 第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Ackr为Seq加1;主机1进入FIN_WAIT_2状态; 主机2回复主机1,我收到你的关闭请求了
  3. 第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态; 主机2告诉主机1: 我也没有数据要发送了,请求关闭连接
  4. 第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;

主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明主机2已正常关闭,那好,主机1也可以关闭连接了。


各个状态的意义:


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连接状态监控

[root@localhost ~]# ss -nat | grep 80
LISTEN     0      128         :::80                      :::*                  
FIN-WAIT-2 0      0       ::ffff:192.168.100.130:80                  ::ffff:192.168.100.120:59020              
FIN-WAIT-2 0      0       ::ffff:192.168.100.130:80                  ::ffff:192.168.100.120:59018              


Key的定义:


vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf



UseParamenter=tcp.status.listen, ss -nat | grep :80 | grep -i ‘LISTEN’ | wc -l


UseParamenter=tcp.status.timewait, ss -nat | grep :80 | grep -i ‘TIME-WAIT’ | wc -l


UseParamenter=tcp.status.established, ss -nat | grep :80 | grep -i ‘ESTAB’ | wc -l


UseParamenter=tcp.status.syn_recv, ss -nat | grep :80 | grep -i ‘SYN_RECV’ | wc -l


UseParamenter=tcp.status.syn_sent, ss -nat | grep :80 | grep -i ‘SYN_SENT’ | wc -l


UseParamenter=tcp.status.close, ss -nat | grep :80 | grep -i ‘CLOSE’ | wc -l


传参形式定义:

UaeParamenter=tcp.status.[*], ss -nat | grep :80 | grep -i ‘$1’ | wc -l


获取参数:


zabbix_get -s 192.168.100.130 -k tcp.status[listen]

三、web页面设置

自定义模板如之前。



版权声明:本文为weixin_49888561原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。