一、TCP协议
TCP(Transmission Control Protocol)传输控制协议: 提供面向连接的
可靠的
数据传输、适合传输大数据、速度慢
三次握手:
- 第一次握手:建立连接。客户端发送连接请求报文,将SYN位 置为1,Seq (Sequence Number)为x;然后,客户端进入SYN_SEND(同步发送)状态,等待服务器的确认;
- 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Ack (Acknowledgment Number)为x+1(Seq+1);同时,自己还要发送SYN请求信息,将SYN位 置为1,Seq为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV(同步接收)状态;
- 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Ack设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED(建立连接)状态,完成TCP三次握手。
四次挥手:
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
- 第一次挥手:主机1(可以使客户端,也可以是服务器端),设置Seq和Ack,向主机2发送一个FIN报文段, 主机1进入FIN_WAIT_1状态 主机1告诉主机2: 我没有数据要发送了,请求关闭连接
- 第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Ackr为Seq加1;主机1进入FIN_WAIT_2状态; 主机2回复主机1,我收到你的关闭请求了
- 第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态; 主机2告诉主机1: 我也没有数据要发送了,请求关闭连接
- 第四次挥手:主机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页面设置
自定义模板如之前。