TCP三次握手的过程如下:

       主动连接端发送一个SYN包给被动连接端;

       被动连接端收到SYN包后,发送一个带ACK和SYN标志的包给主动连接端;

       主动连接端发送一个带ACK标志的包给被动连接端,握手动作完成。


TCP四次挥手的过程如下:

       主动关闭端发送一个FIN包给被动关闭端;

       被动关闭端收到FIN包后,发送一个ACK包给主动关闭端;

       被动关闭端发送了ACK包后,再发送一个FIN包给主动关闭端;

       主动关闭端收到FIN包后,发送一个ACK包,当被动关闭端收到ACK包后,四次挥手动作完成,连接断开。


netstat中的各种状态:

       CLOSED  

               初始(无连接)状态。

       LISTEN  

               侦听状态,等待远程机器的连接请求。

       SYN_SEND  

               在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。

       SYN_RECV  

               在TCP三次握手期间,主动连接端收到SYN包后,进入SYN_RECV状态。

       ESTABLISHED  

               完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。

       FIN_WAIT_1  

               在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。

       FIN_WAIT_2  

               在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。

       TIME_WAIT  

               在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。

       CLOSING  

               在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到对方的FIN包,此时,进入CLOSING状态。

       CLOSE_WAIT  

               在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。

       LAST_ACK  

               在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。


主动连接端可能的状态有:          

       CLOSED        SYN_SEND        ESTABLISHED。

主动关闭端可能的状态有:          

       FIN_WAIT_1        FIN_WAIT_2        TIME_WAIT。

被动连接端可能的状态有:          

       LISTEN        SYN_RECV        ESTABLISHED。

被动关闭端可能的状态有:          

       CLOSE_WAIT        LAST_ACK        CLOSED。


在Linux下,如果连接数比较大,可以使用效率更高的ss来替代netstat。


1、如何查看tomcat对应的进程号:ps -ef|grep tomcat

根据进程号查询对应的目录:/proc/pid/cwd、ls -la /proc/pid/fd

根据目录查找对应的进程:lsof path

2、查看tomcat的线程数:ps -Lf pid|wc -l

3、查看tomcat的并发数:netstat -an|grep 10050|awk '{count[$6]++} END{for (i in count) print(i,count[i])}'

TIME_WAIT 25

LISTEN 1

4、根据端口号查询对应进程

lsof -Pnl +m -i4|grep port #根据此命令查出端口号对应的进程pid,然后使用ps查到进程信息。

netstat -anp|grep prot  #根据此命令查出端口号对应的进程pid,然后使用ps查到进程信息。