2.1  Unix TCP/IP 配置

       Unix 是最早的 TCP/IP 载体,以致一段时间人们认为 TCP/IP 和 Unix 是一回事。现在,几乎所有的 Unix 系统都内置有 TCP/IP 协议栈。

 

1)    配置网络接口:
ifconfig interface address netmask address broadcast address [up | down]
 
2)    标准网络配置文件:
/etc/hosts :机器名字和 IP 地址对应表
IP 地址      正式名 别名
166.111.4.11 train www
 
/etc/protocols :定义协议名称与端口
协议名       端口号 协议别名
ip             0      IP
icmp        1      ICMP
tcp           6      TCP
 
/etc/services :网络服务文件,定义服务的端口号和协议。
服务名       端口号 / 协议 进程名
ftp           21/tcp
smtp        25/tcp      mail
name        42/udp     nameserver
 
/etc/inetd.conf :超级服务器配置文件,超级服务器 inetd 在倾听端口的请求时,如果接收到一个请求,它就根据 inetd.conf 中的信息去启动 daemon 。
service-name socket-type proto wait-status user server-pathname
ftp   stream     tcp    nowait      root         /usr/etc/in.ftpd        in.ftpd -1
pop3 stream     tcp    nowait      root         /usr/sbin/popper      popper -s
 
/etc/networks :网络名文件
网络名       网络地址
loopback  127
pxb.cic.tsinghua.edu.cn  166.111.6
 
/etc/netmasks :网络(子网)掩码文件
网络地址(现在必须是真正的 A 、 B 、 C 类地址)      掩码
166.111.0.0      255.255.252.0
 
3)   SUN Solaris 网络配置实例
²         /etc/hostname.le0
train
²         /etc/hosts
127.0.0.1        train         localhost loghost
166.111.4.11     train
²         /etc/netmasks
166.111.0.0      255.255.252.0
²         /etc/defaultrouter
166.111.4.1
²         /etc/resolv.conf
domain           pxb.cic.tsinghua.edu.cn
nameserver       127.0.0.1
nameserver       166.111.4.5
nameserver       166.111.8.11
²         /etc/nsswitch.conf
…
hosts:       files dns

诊断工具

1)  ping

       ping(Packet InterNet Groper) 的意思是网际包探测器。它是一个 TCP/IP 应用程序,其作用是检测网络中的其它机器是否可到达。 ping 程序的原理很简单,它向指定机器发送一个 ICMP ( Internet Control Message Protocol ) ECHO-REQUEST 的请求包,以期获得一个从对方返回的 ICMP ECHO-RESPONSE 包。但是, Ping 却是应用最为广泛的 Internet 程序之一,用户在测试、管理网络时,或者检测网络或远程主机时,最先使用的工具可能就是 Ping 。

       Ping 的使用也很简单,指定主机名执行它,如果远程主机相应,则说明远程主机在网络上可达到,否则,说明两者间网络有故障。

       当我们配置好一台计算机的网络后,第一条命令可能就是:

$ ping localhost
        localhost is alive
这表示网络功能配置好了,但这并不意味着网络就能正常工作了,因为 localhost 实际对应的是内部回送地址,它并不对应实际的硬件设备,因此当向 localhost 发送请求时,核心并不把报文发送到网络,而是直接处理。如果网络没有配置好,将有信息:
        $ ping localhost
        no answer from localhost
接下来 ping 自己的主机名,如 ulrra1 ,如果正确,显示:
        $ ping ulrra1
        ulrra1 is alive
如果不可到达,则需检查接口配置,可用 ifconfig 检查。如果正常,再 ping 其它机器,如 ncr3550 :下面是 Ping 程序的执行时的显示结果:
/u/jdx>ping ncr3550
PING ncr3550.cic.tsinghua.edu.cn (166.111.4.3): 56 data bytes
64 bytes from 166.111.4.3: icmp_seq=0 ttl=255 time=2 ms
64 bytes from 166.111.4.3: icmp_seq=1 ttl=255 time=2 ms
64 bytes from 166.111.4.3: icmp_seq=2 ttl=255 time=2 ms
64 bytes from 166.111.4.3: icmp_seq=3 ttl=255 time=3 ms
^C
--- ncr3550.cic.tsinghua.edu.cn ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 2/2/3 ms
        Ping 程序可能提供一些选项,如指定连续包发送间隔时间,另外,它也可能接受指定的包长与数量,如命令:
