系统管理指南:IP 服务

使用 netstat 命令监视网络状态

netstat 命令生成包含网络状态和协议统计信息的显示内容。可以通过表格形式显示 TCP、SCTP(流控制传输协议)和 UDP(用户数据报协议)端点的状态,还可以显示路由表信息和接口信息。

netstat 可显示各种类型的网络数据,具体取决于所选择的命令行选项。这些显示信息对于系统管理非常有价值。netstat 的基本语法如下所示:

netstat [-m] [-n] [-s] [-i | -r] [-f address-family]

本节介绍最常用的 netstat 命令选项。有关所有 netstat 选项的详细说明,请参阅 netstat(1M) 手册页。

Procedure如何按协议显示统计信息

netstat -s 选项显示 UDP、TCP、SCTP、ICMP 和 IP 协议的统计信息。


注 –

可以使用 Oracle Solaris : 用户帐户获取 netstat 命令的输出。


  1. 显示协议状态。


    $ netstat -s
    

示例 8–5 网络协议统计信息

以下示例显示了 netstat -s 命令的输出。某些输出信息已被截断。输出可以指明存在协议问题的区域。例如,ICMPv4 和 ICMPv6 的统计信息可以指明 ICMP 协议发现错误的位置。


RAWIP
        rawipInDatagrams    =  4701     rawipInErrors       =     0
        rawipInCksumErrs    =     0     rawipOutDatagrams   =     4
        rawipOutErrors      =     0

UDP
        udpInDatagrams      = 10091     udpInErrors         =     0
        udpOutDatagrams     = 15772     udpOutErrors        =     0

TCP     tcpRtoAlgorithm     =     4     tcpRtoMin           =   400
        tcpRtoMax           = 60000     tcpMaxConn          =    -1
        .
        .
        tcpListenDrop       =     0     tcpListenDropQ0     =     0
        tcpHalfOpenDrop     =     0     tcpOutSackRetrans   =     0

IPv4    ipForwarding        =     2     ipDefaultTTL        =   255
        ipInReceives        =300182     ipInHdrErrors       =     0
        ipInAddrErrors      =     0     ipInCksumErrs       =     0
        .
        .
        ipsecInFailed       =     0     ipInIPv6            =     0
        ipOutIPv6           =     3     ipOutSwitchIPv6     =     0

IPv6    ipv6Forwarding      =     2     ipv6DefaultHopLimit =   255
        ipv6InReceives      = 13986     ipv6InHdrErrors     =     0
        ipv6InTooBigErrors  =     0     ipv6InNoRoutes      =     0
        .
        .
        rawipInOverflows    =     0     ipv6InIPv4          =     0
 
       ipv6OutIPv4         =     0     ipv6OutSwitchIPv4   =     0

ICMPv4  icmpInMsgs          = 43593     icmpInErrors        =     0
        icmpInCksumErrs     =     0     icmpInUnknowns      =     0
        .
        .
        icmpInOverflows     =     0

ICMPv6  icmp6InMsgs         = 13612     icmp6InErrors       =     0
        icmp6InDestUnreachs =     0     icmp6InAdminProhibs =     0
        .
        .
        icmp6OutGroupQueries=     0     icmp6OutGroupResps  =     2
        icmp6OutGroupReds   =     0

IGMP:
      12287 messages received
          0 messages received with too few bytes
          0 messages received with bad checksum
      12287 membership queries received
SCTP  sctpRtoAlgorithm     =  vanj    
      sctpRtoMin           =  1000 
      sctpRtoMax           = 60000
      sctpRtoInitial       =  3000
      sctpTimHearBeatProbe =     2
      sctpTimHearBeatDrop  =     0
      sctpListenDrop       =     0
      sctpInClosed         =     0 

Procedure如何显示传输协议的状态

可以通过 netstat 命令显示传输协议的状态。有关详细信息,请参阅 netstat(1M) 手册页。

  1. 显示系统上 TCP 和 SCTP 传输协议的状态。


    $ netstat
    
  2. 显示系统上特定传输协议的状态。


    $ netstat -P transport-protocol
    

    transport-protocol 变量的值为 tcpsctpudp


示例 8–6 显示 TCP 和 SCTP 传输协议的状态

此示例显示基本 netstat 命令的输出。请注意,仅显示与 IPv4 有关的信息。


$ netstat

TCP: IPv4
   Local Address     Remote Address    Swind Send-Q  Rwind Recv-Q      State
