Linux网络基础

来源:互联网 发布:淘宝新店铺没有访客 编辑:程序博客网 时间:2024/06/15 18:32

以Debian的方式系列(IN THE DEBIAN WAY):
Linux网络基础
etony C.F.AN etony@tom.com
v0.0.1, 2006-7-23
--------------------------------------------------------------------------------
本文档主要介绍讲述在 Debian系统下有关网络的一些基本信息.
--------------------------------------------------------------------------------

1. 声明

版本信息:
本文档的最新版本将张贴于: LinuxSir.Org论坛 Debian 发行版讨论区 ;

也可以从 http://debian.linuxsir.org/ 获取.

反馈:
所有评论, 错误报告, 其他信息以及批评, 请邮寄到 etony@tom.com ;

或在LinuxSir.Org论坛 Debian发行版讨论区 张贴.

版权信息:
本文档的版权(c)2006-2007 归 etony C.F.AN 所有.

转载请注明源自 http://debian.linuxsir.org/ .


2. 网络相关配置文件介绍
2.1 /etc/hosts
包含(本地网络中)已知主机的一个列表。如果系统的 IP 不是动态获取,就可以使用它。对于简单的主机名解析(点分表示法)

,在请求 DNS 或 NIS 网络名称服务器之前,/etc/hosts.conf 通常会告诉解析程序先查看这里。


文件格式:
ip地址          主机名          别名

$ cat /etc/hosts

127.0.0.1       localhost.localdomain   localhost


2.2 /etc/services
Internet网络服务文件,将网络服务名转换为端口号/协议。由 inetd、telnet、tcpdump 和一些其它程序读取。文件中的每一行

对应一种服务,它由4个字段组成,中间用TAB或空格分隔,分别表示“服务名称”、“使用端口”、“协议名称”以及“别名”。


文件格式:
服务            端口/端口类型           别名

$ cat /etc/services  |more

tcpmux          1/tcp                           # TCP port service multiplexer
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
systat          11/tcp          users
daytime         13/tcp
daytime         13/udp
netstat         15/tcp
qotd            17/tcp          quote
msp             18/tcp                          # message send protocol

//add by me 注意:服务名和服务的别名不代表命令名,我在linux上使用msp命令,返回-bash: msp: command not found

2.3 /etc/hostname
主机名配置文件,该文件只有一行,记录着本机的主机名。

文件格式:


主机名
$ cat /etc/hostname
tonybox


2.4 /etc/host.conf
当系统中同时存在DNS域名解析和/etc/hosts主机表机制时,由该/etc/host.conf确定主机名解释顺序。示例:


order hosts,bind    #名称解释顺序
multi on            #允许主机拥有多个IP地址
nospoof on          #禁止IP地址欺骗 //add by me spoof的意思是诓骗,恶搞,欺骗


order是关键字,定义先用本机hosts主机表进行名称解释,如果不能解释,再搜索bind名称服务器(DNS)。

//add by me 如果想dns先于主机解释,则order行需改为order bind,host


2.5 /etc/nsswitch.conf
名称服务交换设定档。它控制了数据库搜寻的工作,包括承认的 主机,使用者,群组等。此外,这个档案还定义了所要搜寻的 数

据库,例如此行://add by me 这个文件包含很多,其中有这一行.


hosts: files dns


指明主机数据库来自两个地方,files ( /etc/hosts file) 和 DNS, 并且本机上档案优先于 DNS。


$ cat /etc/nsswitch.conf

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis


2.6 /etc/resolv.conf
该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数。resolv.conf的关键字主要有四个,

分别是:


nameserver   #定义DNS服务器的IP地址
domain       #定义本地域名
search       #定义域名的搜索列表
sortlist     #对返回的域名进行排序


下边是一个示例:


#cat /etc/resolv.conf
domain mydebian.com
nameserver 192.168.1.1  //最多三个域名服务器地址


