传输层 一文搞懂 netstat命令

前言


后台开发,netstat命令总是绕不过,不仅工作中经常用过,面试也是考的多。netstat命令,对应的选项比较多,功能比较强大。netstat 常用来查看,后台服务进程的相关状态。

netstat 可以用来打印网络连接、路由表、连接的数据统计。下面我们来学习一下。

netstat-an


netstat -an命令能看到所有和本地计算机建⽴连接的IP,它包含四个部分:proto(连接⽅式)、local address(本地连接地址)、foreign address(和本地建⽴连接的地址)、state(当前端⼝状态)。通过这个命令的详细信息可以完全监控⾃⼰的计算机上的连接。

netstat -an命令显⽰的state(当前端⼝状态)有以下⼏种状态:

  • 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:没有任何连接状态

打印所有连接


 使用 -a,列出所有连接。

[root@VM-16-9-centos ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0      0 VM-16-9-centos:49326    169.254.0.55:lsi-bobcat ESTABLISHED
tcp        0     52 VM-16-9-centos:ssh      119.137.1.7:20029       ESTABLISHED
tcp        0      0 VM-16-9-centos:ssh      113.110.224.255:63626   ESTABLISHED
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN     
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                          
udp        0      0 VM-16-9-centos:ntp      0.0.0.0:*                          
udp        0      0 VM-16-9-centos:ntp      0.0.0.0:*                          
udp        0      0 0.0.0.0:38064           0.0.0.0:*                          
udp6       0      0 VM-16-9-centos:ntp      [::]:*                             
udp6       0      0 VM-16-9-centos:ntp      [::]:* 

打印 TCP 或 UDP 连接


使用 -t 选项列出 TCP 协议的连接。

[root@VM-16-9-centos ~]# netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 VM-16-9-centos:49326    169.254.0.55:lsi-bobcat ESTABLISHED
tcp        0     52 VM-16-9-centos:ssh      119.137.1.7:20029       ESTABLISHED
tcp        0      0 VM-16-9-centos:ssh      113.110.224.255:63626   ESTABLISHED
tcp        0      0 VM-16-9-centos:ssh      vps-d395feee.vps.:39128 ESTABLISHED

使用 -u 选项列出 UDP 协议的连接。

[root@VM-16-9-centos ~]# netstat -u
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State 

禁用反向域名解析


使用 -n 选项禁用域名解析功能,这样可以加快查找速度。

[root@VM-16-9-centos ~]# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 172.17.16.9:49326       169.254.0.55:5574       ESTABLISHED
tcp        0     52 172.17.16.9:22          119.137.1.7:20029       ESTABLISHED
tcp        0      0 172.17.16.9:22          113.110.224.255:63626   ESTABLISHED
tcp        0      0 172.17.16.9:52236       169.254.0.4:80          TIME_WAIT  

-p     显示对应的程序识别码和程序名称


使用 -p 选项列出正在监听的套接字。

[root@VM-16-9-centos ~]# netstat -p
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 VM-16-9-centos:49326    169.254.0.55:lsi-bobcat ESTABLISHED 1400/YDService      
tcp        0     52 VM-16-9-centos:ssh      119.137.1.7:20029       ESTABLISHED 22131/sshd: root@pt 
tcp        0      0 VM-16-9-centos:ssh      host-188-14-121-2:55529 TIME_WAIT   -                   
tcp        0      0 VM-16-9-centos:ssh      113.110.224.255:63626   ESTABLISHED 32201/sshd: root@pt 

打印监听中的连接


使用 -l 选项列出正在监听的套接字。

[root@VM-16-9-centos ~]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN     
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                          

打印连接进程信息


使用 -p 选项查看进程信息。

[root@VM-16-9-centos ~]# netstat -p
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 VM-16-9-centos:49326    169.254.0.55:lsi-bobcat ESTABLISHED 1400/YDService      
tcp        0      0 VM-16-9-centos:48680    169.254.0.55:webcache   TIME_WAIT   -                   
tcp        0     52 VM-16-9-centos:ssh      119.137.1.7:20029       ESTABLISHED 22131/sshd: root@pt 
tcp        0      0 VM-16-9-centos:ssh      113.110.224.255:63626   ESTABLISHED 32201/sshd: root@pt 
tcp        0      0 VM-16-9-centos:ssh      host-188-14-121-2:56025 ESTABLISHED 10384/sshd: unknown                         

查看TCP连接数 


1)   统计80端口连接数

 #netstat -nat|grep -i "80"|wc -l
 4341

netstat -an会打印系统当前网络链接状态,而grep -i “80”是用来提取与80端口有关的连接的,wc -l进行连接数统计。 最终返回的数字就是当前所有80端口的请求总数。 

2)统计已连接上的,状态为”established”

 netstat -na|grep ESTABLISHED|wc -l

netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。 最终返回的数字就是当前所有80端口的已建立连接的总数。 

根据进程pid查端口   t(TCP连接) p(程序名称)n(禁用域名解析)


利用 grep 命令,通过进程 pid 查出监听端口。

[apps@TLVM202016131]$ netstat  -tpn | grep 5891
tcp        0      0 10.202.16.131:42872     10.202.16.14:1521       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:1521      10.202.17.29:25418      ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:42832     10.202.16.14:1521       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:1521      10.202.17.29:5368       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:1521      10.202.17.26:35742      ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:42878     10.202.16.14:1521       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:10454     10.202.16.14:1521       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:10002     10.202.16.14:1521       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:1521      10.202.17.29:11002      ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:1521      10.202.17.29:4545       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:9988      10.202.16.14:1521       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:42816     10.202.16.14:1521       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:42812     10.202.16.14:1521       ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:1521      10.202.17.29:30755      ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:1521      10.202.17.29:59654      ESTABLISHED 5891/nginx: worker  
tcp        0      0 10.202.16.131:1521      10.202.17.29:51550      ESTABLISHED 5891/nginx: worker  

根据端口查进程  t(TCP连接) p(程序名称)n(禁用域名解析)


利用 grep 命令,通过监听端口查出进程 pid 。

[apps@TLVM202016131]$netstat  -tpn | grep 9988 
tcp        0      0 10.202.16.131:9988      10.202.16.14:1521       ESTABLISHED 5891/nginx: worker   

统计网络socket状态


在linux 服务器查看tcp 连接数的命令:借助 awk 命令,统计socket状态对应的个数。

[test]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 
ESTABLISHED 5
TIME_WAIT 2                    
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值