/u/jdx>ping -i2 ncr3550 120 3
将以每隔 2 秒发送一个数据长度为 120 字节的包 3 个,其显示结果如下:
PING ncr3550.cic.tsinghua.edu.cn (166.111.4.3): 120 data bytes
128 bytes from 166.111.4.3: icmp_seq=0 ttl=255 time=3 ms
128 bytes from 166.111.4.3: icmp_seq=1 ttl=255 time=2 ms
128 bytes from 166.111.4.3: icmp_seq=2 ttl=255 time=3 ms
 
--- ncr3550.cic.tsinghua.edu.cn ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 2/2/3 ms
 
2)   arp
        arp 是 TCP/IP 实用程序,它用来获取指定计算机的 MAC 地址,如:
        $ arp rs6000
rs6000 (166.111.4.5) at 8:0:5a:c7:bd:3d
         另外,使用 -a 选项可查看本计算机缓冲的所用 IP-MAC 地址对捆扎。如:
        $ arp -a
Net to Media Table
Device    IP Address                Mask       Flags    Phys Addr
------ -------------------- --------------- ----- ---------------
le0     rs6000                255.255.255.255        08:00:5a:c7:bd:3d
le0     router.cic.tsinghua.edu.cn 255.255.255.255        08:00:02:0a:94:27
le0     sys2.cic.tsinghua.edu.cn 255.255.255.255        00:aa:00:b8:ed:3c
le0     ibmpc16.cic.tsinghua.edu.cn 255.255.255.255        00:aa:00:b8:49:59
le0     ibmpc14.cic.tsinghua.edu.cn 255.255.255.255        10:00:5a:ba:41:4f
le0     astpc129.cic.tsinghua.edu.cn 255.255.255.255        00:a0:24:19:ae:a9
         使用 -d 选项可删除本计算机缓冲的所用 IP-MAC 地址对捆扎
        $ arp -d hostname
         使用 -s 选项可设置本计算机缓冲的所用 IP-MAC 地址对捆扎
        $ arp -s ether hostname ether_addr [temp] [pub]
3)   ifconfig
        ifconfig 是 TCP/IP 实用程序,它用来配置网络接口,为接口分配一个 IP 地址,或者定义网络子网掩码和广播地址,并可关闭或打开网络接口。请常见用法为:
ifconfig interface address netmask address broadcast address [up | down]
如:
        ifconfig le0 166.111.4.11 netmask 255.255.252.0 broadcast 166.111.7.255 up
如果要查看某个接口的当前配置,可用 ifconfig 后跟参数接口名称,如:
        $ ifconfig le0
le0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500
         inet 166.111.4.11 netmask fffffc00 broadcast 166.111.7.255
4)   netstat
        netstat 是一个用来显示工作站网络接口统计量的实用程序。它显示的信息与命令选项有关,下面介绍几个常用选项。
         要得到计算机每个网络接口的一行摘要信息,可以使用 -i 选项,格式如下:
        $ netstat -i
Name   Mtu   Net/Dest     Address        Ipkts   Ierrs Opkts   Oerrs Collis Queue
lo0    8232 loopback     localhost       82      0      82      0      0       0
le0    1500 tunet.tsinghua.edu.cn ulrra1          7497    0      371     1      0
如果 Queue 不为零,则不能发送报文,这是网络线路有问题的症状。 Ierrs 和 Oerrs 不必一定为零,但必须很低,大于 100 ,就表示有问题,比如网络太拥挤。
         要获得本计算机的路由信息,可以使用 -rn 选项,如下所示:
        $ netstat -rn
Routing Table:
   Destination            Gateway            Flags   Ref    Use    Interface
-------------------- -------------------- ----- ----- ------ ---------
127.0.0.1             127.0.0.1              UH        0       4   lo0
166.111.4.0           166.111.4.11           U         3      10   le0
224.0.0.0             166.111.4.11           U         3       0   le0
default               166.111.4.1            UG        0      12
         要获得详细的有关计算机网络通信的信息,可以使用 -s 选项:
        $ netstat -s
