下面的几节介绍了实际配置网络之前需要掌握的内容。这些基本原理适用于所有网络配置。
网际协议(Internet Protocol -- IP)地址由 4 个字节构成[6]。一般,这些地址以所谓“点分十进制表示法 (dotted decimal notation)”来表示。这一格式将每一字节表示为一个十进制数字(0-255),并省略所有前导零(除非恰为值零)。字节之间以“.” 字符分隔。通常,每台主机或路由器接口拥有一个 IP 地址。在某些情况下,单台主机的不同网络接口使用同一个 IP 地址也是可以的。但常见的是,每个接口使用它自己独立的地址。
网际协议网络是一组连续的 IP 地址。同一个网络的所有地址都包含有一组共同的数字。网络内所有地址都相同的部分称作该地址的“网络号”。剩下的数字称作“主机号”。而网络中所有地址共同的二进制位称为“子网掩码”。该掩码用于确定哪些地址属于它所对应的网络而哪些不属于。例如:
任何地址同子网掩码“二进制按位与”的结果都将揭示它所属于的网络的地址。因此,网络地址通常是该网络地址范围内的最小值,并且其主机号通常为零。
广播地址是一个网络中所有主机都会监听的特殊地址(除了主机各自的地址之外)。该地址用于发送需要网络中所有主机都能收到的数据报文,比如路由信息和警告消息的数据。一般使用网络中可用的最高地址作为广播地址。在上例中,这将会是 192.168.110.255
。实际上,用哪一个并没有什么关系,只要您将网络中所有主机的广播地址都设为同一个即可。
出于管理考虑,在 IP 协议研发初期,一些任意的地址组形成了子网。而这些子网组成了所谓类的组别。这些类提供了一组能被分配的标准子网大小。范围如下:
子网类 | 子网掩码 | 网络地址 |
---|---|---|
A | 255.0.0.0 | 0.0.0.0 - 127.255.255.255 |
B | 255.255.0.0 | 128.0.0.0 - 191.255.255.255 |
C | 255.255.255.0 | 192.0.0.0 - 223.255.255.255 |
多播 | 240.0.0.0 | 224.0.0.0 - 239.255.255.255 |
您该使用哪种地址取决于您在做什么。您可综合以下方法来获得所需地址:
路由涉及面很广,有关这方面的著作可以说是连篇累牍。大多数人可能只有简单的路由要求,其他人可能不是。这里将仅涉及一些路由方面的基本知识。
什么是 IP 路由?这里是一种定义:“IP 路由是一个具有多重连接的主机选择往何处转发其收到的数据报文的过程。”
也许通过一个例子来说明会更加有助于您理解 IP 路由,比如一台标准的办公室路由器。它可能拥有一个到 Internet 的 PPP 连接,一组以太网段分配到各个工作站,以及另一个 PPP 连接到另一个办公室。当路由器收到某个网络连接发送来的数据报文时,路由就是其选择使用哪一个接口转发该数据报文到下一站的机制。单纯主机也需要路由,所有 Internet 主机都有两个网络设备,其中一个是回环接口,另一个是其用来同网络其余部分通信的接口,可能为以太网、PPP 或是 SLIP 串行接口。
好。那么路由是怎样起作用的呢?每台主机都保存有一张路由规则的特殊列表,该列表被称为路由表。路由表每行至少有三列:第一列是目的地地址,第二列是数据报文要被转发到的接口的名称,第三列是可选的,它表示该报文将要抵达的下一个中转主机地址。您可以使用如下命令查看该表:
user% cat /proc/net/route
user% /sbin/route -n user% netstat -r
路由过程比较简单:当一个数据报文抵达时,其目的地地址会同表中每一行进行比较。该数据报文将会被转发到最佳匹配行所对应的接口。如果设定了网关,那么该数据报文将会从指定接口转发至网关主机。否则,会假设目的地地址是在该接口支持的网络中。
要操纵路由表,应该使用 route 命令。请参考 route(8) 以获得详情。
上述路由配置适用于简单的网络设置,其中,到一个指定的目的地只有一条路径。如果您的网络设置较为复杂,情况就不那么简单了。
上述“手动路由”或称“静态路由”的一大问题是:万一网络中某台主机或是某个连接出了问题,那么引导数据报文走另一条路径(如果有另一条路径的话)的唯一办法只能是靠执行相应的命令来手工干预。当然,这样最既笨拙又缓慢,显得不切实际仅凭运气。人们开发了各种技术来自动调整路由表以应对万一网络中出现的故障而同时确有其他路径可供选择的情况。所有这些技术可以粗略统称为“动态路由协议” 。
您可能或多或少听说过常用的动态路由协议。最常用的可能是 RIP (Routing Information Protocol -- 路由选择信息协议)以及 OSPF (Open Shortest Path First Protocol -- 开放最短路径优先协议)。路由选择信息协议在小型网络(比如中小型公司网络或是楼宇网络)中十分普遍。相比较而言,OSPF 更加现代,更加适合处理大型网络配置,因而更适用于含有大量可能路径的网络环境中。这些协议的常见实现有:routed - RIP 以及 gated - RIP、OSPF 及其它。routed 程序通常包含于您的 Linux 发行版中。
关于何处以及如何使用动态路由协议如图 12.1 “动态路由示例”所示。
现有三个路由器:A、B 和 C。每一个路由器支持一个 C 类 IP 网络(子网掩码为 255.255.255.0)的以太网网段。每个路由器同时具有与其它路由器相连的 PPP 连接。整个网络形成一个三角形。
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0 root# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0 root# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1
这将正常工作直到路由器 A 和 B 之间的连接断开。一旦这一连接断开,从上述路由表项中可以得出,A 所负责的以太网段中的主机发送的信息将不能抵达 B 所负责的以太网段中的主机。这是因为它们发送的数据报文将会被转发到 A 路由器的 ppp0 连接,而这个连接已经断开。但它们却仍然可以同 C 负责的以太网段中的主机联系,而 C 的以太网段中的主机依然能够同 B 的以太网段中的主机联系。这是因为,B 与 C 的连接依然保持。
且慢,如果 A 能够同 C 联系而 C 能够同 B 联系,那么为什么 A 不能够将其数据报文转交 C 并由 C 将其传送至 B 呢?而这正是类似 RIP 等动态路由协议被设计用来解决的问题。如果 A、B 和 C 都运行路由守护程序,那么万一网络中有某个连接出了故障,它们的路由表就会被修改以反映新的网络状态。配置这样一个网络十分简单。对于每个路由器只需要做两件事。在上例中,对于路由器 A:
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0 root# /usr/sbin/routed
路由守护程序 routed 启动时自动寻找所有活动的网络端口并发送及监听每个网络设备的消息,这样它就能确定并更新相应主机中的路由表。
以上只是对动态路由及其使用的简单描述。如果您希望进一步研究,请参考第 3 节 “Linux 网络基础”列出的推荐读物。