系统管理指南:IP 服务

第 8 章 管理 TCP/IP 网络(任务)

本章介绍管理 TCP/IP 网络的任务。本章包含以下主题:

这些任务假设您的站点拥有正常运行的 TCP/IP 网络,该网络仅启用了 IPv4 或启用了双栈 IPv4/IPv6。如果希望在站点实施 IPv6 但尚未实现,请参阅以下各章以获取更多信息:

主要的 TCP/IP 管理任务(任务列表)

下表列出了进行初始配置后的其他网络管理任务,例如显示网络信息。此表中包含对各项任务要完成的工作的说明,以及当前文档中详细介绍用于执行任务的特定步骤的章节。

任务 

说明 

参考 

显示有关接口的配置信息。 

确定系统上每个接口的当前配置。 

如何获取有关特定接口的信息

显示指定的接口地址。 

确定为本地系统上所有接口指定的地址。 

如何显示指定的接口地址

按协议显示统计信息。 

监视特定系统上网络协议的性能。 

如何按协议显示统计信息

显示网络状态。 

通过显示所有套接字和路由表项来监视系统。输出包括 IPv4 的 inet 地址族和 IPv6 的 inet6 地址族。  

如何显示套接字的状态

显示网络接口的状态。 

监视网络接口的性能,这对于解决传输问题非常有用。 

如何显示网络接口状态

显示包传输状态。 

监视包在网络上传送时的状态。 

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

控制与 IPv6 相关的命令的显示输出。 

控制 pingnetstat ifconfigtraceroute 命令的输出。创建名为 inet_type 的文件。在此文件中设置 DEFAULT_IP 变量。

如何控制与 IP 相关的命令的显示输出

监视网络通信。 

使用 snoop 命令显示所有 IP 包。

如何监视 IPv6 网络通信

跟踪网络路由器已知的所有路由。 

使用 traceroute 命令显示所有路由。

如何跟踪所有路由

使用 ifconfig 命令监视接口配置

可以使用 ifconfig 命令为接口手动指定 IP 地址并手动配置接口参数。此外,Oracle Solaris : 启动脚本还运行 ifconfig 来配置伪接口,例如 6to4 隧道端点。

本书介绍多个使用通用 ifconfig 命令的各种选项的任务。有关此命令及其选项和变量的完整说明,请参阅 ifconfig(1M) 手册页。ifconfig 的基本语法如下所示:

ifconfig interface [protocol-family]

Procedure如何获取有关特定接口的信息

使用 ifconfig 命令可确定有关特定系统的接口的基本信息。例如,执行简单的 ifconfig 查询便可获取以下信息:

以下过程说明了如何使用 ifconfig 命令来获取有关系统接口的基本配置信息。

  1. 在本地主机上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 获取有关特定接口的信息。


    # ifconfig interface
    

    ifconfig 命令的输出格式如下:

    • 状态行

      ifconfig 命令输出中的第一行包括接口名称以及当前与接口关联的状态标志。此外,状态行还包括为特定接口配置的最大传输单元 (maximum transmission unit, MTU) 以及索引号。使用状态行可确定接口的当前状态。

    • IP 地址信息行

      ifconfig 输出的第二行包括为接口配置的 IPv4 地址或 IPv6 地址。对于 IPv4 地址,还显示已配置的网络掩码和广播地址。

    • MAC 地址行

      以超级用户或类似角色的身份运行 ifconfig 命令时,ifconfig 输出包含第三行。对于 IPv4 地址,第三行显示了为接口指定的 MAC 地址(以太网层地址)。对于 IPv6 地址,输出中的第三行显示了 IPv6 in.ndpd 守护进程根据 MAC 地址生成的链路本地地址。


示例 8–1 使用 ifconfig 命令生成的基本接口信息

以下示例说明了如何使用 ifconfig 命令来获取有关特定主机上的 eri 接口的信息。


# ifconfig eri
eri0: flags=863<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 1
      inet 10.0.0.112 netmask ffffff80 broadcast 10.8.48.127
      ether 8:0:20:b9:4c:54 
	

下表描述 ifconfig 查询中的变量信息,同时说明如何在屏幕上显示变量以及提供的信息类型。使用上述输出作为示例。

变量 

屏幕输出 

说明 

接口名称 

eri0

指示已在 ifconfig 命令中请求其状态的接口的设备名称。

接口状态 

flags=863<UP

