第二章 TCP/IP网络的问题
我们将转至讨论一些你将遇到的一些细节上,当你将你的Linux机器连接到TCP/IP网络时就会
用到这些细节,它涉及到IP地址、主机名、以及有时是路由选择问题。这一章给出了你所需
的背景资料,以用于理解你的设置需求,下一章将讨论涉及这些的一些工具。
2.1 网络接口
为了隐藏可能用于网络环境的设备的差异性,TCP/IP定义了一个抽象的接口(interface),
通过这个接口来访问硬件。这个接口提供了一组操作,该组操作对所有的硬件类型是一样的
,并且基本上是涉及发送和接收分组。
对于每种你想用于连网的外围设备来说,必须在内核中有一个相应的接口。例如,Linux中以
太网的接口称作eth0和eth1,SLIP的接口是sl0、sl1等等。这些接口名称是用于配置目的,
那时你想给内核命名一个特定的物理设备。除了这别无它意。
为了对TCP/IP连网有用,一个接口必须分配一个IP地址,当与其它地方通信时这个地址起到
它的鉴定识别的作用。这个地址与上面提到的接口名称是不同的;如果你将接口比作一扇门
的话,那么这个地址就象是门上钉的名牌一样。
当然,可能还有其它一些设备参数需要设定;其中之一就是特定硬件能够处理的最大数据报
的大小,也称为最大传输单元(Maximum Transfer Unit),或MTU。别的属性将在后面介绍
。
2.2 IP地址
如上章所提到的,IP网络协议所能理解的地址是一个32比特的数字。每一台机器必须分配一
个对于网络环境来说唯一的一个数字。如果你运行一个不与其它网络有TCP/IP通信的本地网
络,你可以依据个人的爱好来分配这些数字。然而,对于Internet上的站点来说,这些数字
是由一个中心权威机构,网络信息中心(Network Information Center或NIC)来分配的。[
1]
为了容易阅读,IP地址被分解成四个8比特数字称为八位位组(octets)。例如,quark.phy
sics.groucho.edu有一个IP地址为0x954C0C04,它可以写成149.76.12.4。这个格式通常称作
为点分四组表示法(Dotted quad notation)。[还有一种称呼为点分十进制表示法Dotted
decimal notation―译者注]
这种表示法的另一个原因是IP地址可以分成包含在开头(左面)的八位位组中的一个网络号
(network number)和包含在剩余(右面)的八位位组中的一个主机号(host number)。当
IP地址遵循NIC的规则使用时,并不是为你计划要使用的每台主机分配一个地址,而是给你一
个网络号,并且允许你依照你的喜好,在你的网络上给各台主机分配在该网络号范围内的所
有有效的任意IP地址。
根据组成的网络规模的大小,IP地址的主机部分可大可小。为适应不同的需要,定义了几类
网络,给出了IP地址的不同分割法。
A类 A类由1.0.0.0到127.0.0.0的网络构成。网络号包含在第一个八位位组中。这样就提供了
24比特位的主机部分,每个网络允许大约有160万台主机。
B类 B类包括从128.0.0.0到191.255.0.0的网络;网络号由前两个八位位组构成。这样就可以
有16320个网络,而每个网络可以有65024台主机。
C类 C类网络的范围从192.0.0.0到223.255.255.0。网络号由前三个八位位组组成。可以有近
200万个网络,而每个网络能容纳254台主机。
D、E、F类的地址范围从224.0.0.0到254.0.0.0,用于试验用途或保留给将来使用,而没有分
配给任何网络用。
如果我们再参考前一章的例子,我们发现quark的地址149.76.12.4对应B类网络149.76.0.0的
12.4的主机。
你可能已经注意到,上面列出来的主机部分不是每个八位位组的所有数值都可以使用的。这
是因为八位位组为全0或255的主机号是留作它用的。主机部分的所有比特位为全零的地址引
用为一个网络,而主机部分的所有比特位为全1的地址称为广播地址。它同时指一个网络上的
所有主机。因此,149.76.255.255不是一个有效地址,而是指网络149.76.0.0上的所有主机
。
还有两个网络地址0.0.0.0和127.0.0.0也是保留的。这第一个称为缺省路由(default rout
e),后一个称为回送地址(loopback address)。缺省路由与IP路由数据报的方式有关,这
将在下面讨论。
网络地址127.0.0.0保留作你的主机内部IP通信用。通常,地址127.0.0.1将分配给主机上的
一个特殊接口使用,称为回送接口(loopback interface),它的行为象一个闭合电路。从
TCP或UDP送来的任何IP分组都将返送给它们,就好象这个分组是刚从某个网上传过来的。这
允许你不必使用一个“真正”的网络就能开发并测试网络软件。它的另一种很有用的应用是
在当你想在单机上使用网络软件时。这并不象听起来那么罕有;例如,许多UUCP站点根本就
没有IP连通,但仍然要运行INN新闻系统。为了要正常的运作,INN需要回送接口。
2.3 地址解析
现在,你已经知道IP地址是如何形成的,你可能会觉得奇怪,它们在以太网上是如何用于编
址不同的主机的。毕竟,以太网协议是用一个与IP地址完全不同的六个八位位组的数值来识
别主机的,不是吗?
对。这就是为什么需要一种将IP地址映射到以太网地址的机制了。这就是所谓的地址解析协
议(Address Resolution Protocol),或ARP。实际上,ARP根本不限于以太网,它也可以应
用于其它类型的网络,如业余无线电爱好者等。ARP的基本概念正象人们在一个150人的人群
中寻找X. Ample先生时大多数人的做法一样:他们环绕着人群,叫喊着他的名字,并确信如
果他在那里的话一定会应答的。
当ARP想找出与给定IP地址相应的以太网地址时,它就利用了以太网的“广播”特性,此时一
个数据报在网上同时寻址所有的站点。ARP所发送的广播数据报含有对相应IP地址的查询。每
台主机将接收到的IP与自己的IP地址相比较,如果一致,就返回一个ARP响应给发出查询的主
机。此时发出查询的主机就可以从响应数据报中提取发送者的以太网地址了。
当然,你会觉得惊讶,一台主机怎么能知道在全世界数不清的以太网上它能找到所期望的主
机呢?并且为什么一定是以太网呢?这些问题都涉及称为路由选择的操作,也即在网络上寻
找出一台主机的物理位置。这将是下一节的主题。
此时,让我们再多讨论一会ARP。一旦一台主机发现了一个以太网地址,该主机就将它存贮在
ARP的缓冲中,这样主机在下一次想要发送数据报给所讨论的主机时就不要再次查询它的以太
网地址了。然而,永久地保存这些信息是不明智的;例如,远程主机上的以太网卡有可能由
于技术上的问题而被更换掉,此时ARP的登记项就变得无效了。为了强迫进行另一次IP地址的
查询,ARP缓冲中的登记项因此在一段时间后就被丢弃。
有时候,需要找出与给定以太网地址相对应的IP地址。当一台无盘机器想从网上的一台服务
器上引导时就会有这种情况,这在局域网上是常有的情形。但是,一个无盘客户实际上并没
有有关自身的信息―除了知道自己的以太网址外!所以它主要要做的是广播一条请求引导服
务器告诉它它的IP地址的消息。针对于此,有另一个协议,命名为反向地址解析协议(Reve
rse Address Resolution Protocol),或RARP。与BOOTP协议一起,它用于规定在网上引导
无盘站的过程。
2.4 IP路由选择
2.4.1 IP网络
当你给某人写了一封信,通常会在信封上写上完整的收信人地址,列出了国家、州和邮政编
码等等。当你把信放入邮箱时,邮政服务会把它送到目的地:它将被送到指定的国家中去,
该国的邮政服务会把它分发到正确的州和地区,等等。这个分级方案的优点是显而易见的:
不管你在哪里发出了这封信,当地的邮递员将会大概地知道该封信要投递的方向,但并不关
心这封信在送达的国家中以什么方式来投递。
IP网络的结构与之相似。整个互连网(Internet)是由许多专有网络构成,称为自治系统(
autonomous systems)。每个这样的系统在其内部成员主机之间执行着各种路由选择,所以
分发一个数据报的任务被简化成寻找一条到达目的主机网络的路径。这意味着,一旦数据报
被传到那个特定的网络上的任何(any)主机上,网络本身会专门进行进一步的处理。
2.4.2 子网(Subnetworks)
这个结构是通过前面所述的将IP地址分成主机部分和网络部分来反映出来的。默认地,目的
网络得自IP地址的网络部分。因此,有同样IP网络号的主机在同一个网络上,反之也然。[2
]
在网络内部使用类似的方案也同样合理,由于它本身可能有许多更小的网络组成,最小的单
元可以是一个象以太网一样的物理网络。因此,IP允许你将一个IP网络分割成一些子网(su
bnets)。
在子网所属的IP网上,子网接管了分发数据报到某个IP地址范围的职责。对于A类、B类或C类
网,它是由IP地址的网络部分确定的。然而,现在把网络部分扩展成也包括主机部分的几个
比特位。被解释为子网号的这几个比特位的位数是由称为子网掩码(subnet mask),或网络
掩码(netmask)的数值指定的。这同样是一个32位的数值,它指定了IP地址网络部分的位掩
码。
图2.1 将B类网分成子网
Groucho Marx大学的校园网就是这样一个网的例子。它的B类网络号是149.76.0.0,它的网络
掩码也就是255.255.0.0。
就内部而言,GMU的校园网由几个更小的网络组成,如各个系的局域网。所以IP地址的范围被
分