2.7 /etc/network/interfaces (add by me redhat中没有此文件)
网络接口参数配置文件, 下面是一个配置示例, 有两个网络接口, 其中eth0 分配静态IP地址, eth1动态获取IP地址 :

        # This file describes the network interfaces available on your system
        # and how to activate them. For more information, see interfaces(5).

        # The loopback network interface
        auto lo
        iface lo inet loopback

        # The primary network interface
        auto eth0
        iface eth0 inet static
                address 192.168.1.254
                network 192.168.1.0
                netmask 255.255.255.0
                broadcast 192.168.1.255
                gateway 192.168.1.1

        auto eth1
        iface eth1 inet dhcp


如果对此文件进行修改, 需要重启网络方能生效:

        # /etc/init.d/networking restart


3. 基本的网络配置命令和脚本(add by me redhat中没有此文件)
3.1 etherconf
Debian 下提供一个名叫 etherconf软件包, 用于配置网络信息,这包括主机名,IP,DHCP,DNS,GATEWAY,NETMASK...等, 默认没

有安装这一软件包, 需要您手动安装:


        # aptitude install etherconf


安装完毕后运行:


        $dpkg-reconfigure etherconf


进行配置.

这个软件会修改以下配置文件:


        /etc/resolv.conf
        /etc/network/interfaces
        /etc/hosts
        /etc/hostname


重复使用这一配置文件的方法是:


        # dpkg-reconfigure etherconf


3.2 /etc/init.d/networking (add by me redhat中为/etc/init.d/network)
系统启动时的初始化脚本, 当系统以某个级别启动时, 它负责初始化所有的已配置的网络接口.

3.3 ifconfig
用于配置常驻内核的网络接口。它用于在引导成功时设定网络接口。此后,只在需要调试及系统调整时才使用。


命令格式:
        ifconfig [接口]
        ifconfig 接口 [aftype] options | address ...


如没有给出参数, ifconfig 显示当前有效接口的状态。如给定单个 接口 作为参数,它只显示给出的那个接口的状态;如果给出

一个 -a 参数,它会显示所有接口的状态,包括那些停用的接口。否则就对一个接口进行配置。


选项
        接口 接口名称。通常是一个后跟单元号的驱动设备名,例如第一个以太接口 eth0 。

        up
            此选项激活接口。如果给接口声明了地址,等于隐含声明了这个选项。
        down
            此选项使接口驱动设备关闭。

        netmask addr
            为接口设定 IP 网络掩码。缺省值通常是 A,B 或 C 类的网络掩码 (由接口的 IP 地址推出),但也可设为其它值。
        add addr/prefixlen
            为接口加入一个 IPv6 地址。
        del addr/prefixlen
            为接口删除一个 IPv6 地址。
        hw class address
            如接口驱动程序支持,则设定接口的硬件地址。此选项必须后跟硬件的类型名称和硬件地址等价的可打印 ASCII 字

符。当前支持的硬件类型包括 ether (以太网), ax25 (AMPR AX.25), ARCnet 和 netrom (AMPR NET/ROM)

  利用ifconfig命令查看网络信息:


ifconfig
        eth0      Link encap:Ethernet  HWaddr 00:15:58:3E:F2:6B 
                  inet addr:192.168.1.254  Bcast:192.168.1.255  Mask:255.255.255.0
                  inet6 addr: fe80::215:58ff:fe3e:f26b/64 Scope:Link
                  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                  RX packets:29458 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:23690 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:1000
                  RX bytes:10945195 (10.4 MiB)  TX bytes:2935004 (2.7 MiB)
                  Interrupt:169 Base address:0xe200

        eth0:0    Link encap:Ethernet  HWaddr 00:15:58:3E:F2:6B 
                  inet addr:192.168.1.244  Bcast:192.168.1.255  Mask:255.255.255.0
                  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                  Interrupt:169 Base address:0xe200

        lo        Link encap:Local Loopback 
                  inet addr:127.0.0.1  Mask:255.0.0.0
                  inet6 addr: ::1/128 Scope:Host
                  UP LOOPBACK RUNNING  MTU:16436  Metric:1
                  RX packets:354 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:354 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:0
                  RX bytes:45062 (44.0 KiB)  TX bytes:45062 (44.0 KiB)

        ppp0      Link encap:Point-to-Point Protocol 
                  inet addr:18.18.18.13  P-t-P:18.18.18.1  Mask:255.255.255.255
                  UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1396  Metric:1
                  RX packets:9631 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:9189 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:3
                  RX bytes:8460352 (8.0 MiB)  TX bytes:913898 (892.4 KiB)