显示接口的状态,包括当前与接口关联的所有标志。可以据此确定接口当前已初始化 (UP) 还是未初始化 (DOWN)。

广播状态 

BROADCAST

指示接口支持 IPv4 广播。 

传输状态 

RUNNING

指示系统正在通过接口传输包。 

多点传送状态 

MULTICAST, IPv4

显示接口支持多点传送传输。示例中的接口支持 IPv4 多点传送传输。 

最大传输单元 

mtu 1500

显示此接口的最大传输大小为 1500 个八位字节。 

IP 地址 

inet 10.0.0.112

显示为接口指定的 IPv4 或 IPv6 地址。示例接口 eri0 的 IPv4 地址为 10.0.0.112

网络掩码 

netmask ffffff80

显示特定接口的 IPv4 网络掩码。请注意,IPv6 地址不使用网络掩码。 

MAC 地址 

ether 8:0:20:b9:4c:54

显示接口的以太网层地址。 


Procedure如何显示指定的接口地址

路由器和多宿主主机具有多个接口,并且通常为每个接口指定多个 IP 地址。可以使用 ifconfig 命令来显示为系统接口指定的所有地址,还可以使用 ifconfig 命令仅显示指定的 IPv4 或 IPv6 地址。要另外显示接口的 MAC 地址,您必须首先以超级用户或相应角色的身份登录。

有关 ifconfig 命令的更多信息,请参见 ifconfig(1M) 手册页。

  1. 在本地系统上,承担网络管理角色或成为超级用户。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 获取有关所有接口的信息。

    您可以使用 ifconfig -a 命令的变体执行以下操作:

    • 查看系统上所有接口的所有地址。


      # ifconfig -a
      
    • 查看为系统接口指定的所有 IPv4 地址。


      # ifconfig -a4
      
    • 如果本地系统启用了 IPv6,则显示为系统接口指定的所有 IPv6 地址。


      ifconfig -a6
      

示例 8–2 显示所有接口的地址信息

此示例显示只具有一个主网络接口 (qfe0) 的主机的地址项。但是,ifconfig 输出显示当前为 qfe0 指定的三种形式的地址: 回送 (lo0)、IPv4 (inet) 和 IPv6 (inet6)。请注意,在输出的 IPv6 部分中,接口 qfe0 的行显示本地链路 IPv6 地址。qfe0 的第二个地址显示在 qfe0:1 行中。


% ifconfig -a
lo0: flags=1000849 <UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000 
qfe0: flags=1004843 <UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 
        inet 10.0.0.112 netmask ffffff80 broadcast 10.0.0.127
        ether 8:0:20:b9:4c:54 
lo0: flags=2000849 <UP,RUNNING,MULTICAST,IPv6> mtu 8252 index 1
        inet6 ::1/128 
qfe0: flags=2000841 <UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2
        ether 8:0:20:b9:4c:54 
        inet6 fe80::a00:20ff:feb9:4c54/10 
qfe0:1: flags=2080841 <UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
        inet6 2001:db8:3c4d:48:a00:20ff:feb9:4c54/64 


示例 8–3 显示所有 IPv4 接口的地址信息

此示例显示了为多宿主主机配置的 IPv4 地址。不需要以超级用户的身份登录便可运行此形式的 ifconfig 命令。


% ifconfig -a4
lo0: flags=1000849 <UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
qfe0: flags=1004843 <UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 10.0.0.112 netmask ffffff80 broadcast 10.0.0.127
        ether 8:0:20:b9:4c:54 
qfe1: flags=1004843 <UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 10.0.0.118 netmask ffffff80 broadcast 10.0.0.127
        ether 8:0:20:6f:5e:17


示例 8–4 显示所有 IPv6 接口的地址信息

此示例仅显示了为特定主机配置的 IPv6 地址。不需要以超级用户的身份登录,便可运行此形式的 ifconfig 命令。


% ifconfig -a6
lo0: flags=2000849 <UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1
        inet6 ::1/128 
qfe0: flags=2000841 <UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2
        ether 8:0:20:b9:4c:54 
        inet6 fe80::a00:20ff:feb9:4c54/10
qfe0:1: flags=2080841 <UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
        inet6 2001:db8:3c4d:48:a00:20ff:feb9:4c54/64 

ifconfig 输出显示了为主机的单个接口指定的以下三种形式的 IPv6 地址:

lo0

IPv6 回送地址。

inet6 fe80::a00:20ff:feb9:4c54/10

