netstat命令



用于显示本机网络的连接状态、运行端口和路由表等信息。







netstat命令的参数选项及说明





-r    显示路由表信息,该功能类似于前面学过的route 和ip route



-g    显示多播功能群组成员,该功能类似于前面学过的ip maddr



-i    显示网络接口信息,该功能类似于前面学过的ip -s link



-s    显示各类协议的统计信息



-n    显示数字形式的地址而不是去解析主机、端口或用户名。默认情况下,netstat命令会尝试解析并显示主机的主机名,这个过程通常比较长也是非必需的



-a    显示处于监听状态和非监听状态的socket信息



-A    显示指定网络类型的网络连接状态



-c<秒数>    后面跟的秒数表示每隔几秒就刷新显示一次



-l    仅显示连接状态为“LISTEN”的服务的网络状态



-t    显示所有的TCP连接情况



-u    显示所有的UDP连接情况



-p    显示socket所属进程的PID和名称





常用选项组合1



[root@cs6 ~]# netstat -an



Active Internet connections (servers and established)



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     64 10.0.0.100:22               10.0.0.1:2827               ESTABLISHED



tcp        0      0 10.0.0.100:22               10.0.0.1:6358               ESTABLISHED



tcp        0      0 :::22                       :::*                        LISTEN      



tcp        0      0 ::1:25                      :::*                        LISTEN      



Active UNIX domain sockets (servers and established)



Proto RefCnt Flags       Type       State         I-Node Path



unix  8      [ ]         DGRAM                    12335  /dev/log



unix  2      [ ACC ]     STREAM     LISTENING     12689  public/cleanup



unix  2      [ ACC ]     STREAM     LISTENING     12697  private/tlsmgr



unix  2      [ ACC ]     STREAM     LISTENING     12702  private/rewrite



unix  2      [ ACC ]     STREAM     LISTENING     12706  private/bounce



unix  2      [ ACC ]     STREAM     LISTENING     12710  private/defer



unix  2      [ ACC ]     STREAM     LISTENING     12714  private/trace



unix  2      [ ACC ]     STREAM     LISTENING     12718  private/verify



unix  2      [ ACC ]     STREAM     LISTENING     12722  public/flush



unix  2      [ ACC ]     STREAM     LISTENING     12726  private/proxymap







针对该命令的第一行内容进行了说明。



    第一行活动网络连接说明





第一列 Proto     socket使用的协议(TCP、UDP、RAW)



第二列 Recv-Q    接收到但是还未处理的字节数



第三列 Send-Q    已经发送但是未被远程主机确认收到的字节数



第四列 Local Address 本地主机地址和端口



第五列 Foreign Address 远程主机地址和端口



第六列 State     socket的状态,通常仅仅有TCP的状态,状态值可有ESTABLISHED、SYN_SENT、SYN_RECV、FIN_WAIT1、FIN_WAIT2、TIME_WAIT等









第6列 State状态信息详解





ESTABLISHED   socket已经建立连接,表示处于连接的状态,一般认为有一个ESTABLISHED 是一个服务的并发连接。



             该连接状态在生产场景中很重要,需要重点关注



SYN_SENT     socket正在积极尝试建立一个连接,即处于发送后连接前的一个等待但未匹配进入连接的状态



SYN_RECV     已经从网络上收到一个连接请求



FIN_WAIT1    socket已关闭,连接正在或正要关闭



FIN_WAIT2    连接已关闭,并且socket正在等待远端结束



TIME_WAIT    socket正在等待关闭处理仍在网络上的教据包,这个连接状态在生产场景中很重要,需要重点关注



CLOSED        socket不再被占用了



CLOSE_WAIT    远端已经结束,等待socket关闭



LAST_ACK      远端已经结束,并且socket也已关闭,等待acknowledgement



LISTEN        socket正在监听连接请求



CLOSING       socket关闭,但是我们仍旧没有发送数据



UNKNOWN       socket状态未知







常用选项组合2





[root@cs6 ~]# netstat -lntup



Active Internet connections (only servers)



Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   



tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1358/sshd           



tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1437/master         



tcp        0      0 :::22                       :::*                        LISTEN      1358/sshd           



tcp        0      0 ::1:25                      :::*                        LISTEN      1437/master





以上命令语句的作用为显示所有TCP和UDP正在监听的连接信息。



-l:显示所有LISTEN状态的网络连接。



-n:显示IP地址,不进行DNS解析成主机名、域名。



-t:显示所有TCP连接。



-u:显示所有UDP连接。



-p:显示进程号和进程名。









显示当前系统的路由表。





[root@cs6 ~]# netstat -rn



Kernel IP routing table



Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface



10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0



172.16.1.0      0.0.0.0         255.255.255.0   U         0 0          0 eth1



10.1.0.0        10.0.0.253      255.255.255.0   UG        0 0          0 eth0



169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0



0.0.0.0         10.0.0.2        0.0.0.0         UG        0 0          0 eth0









选项-i显示网络的接口状况。





[root@cs6 ~]# netstat -i



Kernel Interface table



Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg



eth0       1500   0     5405      0      0      0     3518      0      0      0 BMRU



eth1       1500   0        0      0      0      0       18      0      0      0 BMRU



lo        65536   0        0      0      0      0        0      0      0      0 LRU







以下是命令结果解释。



lface:表示网络设备的接口名称。



MTU:表示最大传输单元,单位为字节。



RX-OK/TX-OK:表示已经准确无误地接收/发送了多少数据包。



RX-ERR/TX-ERR:表示接收/发送数据包时产生了多少错误。



RX-DRP/TX-DRP:表示接收/发送数据包时丢弃了多少数据包。



RX-OVR/TX-OVR:表示由于误差而遗失了多少数据包。



Flg:表示接口标记,其中各标记含义具体如下。



  • L:表示该接口是个回环设备。
  • B:表示设置了广播地址。
  • M:表示接收所有数据包。
  • R:表示接口正在运行。
  • U:表示接口处于活动状态。
  • o:表示在该接口上禁用arp。
  • P:表示一个点到点的连接。



正常情况下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都应该为0,如果这几个选项的值不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一定会下降。









[root@bzhl ~]# netstat -n|awk '/^tcp/ {++lewen[$NF]} END {for (a in lewen) print a ,lewen[a]}'



ESTABLISHED 5



TIME_WAIT 1