ifconfig的第一种格式(或使用不带任何参数的ifconfig命令)可以用来查看当前系统的网络配置情况。


    * eth0 : 表示网卡代号
    * lo :Linux内部的网络回环地址, 用于模拟网络行为,
    * HWaddr :网卡的硬件地址,也就是MAC地址
    * inet addr :网卡的ip地址
    * Bcast :广播地址( broadcast ) ;
    * Mask :子网掩码;
    * MTU :最大传输单元的缩写(Maximum Trasmission Unit), 标示此网络接口的可传输的最大封包, 此值的设定错误可能引起

网络故障.
    * RX :网络从起动到现在为止数据的接收情况
    * TX :网络从起动到现在为止数据的发送情况
    * collisions :网络信号发生冲突的情况;


激活网络设备


        ifconfig eth0 up


更改网络设备信息


        #ifconfig eth0 192.168.1.112 netmask 255.255.255.0


关闭网络设备


        ifconfig eth0 down


修改网卡的MAC地址


        ifconfig eth0 down
        ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
        ifconfig eth0 up


4. 网络服务相关
5. 测试网络
5.1 ping
向网络主机发送ICMP回显请求(ECHO_REQUEST)分组 程序使用 ICMP 协议的强制回显请求数据报以使主机或网关发送一份 ICMP 的