为主网络接口指定的链路本地地址。

inet6 2001:db8:3c4d:48:a00:20ff:feb9:4c54/64

IPv6 地址,包括子网前缀。输出中的 ADDRCONF 一词指示此地址是由主机自动配置的。


使用 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

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


使用 ping 命令探测远程主机

可以使用 ping 命令确定远程主机的状态。运行 ping 时,ICMP 协议会将数据报发送到指定的主机,并请求响应。ICMP 是负责 TCP/IP 网络中错误处理的协议。使用 ping,可查明是否存在与指定的远程主机的 IP 连接。

以下是 ping 的基本语法:

/usr/sbin/ping host [timeout]

在此语法中,host 是远程主机的名称。timeout 参数(可选)指示 ping 命令继续尝试到达远程主机所用的时间(以秒为单位)。缺省值为 20 秒。有关其他语法和选项,请参阅 ping(1M) 手册页。

Procedure如何确定远程主机是否正在运行

  1. 键入以下形式的 ping 命令:


    $ ping hostname
    

    如果主机 hostname 正在接受 ICMP 传输,则会显示以下消息:


    hostname is alive

    此消息指示 hostname 对 ICMP 请求做出了响应。但是,如果 hostname 出现故障或者无法接收 ICMP 包,则会从 ping 命令接收到以下响应:


    no answer from hostname
    

Procedure如何确定主机是否正在丢弃包

使用 -ping 命令的 s 选项可确定远程主机是否虽在运行但丢失了包。

  1. 键入以下形式的 ping 命令:


    $ ping -s hostname
    

示例 8–13 用于检测包丢弃的 ping 输出

ping -s hostname 命令连续不断地将包发送到指定的主机,直到您发送中断字符或出现超时为止。屏幕上显示的响应信息与以下内容类似:


& ping -s host1.domain8
PING host1.domain8 : 56 data bytes
64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=0. time=1.67 ms
64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=1. time=1.02 ms
64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=2. time=0.986 ms
64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=3. time=0.921 ms
64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=4. time=1.16 ms
64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=5. time=1.00 ms
64 bytes from host1.domain8.COM (172.16.83.64): icmp_seq=5. time=1.980 ms

^C

----host1.domain8  PING Statistics----
7 packets transmitted, 7 packets received, 0% packet loss
round-trip (ms)  min/avg/max/stddev = 0.921/1.11/1.67/0.26

包丢失统计信息指示主机是否已丢弃包。如果 ping 失败,请检查由 ifconfignetstat 命令报告的网络状态。请参阅使用 ifconfig 命令监视接口配置使用 netstat 命令监视网络状态


管理和记录网络状态显示

以下任务说明如何使用已知的网络命令来检查网络状态。

Procedure如何控制与 IP 相关的命令的显示输出

可以将 netstatifconfig 命令的输出控制为仅显示 IPv4 信息或同时显示 IPv4 和 IPv6 信息。

  1. 创建 /etc/default/inet_type 文件。

  2. 根据您的网络需要,将以下某一项添加到 /etc/default/inet_type

    • 仅显示 IPv4 信息:


      DEFAULT_IP=IP_VERSION4
    • 同时显示 IPv4 和 IPv6 信息:


      DEFAULT_IP=BOTH


      DEFAULT_IP=IP_VERSION6

      有关 inet_type 文件的更多信息,请参见 inet_type(4) 手册页。


    注 –

    ifconfig 命令中的 -4-6 标志将覆盖 inet_type 文件中设置的值。netstat 命令中的 -f 标志也将覆盖 inet_type 文件中设置的值。



示例 8–14 将输出控制为有选择地显示 IPv4 和 IPv6 信息


Procedure如何记录 IPv4 路由选择守护进程的操作

如果怀疑 routed(IPv4 路由选择守护进程)不能正常运行,则可以启动跟踪此守护进程活动的日志。此日志包括启动 routed 守护进程时的所有包传送。

  1. 在本地主机上,承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 创建路由选择守护进程操作的日志文件:


    # /usr/sbin/in.routed /var/log-file-name
    

    注意 – 注意 –

    在繁忙的网络中,此命令生成的输出几乎是连续的。



示例 8–15 in.routed 守护进程的网络日志

以下示例显示由如何记录 IPv4 路由选择守护进程的操作过程创建的日志的开始部分。


