netstat命令使用总结
作用:
显示网络连接,端口,路由表,接口状态。一般用于查看本机各个端口的网络连接状况
语法参数:
netstat [options]
options参数
参数 |
含义 |
解释 |
-r |
--route |
显示路由表 |
-l |
--listensing |
显示正在监听的socket |
-a |
all |
显示所有正在监听和非监听的socket |
-n |
numeric |
显示数字IP地址(默认主机名) |
-t |
TCP |
显示tcp协议的连接情况 |
-u |
udp |
显示UDP协议的连接情况 |
-s |
statistics |
显示网络统计 |
-p |
--programs |
显示监听的socket进程 |
网络连接状态
状态 |
说明 |
LISTEN |
监听来自对端的TPC端口的连接请求 |
SYN_SENT |
发送连接请求后等待匹配的连接请求(尝试建立一个连接) |
SYN_RECEIVED |
再收到和发送一个连接请求后等待对方对连接请求的确认 |
ESTABLISHED |
代表一个打开的连接(已建立的连接) |
FIN_WAIT1 |
等待远程TCP连接中断请求,或先前的连接中断请求的确认 |
FIN_WAIT2 |
从远程TCP等待连接中断请求 |
CLOSE_WAIT |
等待从本地用户发来的连接中断请求 |
CLOSING |
等待远程TCP对连接中断的确认 |
LAST_ACK |
等待原来的发向远程TCP的连接中断请求的确认 |
TIME_WAIT |
等待远程TCP接收到连接中断请求的确认(系统在等待客户端的响应) |
CLOSED |
没有任何连接状态 |
说明:上面每一种连接状都是一个并发 |
具体应用实例
查看所有连接
[root@localhost ~]# netstat –an
查看所有tcp和udp的连接
[root@localhost ~]# netstat -tunl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
输出内容讲解
Proto 协议使用的协议
Recv-Q
Send-Q
Local Address 本地的IP及端口
Foreign Address 本地连接远端的IP及端口
State 网络状态
查看ssh监听的端口
[root@localhost ~]# netstat -anput | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1359/sshd
tcp 0 52 192.168.254.10:22 192.168.254.19:63759 ESTABLISHED 1514/sshd
tcp 0 0 :::22 :::* LISTEN 1359/sshd
生产案例:连接数
(1)、查看当前系统的连接数(已连接的)
[root@localhost ~]# netstat -an |awk 'BEGIN {FS=":"} /ESTABLISHED/ {print $4":"$5" "$8}' |sort |uniq -c |sort -rn |head -5
5 172.16.123.177:80 119.102.6.54
2 192.168.123.17:22177 192.168.123.10
2 172.16.123.177:80 121.207.208.40
2 172.16.123.177:80 117.136.16.197
2 172.16.123.177:80 110.90.250.8
说明:找出网络状态为ESTABLISHED已连接的前五个IP地址
(2)、生产案例:查看当前系统的TIME_WAIT连接(等待的连接,没有被释放,网站访问慢的原因)(重点)
[root@localhost ~]# netstat -an |awk 'BEGIN {FS=":"} /TIME_WAIT/ {print $4":"$5" "$8}' |sort |uniq -c |sort -rn |head -5
3 172.16.123.177:80 117.136.15.108
2 172.16.123.177:80 211.137.59.23
2 172.16.123.177:80 117.136.25.141
1 172.16.123.177:80 183.213.18.83
1 172.16.123.177:80 125.39.239.221
注意:httpd服务和mysqld等都会有连接状态,通过本地端口区分,都会导致网站访问慢的原因
说明:TIME_WAIT状态是等待客户端的响应,这种等待会占用连接数,导致网站访问慢
(3)、优化TIME_WAIT(内核优化参数)
说明:TIME_WAIT如果时间比较大,该连接没有被释放,快速回收不提供服务连接出现过多TIME_WAIT连接,清理没有被释放的TIME_WAIT连接
提示:连接数超过五千,可能就无法提供服务了,将某个IP大于50个就使用防火墙给干掉,正常情况下一个客户端不会超过10个
net.ipv4.tcp_fin_timeout = 2
#→表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_tw_reuse = 1
#→表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。
net.ipv4.tcp_tw_recycle = 1
#→表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
提示:以上两个参数为了防止生产环境下 time_wait过多设置的。
控制TIME_WAIT的数量
如果设置了,服务器超过了这个数量,日志中会提示警告,默认是180000
生产案例:蓝讯CDN缓存服务器生产环境使用的内核参数(提供缓存的服务器)
[root@CNC-BJ-H-388 ~]# sysctl -p |grep net.ipv4
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_tw_buckets = 1800000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_retries1 = 22
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 3