UDP
         udpInDatagrams       =     12      udpInErrors          =      0
         udpOutDatagrams      =     20
 
TCP      tcpRtoAlgorithm      =      4      tcpRtoMin            =    200
IP       ipForwarding         =      2      ipDefaultTTL         =    255
         ipInReceives         =    113      ipInHdrErrors        =      0
         ipInAddrErrors       =      0      ipInCksumErrs        =      0
ICMP     icmpInMsgs           =      4      icmpInErrors         =      0
         icmpInCksumErrs      =      0      icmpInUnknowns       =      0
5)   route
usage: route [-n] [-f] [ cmd [ net | host ] args ]
 
        route cmd dst-addr gateway hop
         分配静态路由
route add 166.111.4.0 166.111.4.11 1
配置默认路由
route add default 166.111.4.1 1

6)  nslookup

       nslookup 是一个从域名服务器中查询域名信息的 Internet 工具,许多 TCP/IP 软件包中都包含该程序。最通常的一个用法是由机器的 IP 地址获取其主机名,或者相反。如果用户所在的系统不能解析 Internet 上某些机器的名字,使用 nslookup 将有助于查找错误。

nslookup 的语法为:
nslookup   [ -Option ... ]   [ Host ]   [ -NameServer ]

其中, Option 表示查询选项,用来设置查询信息的类型、查询方式、缺省域名、超时间隔等; Host 表示待查主机的 IP 地址或主机名; NameServer 表示要从哪个域名服务器上进行查找。 Host 和 NameServer 称为 nslookup 命令的参数。

       使用 nslookup 有两种方式:交互方式和非交互方式。当 nslookup 后没有参数,或者第一个参数为一个“ - ”,第二个参数为域名服务器的主机名或 IP 地址时,进入交互方式;否则进入非交互方式。交互方式给用户以更多的自由度,可以查询机器的各种信息,或者列出属于某个域的所有主机;而非交互方式只能从缺省域名服务器中查询给定主机的名字或 IP 地址。使用 exit 子命令或 Ctrl-d 组合键可以退出交互会话。

       上面的语法和下面的例子是在 Unix 操作系统中的情况。不同的操作系统下该命令的具体使用方法或支持的子命令可能会有所区别,甚至完成同样功能的命令名也可能不叫 nslookup 。在交互会话中,随时可以使用 Ctrl-C 键终止相应子命令的执行。

例1:
% nslookup   hpc.sp.net.edu.cn
Server:   cw.sp.net.edu.cn
Address:   202.112.32.254
 
Name:     hpc.sp.net.edu.cn
Address:   202.112.32.3
%
命令行中 hpc.sp.net.edu.cn 是用户登录到 CERNET 高性能计算中心的大型机时使用的主机名。该命令显示缺省的域名服务器和给定主机的 IP 地址后退出。
 
     例2:
% nslookup
Default Server:   cw.sp.net.edu.cn
Address:   202.112.32.254
 
> hpc.sp.net.edu.cn
Server:   cw.sp.net.edu.cn
Address:   202.112.32.254
 
Name:     hpc.sp.net.edu.cn
Address:   202.112.32.3
 
> help
Commands:       (identifiers are shown in uppercase, [] means optional)
NAME           - print info about the host/domain NAME using default server
NAME1 NAME2   - as above, but use NAME2 as server
help or ?          - print info on common commands; see nslookup(1) for details
set OPTION          - set an option
     all              - print options, current server and host
     [no]debug        - print debugging information
     [no]d2           - print exhaustive debugging information
     [no]defname      - append domain name to each query
     [no]recurse       - ask for recursive answer to query
     [no]vc           - always use a virtual circuit
     domain=NAME    - set default domain name to NAME
     srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2, etc.
     root=NAME       - set root server to NAME
     retry=X           - set number of retries to X
     timeout=X         - set initial time-out interval to X seconds
         querytype=X                   - set query type, e.g., A, ANY, CNAME, HINFO, MX, NS, PTR, SOA, WKS
     type=X            - synonym for querytype
     class=X            - set query class to one of IN (Internet), CHAOS, HESIOD or ANY