-- 2003/11/18 16:47:00.000000 --
Tracing actions started
RCVBUF=61440
Add interface lo0  #1   127.0.0.1      -->127.0.0.1/32   
   <UP|LOOPBACK|RUNNING|MULTICAST|IPv4> <PASSIVE> 
Add interface hme0 #2   10.10.48.112    -->10.10.48.0/25   
    <UP|BROADCAST|RUNNING|MULTICAST|IPv4> 
turn on RIP
Add    10.0.0.0        -->10.10.48.112      metric=0  hme0  <NET_SYN>
Add    10.10.48.85/25  -->10.10.48.112      metric=0  hme0  <IF|NOPROP>

Procedure如何跟踪 IPv6 相邻节点搜索守护进程的活动

如果您怀疑 IPv6 in.ndpd 守护进程不能正常运行,则可以启动跟踪此守护进程的活动的日志。此跟踪显示在标准输出中,直到终止。此跟踪包括启动 in.ndpd 守护进程时的所有包传送。

  1. 在本地 IPv6 节点上承担主管理员角色或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 启动对 in.ndpd 守护进程的跟踪。


    # /usr/lib/inet/in.ndpd -t
    
  3. 根据需要按 Ctrl-C 组合键终止跟踪。


示例 8–16 对 in.ndpd 守护进程的跟踪

以下输出显示了对 in.ndpd 的跟踪的开始部分。


# /usr/lib/inet/in.ndpd -t
Nov 18 17:27:28 Sending solicitation to  ff02::2 (16 bytes) on hme0
Nov 18 17:27:28         Source LLA: len 6 <08:00:20:b9:4c:54>
Nov 18 17:27:28 Received valid advert from fe80::a00:20ff:fee9:2d27 (88 bytes) on hme0
Nov 18 17:27:28         Max hop limit: 0
Nov 18 17:27:28         Managed address configuration: Not set
Nov 18 17:27:28         Other configuration flag: Not set
Nov 18 17:27:28         Router lifetime: 1800
Nov 18 17:27:28         Reachable timer: 0
Nov 18 17:27:28         Reachable retrans timer: 0
Nov 18 17:27:28         Source LLA: len 6 <08:00:20:e9:2d:27>
Nov 18 17:27:28         Prefix: 2001:08db:3c4d:1::/64
Nov 18 17:27:28                 On link flag:Set
Nov 18 17:27:28                 Auto addrconf flag:Set
Nov 18 17:27:28                 Valid time: 2592000
Nov 18 17:27:28                 Preferred time: 604800
Nov 18 17:27:28         Prefix: 2002:0a00:3010:2::/64
Nov 18 17:27:28                 On link flag:Set
Nov 18 17:27:28                 Auto addrconf flag:Set
Nov 18 17:27:28                 Valid time: 2592000
Nov 18 17:27:28                 Preferred time: 604800

使用 traceroute 命令显示路由信息

traceroute 命令将跟踪发往远程系统的 IP 包所经过的路由。有关 traceroute 的详细技术信息,请参见 traceroute(1M) 手册页。

可以使用 traceroute 命令查找所有的路由配置错误以及路由路径错误。如果无法到达特定的主机,则可以使用 traceroute 来查看发往远程主机的包所经由的路径以及可能出现故障的位置。

traceroute 命令还显示在通向目标主机的路径上每个网关的往返时间。此信息对于分析两个主机之间何处出现通信缓慢非常有用。

Procedure如何查找通向远程主机的路由

  1. 键入以下命令查找通向远程系统的路由:


    % traceroute destination-hostname
    

    使用用户帐户便可运行此 traceroute 命令形式。


示例 8–17 使用 traceroute 命令显示通向远程主机的路由

以下 traceroute 命令输出显示了包从本地系统 nearhost 到达远程系统 farhost 所经由的具有七个跃点的路径。此输出还显示包遍历每个跃点所用的时间。


istanbul% traceroute farhost.faraway.com
	traceroute to farhost.faraway.com (172.16.64.39), 30 hops max, 40 byte packets
	 1  frbldg7c-86 (172.16.86.1)  1.516 ms  1.283 ms  1.362 ms
	 2  bldg1a-001 (172.16.1.211)  2.277 ms  1.773 ms  2.186 ms
	 3  bldg4-bldg1 (172.16.4.42)  1.978 ms  1.986 ms  13.996 ms
	 4  bldg6-bldg4 (172.16.4.49)  2.655 ms  3.042 ms  2.344 ms
	 5  ferbldg11a-001 (172.16.1.236)  2.636 ms  3.432 ms  3.830 ms
	 6  frbldg12b-153 (172.16.153.72)  3.452 ms  3.146 ms  2.962 ms
	 7  sanfrancisco (172.16.64.39)  3.430 ms  3.312 ms  3.451 ms