----------------- -------------------- ----- ------  ----- ------     -------
lhost-1.login      abc.def.local.Sun.COM.980 49640      0     49640    0 ESTABLISHED
lhost-1.login      ghi.jkl.local.Sun.COM.1020 49640     1     49640    0 ESTABLISHED
remhost-1.1014     mno.pqr.remote.Sun.COM.nfsd 49640    0     49640    0 TIME_WAIT
SCTP:                  
Local Address    Remote Address  Swind  Send-Q  Rwind  Recv-Q StrsI/O  State 
---------------- --------------  -----  ------ ------ ------  ------   -------
 *.echo            0.0.0.0            0       0 102400      0   128/1   LISTEN
 *.discard         0.0.0.0            0       0 102400      0   128/1   LISTEN
 *.9001            0.0.0.0            0       0 102400      0   128/1   LISTEN


示例 8–7 显示特定传输协议的状态

此示例显示指定了 netstat-P 选项时的结果。


$ netstat -P tcp
   
TCP: IPv4
   Local Address     Remote Address    Swind Send-Q  Rwind Recv-Q      State
----------------- -------------------- ----- ------  ----- ------     -------
lhost-1.login      abc.def.local.Sun.COM.980 49640      0     49640    0 ESTABLISHED
lhost.login        ghi.jkl.local.Sun.COM.1020 49640     1     49640    0 ESTABLISHED
remhost.1014       mno.pqr.remote.Sun.COM.nfsd 49640    0     49640    0 TIME_WAIT

TCP: IPv6
 Local Address    Remote Address        Swind Send-Q Rwind Recv-Q   State If 
---------------- ---------------------- ------ ----- ------ ----------- -----
localhost.38983   localhost.32777       49152      0 49152      0 ESTABLISHED      
localhost.32777   localhost.38983       49152      0 49152      0 ESTABLISHED      
localhost.38986   localhost.38980       49152      0 49152      0 ESTABLISHED      

Procedure如何显示网络接口状态

netstat 命令的 i 选项显示本地系统上配置的网络接口的状态。可以使用此选项确定系统在每个网络中传输和接收的包数。

  1. 显示网络中接口的状态。


    $ netstat -i
    

示例 8–8 网络接口状态显示

下面的示例显示通过主机接口的 IPv4 和 IPv6 包流的状态。

例如,每次客户机尝试引导时,显示的服务器输入包计数 (Ipkts) 都会增加,而输出包计数 (Opkts) 保持不变。这种情况表示服务器正在查看来自客户机的引导请求包。但是,服务器却不知道对它们做出响应。这种混乱可能是由 hostsipnodesethers 数据库中的错误地址引起的。

但是,如果输入包计数在一段时间内保持不变,则说明计算机根本未查看包。这种情况说明出现了其他类型的故障,如硬件问题。


Name  Mtu  Net/Dest      Address        Ipkts  Ierrs Opkts  Oerrs Collis Queue 
lo0   8232 loopback      localhost      142    0     142    0     0      0     
hme0  1500 host58        host58        1106302 0     52419  0     0      0     

Name  Mtu  Net/Dest      Address                    Ipkts  Ierrs Opkts  Oerrs Collis
lo0   8252 localhost     localhost                   142    0     142    0     0     
hme0  1500 fe80::a00:20ff:feb9:4c54/10 fe80::a00:20ff:feb9:4c54 1106305 0 52422 0  0

Procedure如何显示套接字的状态

使用 netstat 命令的 -a 选项,可以查看本地主机上套接字的状态。

  1. 键入以下内容显示套接字和路由表项的状态:

    使用用户帐户便可运行 netstat 的 -a 选项。


    % netstat -a  
    

示例 8–9 显示所有套接字和路由表项

netstat -a 命令的输出显示详细的统计信息。以下示例显示 netstat -a 典型输出的各部分信息。


UDP: IPv4
   Local Address         Remote Address     State
-------------------- -------------------- -------
      *.bootpc                              Idle
host85.bootpc                               Idle
      *.*                                   Unbound
      *.*                                   Unbound
      *.sunrpc                              Idle
      *.*                                   Unbound
      *.32771                               Idle
      *.sunrpc                              Idle
      *.*                                   Unbound
      *.32775                               Idle
      *.time                                Idle
       .
       .
      *.daytime                             Idle
      *.echo                                Idle
      *.discard                             Idle
      
UDP: IPv6
   Local Address                     Remote Address                   State      If  
--------------------------------- --------------------------------- ---------- -----
      *.*                                                           Unbound   
      *.*                                                           Unbound   
      *.sunrpc                                                      Idle      
      *.*                                                           Unbound   
      *.32771                                                       Idle      
      *.32778                                                       Idle      
      *.syslog                                                      Idle      
      .
      .
TCP: IPv4
   Local Address        Remote Address    Swind Send-Q Rwind Recv-Q  State
-------------------- -------------------- ----- ------ ----- ------ -------
      *.*                  *.*                0      0 49152      0 IDLE
