netstat
Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
netstat是查看系统网络信息一个常用的工具。下面通过一些实用的案例,逐步介绍该如何用好该工具。
- 查看所有TCP连接信息
补充说明:# netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:42592 0.0.0.0:* LISTEN tcp 0 272 10.211.55.6:22 10.211.55.2:63775 ESTABLISHED tcp 0 0 :::111 :::* LISTEN tcp 0 0 :::80 :::* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 ::1:631 :::* LISTEN tcp 0 0 ::1:25 :::* LISTEN tcp 0 0 :::57630 :::* LISTEN
-a
表示查看所有的连接,包括非ESTAB状态下的-n
表示不进行域名解析,加快命令执行速度-t
表示仅显示TCP相关信息, 类似选项还有UDP(-u
), RAW(-w
)和Listening(-l
)@Recv-Q/@Send-Q分别表示接收队列和发送队列中的字节数, 可以看到只有在ESTAB状态的TCP这两个域才有意义。多说一点,作为类似的工具ss中的Send-Q在socket处于Listen状态时,它的含义是指Listen backlog queue的长度。
如果是线上设备,直接使用
netstat
可能会有非常多的输出结果。只有结合一定的文本处理,才能获取比较有意义的信息。比如可以统计某端口的流数目,已建连TCP流Send-Q和Recv-Q的平均值等。
- 查看各个协议的统计信息
补充说明:# netstat -s # strace -e open netstat -s 查看netstat -s数据来源 ... open("/proc/net/snmp", O_RDONLY) = 3 open("/proc/net/netstat", O_RDONLY) = 3 ...
netstat -s
读取的统计计数器均来自系统提供,这些计数器对于查看系统网络状况信息非常重要。nstat
工具可以以统计的方式查看这些计数器的值,进行一定的格式化后非常适合导入到graphite等系统中查看。即使是一条简单的命令,也能获取非常有用的信息。比如想要查看一分钟内,TCP流全局的重传率:nstat -n; sleep 60; nstat -za |egrep -i 'outsegs|retransseg' |tr '\n' ' ' |awk '{print $5/$2}'
查看已建连的TCP流对应的应用程序
# netstat -ntp Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 10.211.55.6:22 10.211.55.2:52520 ESTABLISHED 19771/sshd tcp 0 0 10.211.55.6:22 10.211.55.2:63775 ESTABLISHED 17645/sshd
查看网卡基本统计信息
# 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 eth1 1500 0 65218 0 0 0 38484 0 0 0 BMRU lo 16436 0 224 0 0 0 224 0 0 0 LRU
查看路由信息
# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.211.55.0 * 255.255.255.0 U 0 0 0 eth1 default localhost 0.0.0.0 UG 0 0 0 eth1
补充说明:
netstat -r
的输出信息来自/proc/net/route
。不同内核输出内容可能不一样。Flags常见标记含义
G
: 该路由配置了Gateway
U
: 该路由对应的网卡已经UP
H
: 只有一个Host能够使用该路由