Procedure如何跟踪所有路由

此过程使用 traceroute 命令的 -a 选项来跟踪所有路由。

  1. 在本地系统上键入以下命令:


    % traceroute -ahost-name
    

    使用用户帐户便可运行此 traceroute 命令形式。


示例 8–18 跟踪所有通向双栈主机的路由

此示例显示通向双栈主机的所有可能路由。


% traceroute -a v6host.remote.com
traceroute: Warning: Multiple interfaces found; using 2::56:a0:a8 @ eri0:2
traceroute to v6host (2001:db8:4a3b::102:a00:fe79:19b0),30 hops max, 60 byte packets
 1  v6-rout86 (2001:db8:4a3b:56:a00:fe1f:59a1)  35.534 ms  56.998 ms * 
 2  2001:db8::255:0:c0a8:717  32.659 ms  39.444 ms *
 3  farhost.faraway.COM (2001:db8:4a3b::103:a00:fe9a:ce7b)  401.518 ms  7.143 ms *
 4  distant.remote.com (2001:db8:4a3b::100:a00:fe7c:cf35)  113.034 ms  7.949 ms *
 5  v6host (2001:db8:4a3b::102:a00:fe79:19b0)  66.111 ms *  36.965 ms

traceroute to v6host.remote.com  (192.168.10.75),30 hops max,40 byte packets
 1  v6-rout86 (172.16.86.1)  4.360 ms  3.452 ms  3.479 ms
 2  flrmpj17u.here.COM (172.16.17.131)  4.062 ms  3.848 ms  3.505 ms
 3  farhost.farway.com (10.0.0.23)  4.773 ms *  4.294 ms
 4  distant.remote.com (192.168.10.104)  5.128 ms  5.362 ms *
 5  v6host  (192.168.15.85)  7.298 ms  5.444 ms *
 

使用 snoop 命令监视包传送

可以使用 snoop 命令监视数据传送的状态。snoop 捕获网络包并以指定的格式显示其内容。系统收到包或将其保存到文件之后,便会立即显示这些包。当 snoop 向中间文件执行写入操作时,在密切跟踪的情况下不可能丢失包。然后,可以使用 snoop 本身来解释此文件。

要以混杂模式捕获进出缺省接口的包,您必须承担网络管理员角色或成为超级用户。在汇总表单中,snoop 仅显示与最高级协议有关的数据。例如,NFS 包仅显示 NFS 信息,而不会显示底层 RPC、UDP、IP 和以太网帧信息,但是如果选择了两个详细选项之一,则会显示这些信息。

坚持不懈地使用 snoop 可以使您熟悉常规系统行为。有关对包进行分析的帮助,请查找最新的白皮书和 RFC,并搜寻专家针对特定领域(如 NFS 或 NIS)提供的建议。有关使用 snoop 及其选项的详细信息,请参阅 snoop(1M) 手册页。

Procedure如何检查来自所有接口的包

  1. 在本地主机上,承担网络管理角色或成为超级用户。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 列显有关连接到系统的接口的信息。


    # ifconfig -a
    

    snoop 命令通常使用第一个非回送设备,通常为主网络接口。

  3. 键入不带参数的 snoop 开始捕获包,如示例 8–19 所示。

  4. 使用 Ctrl-C 组合键停止此进程。


示例 8–19 snoop 命令的输出

基本 snoop 命令针对双栈主机返回如下所示的输出。


% snoop
Using device /dev/hme (promiscuous mode)
farhost.remote.com -> myhost       RLOGIN C port=993 
    myhost -> farhost.remote.com   RLOGIN R port=993 Using device /dev/hme
router5.local.com -> router5.local.com ARP R 10.0.0.13, router5.local.com is
    0:10:7b:31:37:80
router5.local.com -> BROADCAST     TFTP Read "network-confg" (octet)
farhost.remote.com -> myhost       RLOGIN C port=993 
    myhost ->   nisserve2          NIS C MATCH 10.0.0.64 in ipnodes.byaddr
nisserve2 ->    myhost             NIS R MATCH No such key
    blue-112 -> slave-253-2        NIS C MATCH 10.0.0.112 in ipnodes.byaddr
