现在我们来探讨如何根据 IP 地址查找数据报要发送到的主机的问题。地址的不同部分以不同的方式处理;您的工作是设置文件,指明如何处理每个部分。
当您给某人写信时,通常会在信封上写上完整的地址,注明国家、州和邮政编码。当您将信件放入邮箱后,邮局会将其递送到目的地:它将被发送到指定的国家,国家邮政服务机构会将信件派送到正确的州和地区。这种分层方案的优势显而易见:无论您在哪里投递信件,当地邮局局长都大致知道将信件转发到哪个方向,但邮局局长并不关心信件到达目的地国家后将如何传递。
IP 网络的结构与之类似。整个互联网由许多适当的网络组成,称为自治系统。每个系统在其成员主机之间执行内部路由,以便将数据报的传递任务简化为查找到达目标主机网络的路径。一旦数据报被交给该特定网络上的任何主机,进一步的处理将完全由网络本身完成。
正如之前所解释的,这种结构通过将 IP 地址拆分为主机部分和网络部分来反映。默认情况下,目标网络是从 IP 地址的网络部分派生的。因此,具有相同 IP 网络号的主机应位于同一网络中。[1]
在网络内部提供类似的方案也是有意义的,因为它可能由数百个较小的网络集合组成,其中最小的单元是物理网络,如以太网。因此,IP 允许您将一个 IP 网络细分为多个子网。
子网负责将数据报传递到特定范围的 IP 地址。它是位字段拆分概念的扩展,如 A 类、B 类和 C 类。但是,网络部分现在被扩展为包括来自主机部分的一些位。被解释为子网号的位数由所谓的子网掩码或网络掩码给出。这也是一个 32 位数字,它指定 IP 地址网络部分的位掩码。
格劳乔·马克思大学的校园网络就是这样一个网络的例子。它具有 B 类网络号 149.76.0.0,因此其网络掩码为 255.255.0.0。
在内部,GMU 的校园网络由几个较小的网络组成,例如各个部门的 LAN。因此,IP 地址范围被划分为 254 个子网,从 149.76.1.0 到 149.76.254.0。例如,理论物理系被分配了 149.76.12.0。校园骨干网本身就是一个网络,并被赋予 149.76.1.0。这些子网共享相同的 IP 网络号,而第三个八位字节用于区分它们。因此,它们将使用 255.255.255.0 的子网掩码。
图 2-1 显示了当地址被视为普通的 B 类网络以及与子网划分一起使用时,如何以不同的方式解释 149.76.12.4,即 quark 的地址。
值得注意的是,子网划分(生成子网的技术)只是网络的内部划分。子网由网络所有者(或管理员)生成。通常,创建子网是为了反映现有边界,无论是物理边界(两个以太网之间)、管理边界(两个部门之间)还是地理边界(两个位置之间),并且每个子网的权限都委托给某个联系人。但是,这种结构仅影响网络的内部行为,并且对外部世界完全不可见。
子网划分不仅对组织有利;它通常也是硬件边界的自然结果。给定物理网络(如以太网)上主机的视角非常有限:它只能与它所在的网络的主机通信。所有其他主机只能通过称为网关的专用机器访问。网关是同时连接到两个或多个物理网络并配置为在它们之间切换数据包的主机。
图 2-2 显示了格劳乔·马克思大学 (GMU) 的部分网络拓扑。同时位于两个子网上的主机显示了两个地址。
不同的物理网络必须属于不同的 IP 网络,IP 才能识别主机是否在本地网络上。例如,网络号 149.76.4.0 保留给数学 LAN 上的主机。当向 quark 发送数据报时,erdos 上的网络软件立即从 IP 地址 149.76.12.4 中看到目标主机位于不同的物理网络上,因此只能通过网关(默认情况下为 sophus)访问。
sophus 本身连接到两个不同的子网:数学系和校园骨干网。它通过不同的接口访问每个子网,eth0和fddi0, 分别。现在,我们应该为其分配哪个 IP 地址?我们应该在子网 149.76.1.0 上为其分配一个,还是在 149.76.4.0 上分配一个?
答案是:“两者都分配”。sophus 已被分配地址 149.76.1.1 以在 149.76.1.0 网络上使用,以及地址 149.76.4.1 以在 149.76.4.0 网络上使用。必须为网关所属的每个网络分配一个 IP 地址。这些地址以及相应的网络掩码与访问子网的接口绑定。因此,sophus 的接口和地址映射将如下所示
最后一个条目描述了环回接口lo,我们之前谈到过。
通常,您可以忽略将地址附加到主机或其接口之间的细微差别。对于仅在一个网络上的主机,例如 erdos,您通常会将主机称为具有某个 IP 地址,但严格来说,具有此 IP 地址的是以太网接口。只有当您引用网关时,这种区别才真正重要。
现在我们将注意力集中在 IP 如何选择要使用的网关,以将数据报传递到远程网络。
我们已经看到,当给定发送给 quark 的数据报时,erdos 会检查目标地址,并发现它不在本地网络上。erdos 因此将数据报发送到默认网关 sophus,现在 sophus 面临着相同的任务。sophus 识别出 quark 不在其直接连接的任何网络上,因此它必须找到另一个网关来转发它。正确的选择将是 niels,物理系的网关。sophus 因此需要信息来将目标网络与合适的网关关联起来。
IP 为此任务使用一个表,该表将网络与可以通过其访问的网关相关联。通常也必须提供一个包罗万象的条目(默认路由);这是与网络 0.0.0.0 关联的网关。所有目标地址都与此路由匹配,因为不需要匹配 32 位中的任何一位,因此发送到未知网络的数据包将通过默认路由发送。在 sophus 上,该表可能如下所示
网络 | 网络掩码 | 网关 | 接口 |
---|---|---|---|
149.76.1.0 | 255.255.255.0 | - | fddi0 |
149.76.2.0 | 255.255.255.0 | 149.76.1.2 | fddi0 |
149.76.3.0 | 255.255.255.0 | 149.76.1.3 | fddi0 |
149.76.4.0 | 255.255.255.0 | - | eth0 |
149.76.5.0 | 255.255.255.0 | 149.76.1.5 | fddi0 |
… | … | … | … |
0.0.0.0 | 0.0.0.0 | 149.76.1.2 | fddi0 |
如果您需要使用到 sophus 直接连接的网络的路由,则不需要网关;此处的网关列包含一个连字符。
识别特定目标地址是否与路由匹配的过程是一个数学运算。该过程非常简单,但需要理解二进制算术和逻辑:如果网络地址与网络掩码进行逻辑与运算后精确等于目标地址与网络掩码进行逻辑与运算,则路由与目标地址匹配。
翻译:如果网络掩码指定的网络地址的位数(从最左边的位开始,即地址的第一个字节的高位)与目标地址中相同数量的位数匹配,则路由匹配。
当 IP 实现搜索到目标的最佳路由时,它可能会找到许多与目标地址匹配的路由条目。例如,我们知道默认路由与每个目标都匹配,但发往本地连接网络的数据报也会匹配其本地路由。IP 如何知道使用哪个路由?这就是网络掩码发挥重要作用的地方。虽然两条路由都与目标匹配,但其中一条路由的网络掩码比另一条路由大。我们之前提到过,网络掩码用于将我们的地址空间划分为更小的网络。网络掩码越大,目标地址的匹配就越具体;在路由数据报时,我们应始终选择具有最大网络掩码的路由。默认路由的网络掩码为零位,而在上面呈现的配置中,本地连接网络的网络掩码为 24 位。如果数据报与本地连接的网络匹配,则它将被路由到适当的设备,而不是遵循默认路由,因为本地网络路由与更多的位匹配。唯一将通过默认路由路由的数据报是不匹配任何其他路由的数据报。
您可以通过多种方式构建路由表。对于小型 LAN,通常最有效的方法是手动构建路由表,并在启动时使用 route 命令将其提供给 IP(请参阅 第 5 章)。对于较大的网络,路由表由路由守护程序在运行时构建和调整;这些守护程序在网络的中心主机上运行,并交换路由信息以计算成员网络之间的“最佳”路由。
根据网络的大小,您需要使用不同的路由协议。对于自治系统(如格劳乔·马克思校园)内部的路由,使用内部路由协议。其中最突出的是路由信息协议 (RIP),它由 BSD routed 守护程序实现。对于自治系统之间的路由,必须使用外部路由协议,如外部网关协议 (EGP) 或 边界网关协议 (BGP);这些协议,包括 RIP,已在康奈尔大学的 gated 守护程序中实现。
我们依靠动态路由根据跳数来选择到达目标主机或网络的最佳路由。跳数是数据报在到达主机或网络之前必须经过的网关。路由越短,RIP 对其评级越高。具有 16 跳或更多跳的非常长的路由被视为不可用并被丢弃。
RIP 管理本地网络内部的路由信息,但您必须在所有主机上运行 gated。在启动时,gated 检查所有活动网络接口。如果存在多个活动接口(不包括环回接口),它会假定主机正在多个网络之间切换数据包,并将主动交换和广播路由信息。否则,它将仅被动地接收 RIP 更新并更新本地路由表。
当从本地路由表广播信息时,gated 从与路由表条目关联的所谓度量值计算路由的长度。此度量值由系统管理员在配置路由时设置,应反映实际路由成本。[2] 因此,到主机直接连接的子网的路由的度量值应始终为零,而通过两个网关的路由的度量值应为二。如果您不使用 RIP 或 gated,则不必担心度量值。
[1] | 自治系统稍微更通用。它们可能包含多个 IP 网络。 |
[2] | 路由的成本可以简单地理解为到达目的地所需的跳数。在复杂的网络设计中,正确计算路由成本可能是一门精细的艺术。 |