localhost.4999             *.*                0      0 49152      0 LISTEN
      *.sunrpc             *.*                0      0 49152      0 LISTEN
      *.*                  *.*                0      0 49152      0 IDLE
      *.sunrpc             *.*                0      0 49152      0 LISTEN
      .
      .
      *.printer            *.*                0      0 49152      0 LISTEN
      *.time               *.*                0      0 49152      0 LISTEN
      *.daytime            *.*                0      0 49152      0 LISTEN
      *.echo               *.*                0      0 49152      0 LISTEN
      *.discard            *.*                0      0 49152      0 LISTEN
      *.chargen            *.*                0      0 49152      0 LISTEN
      *.shell              *.*                0      0 49152      0 LISTEN
      *.shell              *.*                0      0 49152      0 LISTEN
      *.kshell             *.*                0      0 49152      0 LISTEN
      *.login  
       .
       .
            *.*                0      0 49152      0 LISTEN
   *TCP: IPv6
 Local Address            Remote Address        Swind Send-Q Rwind Recv-Q   State If
----------------------- ----------------------- ----- ------ ----- ------    ----
   *.*                         *.*                0      0 49152      0      IDLE
   *.sunrpc                    *.*                0      0 49152      0      LISTEN
   *.*                         *.*                0      0 49152      0      IDLE
   *.32774                     *.*                0      0 49152

Procedure如何显示特定地址类型的包的传输状态

使用 netstat 命令的 -f 选项可查看与特定地址族的包传输相关的统计信息。

  1. 查看 IPv4 或 IPv6 包传输的统计信息。


    $ netstat -f inet  |  inet6
    

    要查看 IPv4 传输信息,请键入 inet 作为 netstat -f 的参数。使用 inet6 作为 netstat -f 的参数可查看 IPv6 信息。


示例 8–10 IPv4 包传输的状态

以下示例显示了 netstat -f inet 命令的输出。


TCP: IPv4
   Local Address        Remote Address    Swind Send-Q Rwind Recv-Q  State
-------------------- -------------------- ----- ------ ----- ------ -------
host58.734         host19.nfsd       49640      0 49640      0 ESTABLISHED
host58.38063       host19.32782      49640      0 49640      0 CLOSE_WAIT
host58.38146       host41.43601      49640      0 49640      0 ESTABLISHED
host58.996         remote-host.login 49640      0 49206      0 ESTABLISHED


示例 8–11 IPv6 包传输的状态

以下示例显示了 netstat - f inet6 命令的输出。


TCP: IPv6
 Local Address          Remote Address        Swind Send-Q Rwind Recv-Q   State    If
------------------ ------------------------- ----- ------ ----- ------ --------- -----
localhost.38065         localhost.32792       49152   0 49152      0    ESTABLISHED  
localhost.32792         localhost.38065       49152   0 49152      0    ESTABLISHED 
localhost.38089         localhost.38057       49152   0 49152      0    ESTABLISHED 

Procedure如何显示已知路由的状态

netstat 命令的 -r 选项显示本地主机的路由表。该表显示主机知晓的所有路由的状态。使用用户帐户便可运行 netstat 的 -r 选项。

  1. 显示 IP 路由表。


    $ netstat -r
    

示例 8–12 netstat 命令生成的路由表输出

以下示例显示了 netstat -r 命令的输出。


Routing Table: IPv4
  Destination           Gateway           Flags  Ref   Use   Interface
-------------------- -------------------- ----- ----- ------ ---------
host15               myhost               U         1  31059  hme0
10.0.0.14            myhost               U         1      0  hme0
default              distantrouter        UG        1      2  hme0
localhost            localhost            UH        42019361  lo0

Routing Table: IPv6
  Destination/Mask            Gateway                   Flags Ref   Use   If  
--------------------------- --------------------------- ----- --- ------ -----
2002:0a00:3010:2::/64    2002:0a00:3010:2:1b2b:3c4c:5e6e:abcd U  1      0 hme0:1
fe80::/10                fe80::1a2b:3c4d:5e6f:12a2    U       1     23 hme0 
ff00::/8                 fe80::1a2b:3c4d:5e6f:12a2    U       1      0 hme0 
default                  fe80::1a2b:3c4d:5e6f:12a2    UG      1      0 hme0 
localhost                localhost                   UH      9  21832 lo0 

下表解释了 netstat —r 命令的屏幕输出的各种参数。

参数 

说明 

目标

Destination/Mask

指定作为路由目标端点的主机。请注意,IPv6 路由表将 6to4 隧道端点 (2002:0a00:3010:2::/64) 的前缀显示为路由目标端点。

Gateway

指定用于转发包的网关。 

Flags

指示路由的当前状态。U 标志指示路由处于运行状态。G 标志指示路由指向网关。

Use

显示已发送的包数。 

Interface

指示作为传输源端点的本地主机上的特定接口。