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能够使用该路由

results matching ""

    No results matching ""