server NAME           - set default server to NAME, using current default server
lserver NAME           - set default server to NAME, using initial server
finger [USER]           - finger the optional USER at the current default host
root                   - set current default server to the root
ls [-t TYPE]             - list records of the given type (e.g., A, CNAME, MX)
view FILE              - sort an 'ls' output file and view it with more
 
> set all
Default Server:   cw.sp.net.edu.cn
Address:   202.112.32.254
 
Set options:
    nodebug    defname    search    recurse    nod2    novc   noignorec 
   query=HINFO      class=IN         timeout=5        retry=4  root=ns.nic.ddn.mil.
    domain=sp.net.edu.cn     srchlist=sp.net.edu.cn/net.edu.cn/edu.cn
 
> set type=ANY
> www.mhpcc.edu
Server:   cw.sp.net.edu.cn
Address:   202.112.32.254
 
Non-authoritative answer:
www.mhpcc.edu    canonical name = wailea.mhpcc.edu
 
Authoritative answers can be found from:
MHPCC.EDU        nameserver = MAUI.MHPCC.edu
MHPCC.EDU        nameserver = NIS.ANS.NET
MHPCC.EDU        nameserver = NS.ANS.NET
MAUI.MHPCC.edu   inet address = 164.122.7.32
NIS.ANS.NET      inet address = 147.225.1.2
NS.ANS.NET       inet address = 192.103.63.100
 
> server 202.112.0.34
Default Server:   ns1.net.edu.cn
Address:   202.112.0.34
 
> sp.net.edu.cn
Server:   ns1.net.edu.cn
Address:   202.112.0.34
 
Non-authoritative answer:
sp.net.edu.cn    nameserver = CWS.sp.net.edu.cn
sp.net.edu.cn    canonical name = cw.sp.net.edu.cn
 
Authoritative answers can be found from:
sp.net.edu.cn    nameserver = CWS.sp.net.edu.cn
CWS.sp.net.edu.cn        inet address = 202.112.32.254
 
> exit
%

 

例 2 中使用不带参数的 nslookup 命令进入交互方式。首先显示出的是缺省域名服务器 cw.sp.net.edu.cn ,当前域为 sp.net.edu.cn 。然后我们仍旧输入 hpc.sp.net.edu.cn , nslookup 将返回它的 IP 地址。使用 help 或?子命令可以获取帮助信息。 set all 子命令可以列出当前所有选项的设置情况,可以看出 query (也称为 querytype 或 type )的值为 HINFO ,例中使用 set type=ANY 子命令将该选项的值改为 ANY ,表示查询某主机的所有信息,包括 IP 地址、主机名、域名服务器、域名、 Mail Exchanger 、 SOA 记录等。接着我们在该状态下查询美国 MAUI 的某个主机 www.mhpcc.edu ,由于当前缺省域名服务器 cw.sp.net.edu.cn 上并不直接包含 www.mhpcc.edu 信息,因而返回的是 Non-authoritative 答案,同时列出了包含 www.mhpcc.edu 权威信息的所有域名服务器。最后我们将缺省域名服务器改为 CERNET 的最高域名服务器 202.112.0.34 ,并查询 sp.net.edu.cn 域的信息后退出 nslookup 会话。

7)  traceroute

       traceroute 是一个通用的 TCP/IP 工具,它能显示出数据包从本地机到达目标机时经过的所有路由器。由于 traceroute 会人为地给网络造成一些通信负担,所有它主要被系统或网络管理员,作为一个简单而有效的网络手工查错工具使用,普通用户最好少用。尽管如此, traceroute 对于用户了解 Internet 的结构,了解自身的网络故障会有很大帮助。

       下面给出的语法和例子都是在 Unix 操作系统下的情况,在其它操作系统中,该命令可能有不同的使用方法或表示,例如在 Windows NT 和 Windows 95 下,类似的命令叫 tracert 。

       traceroute 的语法为:

traceroute   [-m Max_ttl]   [-n ]   [-p Port]   [-q Nqueries]   [-r]   [-s SRC_Addr]
 [-t TypeOfService]   [-v]   [-w WaitTime]   Host   [PacketSize]         其中,

-m Max_ttl :指定最大生存期( Maximum Time-to-live )。也就是数据包从本地机到达目标机所经过的最大跳步( hop ),即最多经过这么多路由器。缺省值为 30 步。