回显应答。回显请求数据报(`` pings IP 及 ICMP 的报头,后跟一个``时间值关键字''然后是一段任意长度的填充字节用于把保

持分组长度为16的整数倍。以下是程序的选项:


        ping  [-c count ] [-i wait ] [-p pattern ] [-s packetsize ] [ -t ttl]   destination

        -c
            count 在发送(和接收)了正好数量为 count 的回显应答分组后停止操作。
        -i
            wait 在发送每个分组时等待 wait 个秒数。缺省值为每个分组等待一秒。此选项与-f选项不能同时使用。

        -p
            pattern 可以指定最多16个填充字节用于保持分组长度为16的整数倍。在网络上诊断与数据相关问题时此选项很有用

。例如``-p ff''将使发出的分组都用全1填充数据区。

        -s
            packetsize 指定要发送数据的字节量。缺省值为 56 ,这正好在添加了 8 字节的 ICMP 首部后组装成 64 字节的

ICMP 数据报。

        -t

           ttl指存活数值TTL的大小默认为255

 

        tony@tonybox:~$ ping www.linuxsir.org -c 4
        PING www.linuxsir.org (218.61.34.138) 56(84) bytes of data.
        64 bytes from 218.61.34.138: icmp_seq=1 ttl=52 time=103 ms
        64 bytes from 218.61.34.138: icmp_seq=2 ttl=52 time=125 ms
        64 bytes from 218.61.34.138: icmp_seq=3 ttl=52 time=126 ms
        64 bytes from 218.61.34.138: icmp_seq=4 ttl=52 time=110 ms

        --- www.linuxsir.org ping statistics ---
        4 packets transmitted, 4 received, 0% packet loss, time 3003ms
        rtt min/avg/max/mdev = 103.513/116.329/126.598/9.856 ms
        tony@tonybox:~$

 

5.2 route
Route route 程序对内核的 IP 路由表进行操作。它主要用于给那些已经用 ifconfig(8) 程序配置过的接口指定主机或网络设置

静态路由。

当使用了 add 或 del 选项的时候, route 修改路由表.如果没有这些选项, route 显示当前路由表的内容.


        # route [-nee]
        # route add [-net|-host] 目标主机或网络 [netmask] [gw|dev]
        # route del [-net|-host] 目标主机或网络 [netmask] [gw|dev]

        -n   :数字地址形式代替解释主机名形式来显示地址。此项对检测为何你到域名服务器的路由发生故障的原因非常有

用。
        -ee   :将产生包括选路表所有参数在内的大量信息
        add   :添加一条路由
        del   :删除一条路由
        -net  :路由目标 target 为网络。
        -host  :路由目标 target 为主机。
        netmask :为添加的路由指定网络掩码!
        gw    :通过一个网关进行包路由.


注意:

指定的网关首先必须是可达的。也就是说必须为该网关预先指定一条静态路由。如果你为本地接口之一指定这个网关地址的话,那

么此网关地址将用于决定此接口上的分组将如何进行路由。这是兼容 BSD 风格。 dev   :强制路由与指定的设备关联,否则内

核自己会试图检测相应的设备 (方法是检查要增加的路由项所处环境中已存在的路由和设备声明)。在多数正常的网络上无需使用


        # route  查看本地路由信息
        tonybox:/etc/network/run# route
        Kernel IP routing table
        Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
        18.18.18.1      *               255.255.255.255 UH    0      0        0 ppp0
        192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
        default         *               0.0.0.0         U     0      0        0 ppp0

 

        route add -net 127.0.0.0
            加一条普通的回环记录,它使用掩码 255.0.0.0 (从目标地址可以判断它是 A 类网)并与设备 "lo" 相关联 .

        route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
            给通过 "eth0" 的路由表添加一条指向网络 192.56.76.x 的路由。其中 C 类子网掩码修饰词并不是必须的,因为

192.* 是个 C 类的 IP 地址。这里可省略关键字 "dev"。

        route add default gw 192.168.1.1
            加入一条缺省路由(如果无法匹配其它路由则用它)。使用此路由的所有包都将通过网关 192.168.1.1进行传输。

        route add 224.0.0.0 netmask 240.0.0.0 dev eth0
            这是一条模糊的命令,把它记录在案就可以让人们知道如何做了.此命令设定所有 D 类地址(用于组播)的路由通过

"eth0" 进行。这是用于带组播的内核正确的配置行。


5.3 traceroute

        traceroute [ -dFIlnrvx ] [ -f first_ttl ] [ -g gateway ]
                       [ -i iface ] [ -m max_ttl ] [ -p port ]
                       [ -q nqueries ] [ -s src_addr ] [ -t tos ]
                       [ -w waittime ] [ -z pausemsecs ]
                       host [ packetlen ]


通过Traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点

(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。UNIX系

统中,我们称之为 Traceroute,MS Windows中为Tracert。 Traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要

多长时间。一条路径上的每个设备Traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地

址。


        -d
        指定不对计算机名解析地址。
        -h maximum_hops
        指定查找目标的跳转的最大数目。
        -jcomputer-list
        指定在 computer-list 中松散源路由。
        -w timeout
        等待由 timeout 对每个应答指定的毫秒数。
        host
        目标计算机的名称。

 

        # traceroute www.linuxsir.org
        traceroute to www.linuxsir.org (218.61.34.138), 30 hops max, 40 byte packets


6. 配置ADSL上网
首先,你要拥有上网帐号和密码, 并且有一块网卡正确的与ADSL moden正确相连

6.1 安装PPPoE软件包

        $ sudo install pppoe pppoeconf


6.2 然后进行配置

        确认检测到了您的网卡
        输入您的ADSL帐号
        输入您的ADSL帐号密码
        常规选项:是否修改默认路由: yes
                是否获取DNS: yes
        是否在引导时自动连接: yes
        是否马上建立连接: yes


完成这些步骤以后, 连接应该可以正常使用了

6.3 手动控制

        $ sudo pon dsl-provider #手动连接
        $ sudo poff dsl-provider #手动断开连接


6.4 FAQ
Q:拨号成功, 但无法和外网通讯

A:使用route命令检查本地路由, 看默认路由是否正确

Q:无法解析域名

A:检查/etc/resolv.conf文件,看是否正确获取了DNS