myhost -> DNSserver.local.com      DNS C 192.168.10.10.in-addr.arpa. Internet PTR ?
DNSserver.local.com  myhost        DNS R 192.168.10.10.in-addr.arpa. Internet PTR 
   niserve2.
.
.
farhost.remote.com-> myhost        RLOGIN C port=993 
    myhost -> farhost.remote.com   RLOGIN R port=993 fe80::a00:20ff:febb:
.
fe80::a00:20ff:febb:e09 -> ff02::9 RIPng R (5 destinations)

在此输出中捕获的包显示了远程登录部分,包括查找 NIS 和 DNS 服务器以便进行地址解析。同时还包括来自本地路由器的定期 ARP 包以及向 in.ripngd 发出的 IPv6 链路本地地址的通告。


Procedure如何将 snoop 输出捕获到文件

  1. 在本地主机上,承担网络管理角色或成为超级用户。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. snoop 会话捕获到文件。


    # snoop -o filename
    

    例如:


    # snoop -o /tmp/cap
    Using device /dev/eri (promiscuous mode)
    30 snoop: 30 packets captured

    此示例中,在名为 /tmp/cap 的文件中捕获到了 30 个包。可以将此文件放在任何具有足够磁盘空间的目录中。捕获的包数显示在命令行中,您可以随时按 Ctrl-C 组合键中止捕获。

    snoop 将在主机上生成大量网络负载,这会使结果失真。要查看实际结果,请从第三方系统运行 snoop

  3. 检查 snoop 输出捕获文件。


    # snoop -i filename
    

示例 8–20 snoop 输出捕获文件的内容

以下内容显示了可能会作为 snoop -i 命令输出接收到的各种捕获。


# snoop -i /tmp/cap
1   0.00000 fe80::a00:20ff:fee9:2d27 -> fe80::a00:20ff:fecd:4375 
    ICMPv6 Neighbor advertisement
2   0.16198 farhost.com   -> myhost     RLOGIN C port=985 
3   0.00008 myhost -> farhost.com       RLOGIN R port=985 
10  0.91493    10.0.0.40 -> (broadcast)  ARP C Who is 10.0.0.40, 10.0.0.40 ?
34  0.43690 nearserver.here.com  -> 224.0.1.1  IP  D=224.0.1.1 S=10.0.0.40 LEN=28, 
      ID=47453, TO =0x0, TTL=1
35  0.00034  10.0.0.40 -> 224.0.1.1    IP  D=224.0.1.1 S=10.0.0.40 LEN=28, ID=57376, 
     TOS=0x0, TTL=47  

Procedure如何检查 IPv4 服务器和客户机之间的包

  1. 在远离与客户机或服务器相连的集线器的位置建立 snoop 系统。

    第三方系统(snoop 系统)将检查所有干预通信,因此 snoop 跟踪会反映网络上实际出现的情况。

  2. snoop 系统上,承担网络管理角色或成为超级用户。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  3. 键入带有选项的 snoop 并将输出保存到文件。

  4. 检查并解释输出。

    有关 snoop 捕获文件的详细信息,请参阅 RFC 1761, Snoop Version 2 Packet Capture File Format

Procedure如何监视 IPv6 网络通信

您可以使用 snoop 命令来仅显示 IPv6 包。

  1. 在本地节点上,承担网络管理角色或成为超级用户。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 捕获 IPv6 包。


    # snoop ip6
    

    有关 snoop 命令的更多信息,请参见 snoop(1M) 手册页。


示例 8–21 仅显示 IPv6 网络通信

以下示例显示了在节点上运行 snoop ip6 命令时可能显示的典型输出。


# snoop ip6
fe80::a00:20ff:fecd:4374 -> ff02::1:ffe9:2d27 ICMPv6 Neighbor solicitation
fe80::a00:20ff:fee9:2d27 -> fe80::a00:20ff:fecd:4375 ICMPv6 Neighbor 
      solicitation
fe80::a00:20ff:fee9:2d27 -> fe80::a00:20ff:fecd:4375 ICMPv6 Neighbor 
      solicitation
fe80::a00:20ff:febb:e09 -> ff02::9      RIPng R (11 destinations)
fe80::a00:20ff:fee9:2d27 -> ff02::1:ffcd:4375 ICMPv6 Neighbor solicitation

管理缺省地址选择

