查看端口的监听状态
netstat 命令: 查看系统中网络连接状态信息,
常用的参数格式 : netstat -anutp
-a, --all 显示本机所有连接和监听的端口
-n, --numeric don't resolve names 以数字形式显示当前建立的有效连接和端口
-u 显示udp协议连接
-t 显示tcp协议连接
-p, --programs 显示连接对应的PID与程序名
命令执行结果详解:
Proto #连接协议的种类
Recv-Q #接收到字节数
Send-Q #从本服务器,发出去的字节数
Local Address #本地的IP地址,可以是IP,也可以是主机名
Foreign Address #远程主机的IP 地址
STATE: #网络连接状态
CLOSED : 初始(无连接)状态。
LISTEN : 侦听状态,等待远程机器的连接请求。
ESTABLISHED: 完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
TIME_WAIT : 在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。
扩展:MSL
MSL,即Maximum Segment Lifetime,一个数据分片(报文)在网络中能够生存的最长时间,在RFC 793中定义MSL通常为2分钟,即超过两分钟即认为这个报文已经在网络中被丢弃了。对于一个TCP连接,在双方进入TIME_WAIT后,通常会等待2倍MSL时间后,再关闭掉连接,作用是为了防止由于FIN报文丢包,对端重发导致与后续的TCP连接请求产生顺序混乱
实战:服务器上有大量TIME_WAI连接,如何优化TCP连接,快速释放tcp连接 ?
# netstat -antup | grep TIME_WAI
tcp 0 0 123.57.82.225:80 111.196.245.241:4002 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:3970 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:4486 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:3932 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:3938 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:3917 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:3944 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:3957 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:3922 TIME_WAIT -
解决:
例:linux下默认MSL等待时间是60秒
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60 秒
# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout #通过缩短时间time_wait时间来快速释放链接