[转载]Linux网络基础
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
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地址欺骗
order是关键字,定义先用本机hosts主机表进行名称解释,如果不能解释,再搜索bind名称服务器(DNS)。
2.5 /etc/nsswitch.conf
名称服务交换设定档。它控制了数据库搜寻的工作,包括承认的 主机,使用者,群组等。此外,这个档案还定义了所要搜寻的 数据库,例如此行:
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
网络接口参数配置文件, 下面是一个配置示例, 有两个网络接口, 其中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. 基本的网络配置命令和脚本
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
系统启动时的初始化脚本, 当系统以某个级别启动时, 它负责初始化所有的已配置的网络接口.
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