Oracle Solaris : 可以让单个接口拥有多个 IP 地址。例如,使用网络多路径 (network multipathing, IPMP) 之类的技术,可以将多个网络接口卡 (network interface card, NIC) 连接到同一 IP 链路层。此链路可以具有一个或多个 IP 地址。此外,启用了 IPv6 的系统上的接口具有一个链路本地 IPv6 地址,至少具有一个 IPv6 路由地址,并且至少一个接口具有 IPv4 地址。

当系统启动事务时,应用程序便会对 getaddrinfo 套接字发出调用。getaddrinfo 将搜索可能在目标系统上使用的地址。然后,内核将设置此列表的优先级,以便找到包的最佳目标。此过程称为目标地址排序。然后,如果确定了包的最佳目标地址,Oracle Solaris : 内核将选择相应的源地址格式。此过程称为地址选择。有关目标地址排序的更多信息,请参见 getaddrinfo(3SOCKET) 手册页。

仅启用了 IPv4 的系统和启用了双栈 IPv4/IPv6 的系统必须执行缺省地址选择。大多数情况下,不需要更改缺省地址选择机制。但是,您可能需要更改地址格式的优先级,以便支持 IPMP 或首选使用 6to4 地址格式等。

Procedure如何管理 IPv6 地址选择策略表

以下过程介绍如何修改地址选择策略表。有关 IPv6 缺省地址选择的概念性信息,请参阅ipaddrsel 命令


注意 – 注意 –

如果不是出于下一个任务中提到的某些原因,请不要更改 IPv6 地址选择策略表。策略表构造不正确可能会导致网络出现问题。请确保保存了策略表的副本(如下一过程所示)。


  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 查看当前的 IPv6 地址选择策略表。


    # ipaddrsel
    # Prefix                  Precedence Label
    ::1/128                           50 Loopback
    ::/0                              40 Default
    2002::/16                         30 6to4
    ::/96                             20 IPv4_Compatible
    ::ffff:0.0.0.0/96                 10 IPv4
  3. 备份缺省地址策略表的副本。


    # cp /etc/inet/ipaddrsel.conf /etc/inet/ipaddrsel.conf.orig
    
  4. 使用文本编辑器在 /etc/inet/ipaddrsel.conf 中添加自定义信息。

    针对 /etc/inet/ipaddrsel 中的各项使用以下语法:


    prefix/prefix-length precedence label [# comment ] 
    

    下面是一些常见的对策略表的修改:

    • 为 6to4 地址指定最高优先级。


      2002::/16                         50 6to4
      ::1/128                           45 Loopback

      6to4 地址格式现在具有最高优先级 50,而先前优先级为 50 的回送现在的优先级变为 45。其他地址格式保持不变。

    • 指定与特定目标地址进行通信的特定源地址。


      ::1/128                           50 Loopback
      2001:1111:1111::1/128             40 ClientNet
      2001:2222:2222::/48               40 ClientNet
      ::/0                              40 Default

      对于仅有一个物理接口的主机,此特定项非常有用。此处,2001:1111:1111::1/128 是发往网络 2001:2222:2222::/48 中目标的所有包的首选源地址。优先级 40 使得源地址 2001:1111:1111::1/128 的优先级高于为接口配置的其他地址格式。

    • IPv4 地址优先于 IPv6 地址。


      ::ffff:0.0.0.0/96                 60 IPv4
      ::1/128                           50 Loopback
      .
      .

      IPv4 格式 ::ffff:0.0.0.0/96 的优先级已从缺省的 10 更改为 60,这是表中的最高优先级。

  5. 将已修改的策略表加载到内核。


    ipaddrsel -f /etc/inet/ipaddrsel.conf
    
  6. 如果已修改的策略表存在问题,请恢复缺省 IPv6 地址选择策略表。


    # ipaddrsel -d
    

Procedure如何仅修改当前会话的 IPv6 地址选择表

编辑 /etc/inet/ipaddrsel.conf 文件时,所做的任何修改即使在重新引导系统之后也都会保留下来。如果希望已修改的策略表仅存在于当前会话中,请执行以下过程。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. /etc/inet/ipaddrsel 的内容复制到 filename,其中 filename 是您选择的文件名称。


    # cp /etc/inet/ipaddrsel filename
    
  3. 根据需要在 filename 中编辑策略表。

  4. 将已修改的策略表加载到内核。


    # ipaddrsel -f filename
    

    内核将使用新的策略表,直到重新引导系统。