之前用netstat命令主要是查看端口占用,比如,启动某个服务之前,得先看一下这个服务用到的端口是否已经被占用了。
比如mysql,mysql默认占用3306端口,在启动之前,我们就得看看3306端口是否已经被占用了,如果被别的程序占用了,我们就得以另一个端口启动了。
命令:netstat -nlp | grep 3306
也可以用
netstat -nap | grep 3306
这两个命令有啥区别呢?以前一直不是很理解,一直都用 -nlp来查端口占用,今天突然决心要把它弄明白,以下为个人总结。
netstat,顾明思议,网络状态,之前接触过pidstat,同理,进程状态。
-a:显示所有socket-l:仅显示监听状态(LISTEN)的socket
这样看来,-l选项是-a选项的子集。
测试一下,刚开始,没有程序连接mysql,执行这两个命令的结果都是一样的,如下:但是当我们让客户端连接mysql以后,再执行这两个命令,结果就不一样了
先用Navicat远程连接mysql选项-nap查出的结果要比选项-nlp查出的结果多。
在netstat命令的输出中,有一项是State,状态,也就是socket连接都是有状态的(个人理解),在上图的输出中, TIME_WAIT:TCP在关闭的时候有个四次握手的过程,主动关闭方在四次握手的最后一个ACK发送之后会变成TIME_WAIT状态(建立连接,三次握手,释放连接,四次握手)。 LISTEN:监听状态,等待远程机器的连接请求。ESTABLISHED:建立连接状态,可以进行通信
以上仅为个人总结,仅供参考,大家可以在自己的机器上试试。看来以后还得再学学TCP三次握手等内容。