-n :只显示途径路由器的 IP 地址,不再显示其名字。

-p :指定包传输时使用的 UDP 端口号。

-q :指定每次跳步发送的探询包的数目,缺省值为 3 。

-v :列出详细信息。

-w WaitTime :指定每次跳步等待接收响应包的最长时间,缺省值为 3 秒。

Host :目标机的 IP 地址或机器名。

PacketSize :指定每个跳步传输的数据包的大小,缺省值为 38 个字节。

 

       traceroute 实际上是通过给目标机的一个非法 UDP 端口号发送一系列 UDP 数据包来工作的。使用缺省设置时,本地机给每个路由器发送 3 个数据包,最多可经过 30 个路由器。如果已经经过了 30 个路由器,但还未到达目标机,那么 traceroute 将终止。每个数据包都对应一个 Max_ttl 值,同一跳步的数据包该值一样,不同跳步的数据包的值从 1 开始,每经过一个跳步值加 1 。当本地机发出的数据包到达路由器时,路由器就响应一个 ICMP Time Exceed 消息,于是 traceroute 就显示出当前跳步数,路由器的 IP 地址或名字, 3 个数据包分别对应的周转时间(以 ms 为单位)。如果本地机在 WaitTime 内未收到响应包,那么在数据包的周转时间栏就显示出一个星号。当一个跳步结束时,本地机根据当前路由器的路由信息,给下一个路由器又发出 3 个数据包,周而复始,直到收到一个 ICMP  PORT_UNREACHABLE 的消息,意味着已到达目标机,或者已达到指定的最大跳步数。

% traceroute www.cnc.ac.cn
traceroute to www.cnc.ac.cn (159.226.1.17), 30 hops max, 40 byte packets
  1   router1.sp.net.edu.cn (202.112.35.254)   2 ms   2 ms   2 ms
  2   202.112.1.210 (202.112.1.210)   4 ms   2 ms   2 ms
  3   202.38.96.1 (202.38.96.1)   3 ms   2 ms   2 ms
  4   159.226.1.17 (159.226.1.17)   3 ms   2 ms   2 ms

例中 www.cnc.ac.cn 是中科院的 WWW 服务器,本地机是 CERNET 高性能计算中心 SP2 的一个节点机。首先从 SP2 连到 CERNET 的 HUB ( 202.112.35.254 )出去,然后经过 CERNET 和 CASnet 的路由器到达目标服务器。可以看到,数据包的平均周转时间为 2ms ,这是相当快的速度了。

% traceroute www.mhpcc.edu
traceroute to wailea.mhpcc.edu (164.122.9.37), 30 hops max, 40 byte packets
  1   router1.sp.net.edu.cn (202.112.35.254)   2 ms   2 ms   2 ms
  2   202.112.1.198 (202.112.1.198)   7 ms   11 ms   4 ms
  3   us-igw.net.edu.cn (202.112.1.206)   45 ms   54 ms *
  4   gsl-stock-3-Serial10/4.gsl.net (204.59.160.245)   554 ms   552 ms   575 ms
  5   gsl-sl-stock-fddi.gsl.net (204.59.128.198)   559 ms   553 ms   551 ms
  6   sl-mae-w-H3/0-T3.sprintlink.net (144.228.10.110)   562 ms   557 ms   564 ms
  7   mae-west.dren.net (198.32.136.81)   571 ms   622 ms   587 ms
  8   wahiawa-nctams.dren.net (138.18.232.2)   677 ms   617 ms   621 ms
  9   maui.dren.net (138.18.236.1)   611 ms   649 ms   629 ms
10   bcn77-f11-7.mhpcc.edu (164.122.7.7)   613 ms   608 ms   610 ms
11   wailea.mhpcc.edu (164.122.9.37)   622 ms   617 ms *

       要到达 MHPCC 的 WWW 服务器,在第 3 跳步到达 CERNET 通往美国的路由器,然后经过 Sprint 公司的其它路由器在第 8 跳步到达 Hawaii ,最后经过 Maui 的路由器到达目标节点。可以看出,从本地机发往国内几个路由器的周转时间为几十 ms ,到达美国后猛增到 500 多 ms 。