2.1 网络接口
先撇开联网环境中的设备可能不同这一情况。 T C P / I P 定 义 了 一 个 抽 象 接 口 , 所 有 对 设 备 的访问都将通过这一接口。该接口为所有类型的硬件设备提供了同一个操作集,基本上用于 包的收发。
针对准备用于联网的各个外设,内核中都必须有相应的接口。比如,以太网接口即称为
e t h 0 和 e t h 1 , S L I P 接口称为 s l 0 、 s l l , 以 此 类 推 。 在 打 算 针 对 内 核 对 特 定 的 物 理 设 备 命 名 时 , 出于配置上的需要,可使用这些接口名。除此以外,它们没有别的用途。
如果要在 T C P / I P 联网中使用接口,必须为它(它们)分配 I P 地 址 , 藉 此 向 网 络 中 的 其 他 机器标识自己。这个地址不同于上面所提的接口名;打个比喻说,如果把接口比作门,那么, 其 I P 地址就是钉在这扇门上的门牌号。
当然,还需要设立别的设备参数;其中之一便是特定的硬件能够处理的数据报的最大字 节数,也叫作“最大传输单元”或 M T U。其他属性,我们将在后续章节中讨论。
2.2 IP地址
正如前面提到的那样, I P 联网协议能够识别的地址是一个 3 2 位 的 编 号 。 在 网 络 环 境 中 , 为每台机器分配的编号必须是独一无二的。如果你运行的是局域网,而且没有与其他网络进 行 T C P / I P 通信传输,就可以按自己的喜好,为各台机器分配编号。但是,如果运行的是面向 因特网的网站,其编号必须由 ICANN()分配。
为便于理解,I P 地址由四个 8位编号(叫做8位元)组成。比如, q u a r k . p h y s i c s . g r o u c h o . e d u 有 一个 I P 地址是 0 x 9 5 4 C 0 C 0 4 ,该地址表示为 1 4 9 . 7 6 . 1 2 . 4 。 这 一 格 式 就 是 人 们 常 说 的 点 分 四 段 式。
采 用 点 分 四 段 式 的 另 一 个 原 因 是 I P 地 址 由 两 大 部 分 组 成 : 网 络 部 分 ( 即 排 在 前 面 的 8 位元) 和主机部分(其余的)。根据网络的大小,主机编号可大可小。
为适应不同的需求,这里为大家列出了几类 I P 编址,它们定义 I P 地 址 的 不 同 划 分 方 式 :
■ 范围在 1 . 0 . 0 . 0 到 1 2 7 . 0 . 0 . 0 之间的 A 类地址。这类地址的网络部分在第一个 8 位元内。 A 类 编址提供了一个 2 4位的主机编号,也就是说,网络中的主机可以多达 1 6 0 万台。
■ 范围在 1 2 8 . 0 . 0 . 0 和 1 9 1 . 2 5 5 . 0 . 0 之间的 B 类地址。网络部分在前两个 8 位元中。可接纳 16 320个网络,而每个网络可接纳 65 024台主机
■ 范围在 1 9 2 . 0 . 0 . 0 和 2 2 3 . 2 5 5 . 2 5 5 . 0 之间的 C 类 地 址 , 其 网 络 部 分 在 前 三 个 8 位 元 内 。 可 接 纳近 2 0 0 万个网络, 2 5 4 台主机。
■ D 、 E 和 F 类地址的范围在 2 2 4 . 0 . 0 . 0 和 2 5 4 . 0 . 0 . 0 之 间 。 这 几 类 地 址 尚 处 于 实 验 阶 段 , 或 者 是为将来的应用而保留的,不指定任何网络。
回头看看前一章的示例,我们会发现 1 4 9 . 7 6 . 1 2 . 4 ( Q u a r k 的 I P 地址)指的是 B 类网络 1 4 9 . 7 6 . 0 . 0 中的 1 2 . 4 主机。
需要注意的是,有两个地址是保留地址,它们是: 0 . 0 . 0 . 0 和 1 2 7 . 0 . 0 . 0 。前者称为默认路由, 后者称为回送( l o o p b a c k)地址。默认路由和 I P 协 议 对 数 据 报 的 路 由 方 式 有 关 , 它 主 要 用 于 简 化 I P 路由选择信息,详情参见下一小节。回送地址1 2 7 . 0 . 0 . 0 是为本地主机的 I P 通 信 保 留 的 。 通 常, 1 2 7 . 0 . 0 . 1 这 个 地 址 是 分 配 给 本 地 主 机 上 的 特 殊 接 口 的 , 也 就 是 所 谓 的 “ 回 送 接 口 ”
( l o o p b a c k i n t e r f a c e )。 回 送 接 口 就 像 一 个 封 闭 式 的 回 路 。 任 何 自 T C P 或 U D P 传 给 该 接 口 的 I P 包 都将被返回始发地,就像它们刚从某个网络返回一样。有了回送接口,就可以在单机主机上 开发和测试联网效果,利用网络软件了。这类情况并不罕见,比如,许多 U U C P 站 点 根 本 就 没 有 I P 连接功能,但人们仍然想在这些站点上运行 I N N新闻系统。
2.3 地址解析
现在,大家已经了解了 I P 地 址 的 构 成 情 况 , 可 能 还 想 进 一 步 了 解 它 们 是 如 何 用 于 以 太 网 , 为不同主机定址的。毕竟,以太网协议按 6 位 8位元编号(和 I P 地 址 完 全 没 有 关 系 ) 来 识 别 主 机。
是的,我们需要一种机制,能把 I P 地 址 映 射 为 以 太 网 地 址 。 这 就 是 所 谓 的 “ 地 址 解 析 协 议”(简称 A R P )。事实上,A R P 的 使 用 并 不 局 限 于 以 太 网 , 它 还 用 于 其 他 类 型 的 网 络 , 比 如 “ 火 腿 无 线 电 网 ”。 A R P 的 基 本 思 路 源 于 此 : 必 须 在 1 5 0 个 人 当 中 寻 找 一 个 名 为 某 某 的 人 , 大 多
数人都会采用类似的办法— 四处转,高声呼叫他的名字,因为对方听到叫声,肯定会答应。 A R P 想找出与具体 I P 地 址 对 应 的 以 太 网 地 址 时 , 将 利 用 “ 广 播 ” 这 一 以 太 网 特 性 , 这 样 就能将一个数据报同步传递到网络中的各个角落。 A R P 发送的广播数据报中,包含一个 I P 地
址查询。每个收到广播数据报的主机都会将其中的 I P 地 址 和 它 自 己 的 进 行 比 较 , 如 果 相 同 , 就向发出查询的主机返回一个 A R P 应 答 。 这 样 一 来 , 发 出 查 询 的 主 机 就 可 以 从 收 到 的 应 答 中 , 获悉对方的以太网地址。
当然,有些人可能觉得奇怪:全世界的以太网举不胜举,主机是怎样在如此庞大的体系 中找到自己的目标的呢?要解决这一困惑,还需要了解路由选择,有了路由选择,才能够在 网络中找到一台主机的物理位置。这是我们下一小节的主题。
关于 A R P , 我 们 还 有 话 说 。 一 旦 主 机 知 道 了 自 己 想 要 的 以 太 网 地 址 , 它 就 会 把 该 地 址 保 存在它自己的 A R P 缓 冲 区 内 , 这 样 在 下 一 次 查 询 该 地 址 时 , 它 会 直 接 向 目 标 主 机 发 送 数 据 报 。 但是,要想永久性地保留该地址信息是很不明智的;比如说,远程主机的以太网卡可能因为 技 术 上 的 原 因 已 发 生 替 换 , 所 以 你 保 留 的 A R P 条 目 将 毫 无 意 义 。 因 此 , 要 执 行 另 一 次 I P 地址 查询,就应该时不时地丢弃 A R P 缓 冲 区 内 的 条 目 。
有时,还有必要找出与具体以太网地址相关联的 I P 地 址 。 比 如 说 , 想 从 网 络 上 的 一 台 服 务器启动无盘客户机这样的事,在局域网内是家常便饭。但是,无盘客户机事实上根本就没 有任何关于它自己的信息— 除开它自己的以太网地址!所以,它能做的只能是广播一条消 息,请求根服务器将它的 I P 地 址 告 诉 它 。 这 牵 涉 到 另 一 个 协 议 , 名 为 “ 逆 向 地 址 解 析 协 议 ”
(简称 R A R P )。它和 B O O T P 协 议 一 起 , 为 网 络 上 的 无 盘 客 户 机 的 启 动 运 行 定 义 一 个 进 程 。
2.4 IP路由 2.4.1 IP网络
大家可能有这种经历;在写信给某人时,通常会在信封上写明收信人的确切地址,指定 国家、地区、省份,城市以及详细到几栋几号。然后,再把信投入邮箱,邮政服务将把信送 达目的地:先送到指定国家,再由那个国家的邮政服务将其分发到相应的省或地区。邮政服 务的层次结构非常清楚:不管在哪里寄信,本地的邮政主管都知道信件投递路径,并将进行 信件转发,并不注重信件在目标国内的投递方式(注意,邮件投递系统只注重完成任务,而 不管如何去完成任务)。
I P 网络其实与邮件投递系统类似。整个因特网由无数个称为独立系统的网络构成。每个 这样的系统都会在各自的成员主机之间执行路由,所以投递数据报的任务实际上就是找出通 往目标主机所在网络的路径。也就是说,只要数据报被传到特定网络上的任何一台主机,怎 样到达最终的目标主机,则由这个特定网络自行负责。
2.4.2 子网
我们还可以从被分为网络部分和主机部分的 I P 地址中,看出 I P 网 络 的 结 构 。 默 认 情 况 下 , 目标网络(即目标主机所处的网络)是从 I P 地址的网络部分衍生的。所以, I P 网 络 编 号 相 同 的主机应该处于同一个网络内,反之亦然。但一个独立系统中,往往包含不止一个 I P 网络。
由于一个网络可能由上百个小型网络集合而成,各小型网中还有诸如以太网的更小的物 理网络单元,所以,在这种网络内部提供类似于前面的方案是非常有意义的。这样,我们就 可以把 I P 网 络 分 成 若 干 个 子 网 。
子网主要负责从自己所处的 I P 网络,把数据报投到特定范围内的 I P 地址。 A 、 B 或 C 类地 址的识别,是通过 I P 地 址 的 网 络 部 分 来 完 成 的 。 但 是 现 在 的 网 络 编 号 被 扩 展 到 包 含 主 机 部 分 的位数。这些被视作子网编号的位数就是所谓的子网掩码(或网络掩码)所赋予的。它同样 是一个 3 2 位的编号,用于为 I P 地址的网络编号指定位掩码。
G r o u c h o M a r x 大学 ( G M U ) 校 园 网 就 是 一 个 很 好 的 范 例 。 它 采 用 的 是 B 类 地 址 , 其 网 络 编 号 是 1 4 9 . 7 6 . 0 0 ,所以其网络掩码是 2 5 5 . 2 5 5 . 0 . 0 。
从其内部结构来说, G M U 大 学 校 园 网 由 若 干 个 小 型 网 组 成 , 比 如 各 个 系 的 局 域 网 。 所 以 , 这个 I P 网 络 被 分 为 2 5 4 个子网, I P 地址在 1 4 9 . 7 6 . 1 . 0 到 1 4 9 . 7 6 . 2 5 4 . 0 之 间 。 举 个 例 子 来 说 , 理 论 物 理 系 分 配 的 I P 地址是 1 4 9 . 7 6 . 1 2 . 0 。 校 园 主 干 网 的 地 址 是 1 4 9 . 7 6 . 1 . 0 。 这 些 子 网 共 享 同 一 个 I P 编号,其中的第三个 8 位元是用来区分它们的。所以,它们的子网掩码将是 2 5 5 . 2 5 5 . 2 5 5 . 0 。
值得注意的是子网只是一个网络内部分区。子网是由网络拥有者(或管理员)一手炮制 的。通常情况下,子网主要用于反映现有的地址边界,用于各子网间的物理上(两个以太网 之间)、管理上(两个系之间)或地理上的边界。但是,这类结构不仅会影响整个网络的内部 行为,而且子网只能本地识别,其地址仍然被看成是标准的 I P 地址。
2.4.3 网关 子网不仅能带来结构上的好处,还时常用来反映硬件边界。具体物理网络上的主机,比 如以太网,是非常受限的:它能够直接与之交谈的主机只能是本网络内的。要对其他的主机 进行访问,只有通过所谓的“网关”来进行。网关是同时连接两个或两个以上物理网络的主 机,被配置为执行网络间的包交换。
对 I P 网络来说,要想轻松识别主机是否在本地网络,不同的物理网络只能属于不同的 I P 网络。比如,网络编号 1 4 9 . 7 6 . 4 . 0是为数学系局域网上的主机保留的。在向 Q u a r k 发送一个数 据 报 时 , E r d o s 主 机 上 的 网 络 软 件 立 即 就 能 知 道 该 数 据 报 来 自 1 4 9 . 7 6 . 1 2 . 4 这个 I P 地 址 , 而 且 其 目标主机处于另一个物理网络上。因此,这个数据报只能通过一个网关(默认设置是 S o p h u s ) 抵达目的地。
S o p h u s本 身 连 接 了 两 个 子 网 : 数 学 系 的 局 域 网 和 校 园 主 干 网 。 它 分 别 通 过 两 个 不 同 的 接 口( e t h 0 和 f d d i 0 ) 访 问 这 两 个 子 网 。 现 在 , 我 们 为 这 个 网 关 分 配 什 么 样 的 I P 地 址 呢 ? 应 该 根 据 1 4 9 . 7 6 . 1 . 0 子网进行分配,还是根据 1 4 9 . 7 6 . 4 . 0 子 网 进 行 分 配 ?
答案是:两者都要。在提到数学系局域网上的主机时,就应该用 1 4 9 . 7 6 . 4 . 1 这个 I P 地址; 在提及校园主干网上的主机时,就应该用 1 4 9 . 7 6 . 1 . 4 这个地址。
所以,这个网关就有两个 I P 地 址 。 这 两 个 地 址 — 还 有 其 相 应 的 网 络 掩 码 — 都 绑 在 接 口 上 ( 通 过 这 个 接 口 访 问 子 网 )。因此,接口和 S o p h u s 地址之间的对应关系就会像表 2 - 1 列出的 那样。
表 2 - 1 接口和 S o p h u s 地 址 之 间 的 对 应 关 系
最后一条说明的是回送接口 l 0 , 我 们 在 前 面 已 经 介 绍 过 它 。 注 意 , 随 两 个 子 网 上 的 主 机 同 时出现的还有两个地址。
一般说来,把地址附于主机和把地址附于其接口之间有些细微差别,但我们可以忽略它 们之间的差别。对处于同一个网络的主机来说,比如 E r d o s,一般能够很确切地指出主机的 I P 地址是多少。比如说,这是一个以太网接口,它的 I P 地 址 是 这 样 的 。 但 是 在 提 及 网 关 时 , 其 间的区别则是不容忽视的,必须指明地址是附于主机上,还是附于其接口上。
2.5 路由表
接下来的重头戏是:把数据报投到远程网络时, I P 协 议 是 如 何 选 择 网 关 的 。
在此之前,我们曾见过 E r d o s 网关的工作流程:它收到发向 Q u a r k 的 数 据 报 后 , 便 对 其 目 标地址进行检查,并发现其目标主机不在本地网络内。所以,它把该数据报发给默认网关
S o p h u s , 现 在 就 看 网 关 怎 样 运 作 了 。 S o p h u s 识别出 Q u a r k 不 在 它 直 接 连 接 的 任 何 一 个 网 络 内 , 所以,它就开始寻找另一个网关来接替它的工作。于是它选中了 N i e l s, 这 是 通 往 物 理 系 局 域 网的网关。如此一来, S o p h u s 就 需 要 更 多 的 信 息 , 把 目 标 网 络 和 一 个 适 当 的 网 关 关 联 起 用 。
它采用的路由选择信息 I P 实 际 上 就 是 一 个 表 , 把 网 络 和 准 备 抵 达 的 网 关 链 接 起 来 。 一 般 说来,我们必须提供一个 c a t c h - a l l 条目 ( 默认路由 ) ;它是一个与 0 . 0 . 0 . 0 网 络 关 联 在 一 起 的 网 关 。 发向未知网络的所有包都会通过这个默认路由得以发送。针对 S o p h u s 网 关 , 它 的 路 由 表 就 像 表 2 - 2 一样:
对直接与 S o p h u s 连接的网络来说,通向它的路由不需要网关,所以显示的网关条目是“ - ”。
路 由 表 的 建 立 方 式 较 多 。 对 小 型 局 域 网 来 说 , 在 启 动 时 间 ( 参 见 第 3 章),利用 r o u t e 命令, 手工构建路由表并把它们投入 I P 网络,通常是最有效的。对于大型的网络,需要根据路由
d a e m o n, 在 运 行 时 构 建 路 由 表 并 适 时 进 行 调 整 ; 路 由 信 息 运 行 于 网 络 内 的 中 心 主 机 上 , 并 在 其成员网络间实行路由信息交换,从而计算最佳路由。
根据网络的不同大小,可能会用上不同的路由协议。对独立系统(比如 Groucho Marx校 园网)内的路由选择来说,将采用内部路由协议。最优秀的是 R I P 协 议 , 即 路 由 信 息 协 议 。 它 是由 B S D 路由 d a e m o n 实 施 的 。 针 对 独 立 系 统 间 的 路 由 , 则 必 须 使 用 诸 如 E G P ( 外 部 网 关 协 议 ) 或 B G P (边界网关协议)之类的外部路由协议;这类协议(包括 R I P ) 已 经 被 用 于 康 奈 尔 大 学 的通道 d a e m o n 中。
度量值
基于 R I P 的 动 态 路 由 信 息 将 根 据 网 关 “ 跳 ”( h o p ) 数 来 选 定 抵 达 目 标 主 机 或 网 络 的 最 佳 路 由。也就是说,在抵达目标主机或网络之前,数据报必须经过的网关越少,其 R I P 级 别 就 越 高 。 一个网关即为一个跳。超长路由将被视为不可用路由而被丢弃。
要想利用 R I P来管理本地网络中的路由信息,必须在所有主机上运行 g a t e d (通道)。在启 动时,通道将对所有激活的接口进行检查。如果通道发现激活接口不止一个(不包括回送接 口在内),就会假设主机正在进行不同网络间的包交换,从而主动地进行路由信息的交换和广 播。如若不然,它就会被动地接收 R I P 更 新 信 息 , 更 新 本 地 路 由 表 中 的 信 息 。
在广播本地路由表中的信息时,通道将对路由长度进行计算,也就是说用与路由表中的 条目关联在一起的度量值来衡量路由长度。这个度量值是系统管理员在配置路由时设置的, 它应该能反映出利用该路由产生的花费。因为,对主机直接连接的子网来说,通向它的路由 之度量值应该始终为 0,而对通过两个网关的路由,其度量值必须是 2。但需要注意的是,在 没有使用 R I P 或通道时,大可不必理睬度量值。
2.6 Internet控制消息协议
I P 还有一个“伴侣”协议。它就是 I n t e r n e t控制消息协议( I C M P ), 它 是 内 核 联 网 程 序 用 以 与错误消息和其他主机进行通信的协议。比方说,假设我们又回到 E r d o s ,并打算登录到 Q u a r k 的 1 2 3 4 5 端口,但这个端口上没有监听进程。所以,发向这个端口的第一个 T C P 包就会抵达 Q u a r k,网络层将认出这个包并立即向 E r d o s返回一条 I C M P 消息,指出“不能抵达指定端口”。
I C M P 能够识别的消息相当多,而且大多数都能对错误情况进行处理。然而,其中有一条非常有意思的消息,叫作“重定向”消息。它是在有更短路由的情况下,发现另一个主机 正把它用作一个网关时,由路由选择模块生成的。例如,在启动之后, S o p h u s的路由表可能 会不完整,其中包含通向数学系局域网和 F D D I 主干网的路由,以及通向 G r o u c h o计 算 中 心 的 网关( g c c 1 ) 的 默 认 路 由 。 因 此 , 任 何 一 个 发 向 Q u a r k 的 包 都 会 被 发 送 到 g c c 1 , 而 不 是 物 理 系 局域网的 N i e l s 网关。在收到这类包后, g c c 1将注意到这一路由非常糟糕,所以在把包转发到 N i e l s 时,向 S o p h u s返回一条 I C M P 重 定 向 消 息 , 并 将 最 佳 路 由 告 诉 它 。
现在看来,手动配置路由似乎比必须设立路由简单的多。但要注意,单纯依赖于动态路 由方案以及 R I P 和 I C M P 重定向消息,始终不是上策。在验证某些路由信息是否真正可靠时, I C M P 重定向消息和 R I P 能 够 提 供 的 选 择 很 少 , 甚 至 没 有 。 这 样 某 些 恶 意 的 、 一 无 是 处 的 包 将 扰乱你的整个网络通信,甚至可能导致网络瘫痪。鉴于此,联网程序有几个版本,对影响网 络路由的重定向消息进行了处理,令其只能对主机路由进行重定向。
2.7 域名系统 2.7.1 主机名解析
如上所述, T C P / I P 连网协议中的地址利用的是 3 2 位 的 编 号 。 但 是 , 有 几 个 人 能 够 一 口 就 答上来,某某主机的 I P 地 址 是 什 么 呢 ? 因 此 , 主 机 一 般 都 有 一 个 “ 普 通 ” 的 ( 比 如 “ 高 斯 ” 或 “ 异 人 ”) 主 机 名 。 然 后 , 由 特 定 的 应 用 程 序 负 责 找 出 和 这 个 主 机 名 对 应 的 I P 地 址 。 这 个 过 程就叫作“主机名解析”。
对想找出与具体主机名对应的 I P 地址的应用程序来说,不必为主机和 I P 地 址 的 查 找 提 供 它自己的例程。相反地,它依靠大量的库函数进行透明操作,其中有: g e t h o s t b y n a m e ( 3 )和 g e t h o s t b y a d d r ( 3 ) 。按照惯例,这两个函数和大量的相关进程都被归在一个独立的库内,这个 库叫作解析器库; L i n u x 中,它们是属于标准 l i b c 的 。 所 以 说 白 了 , 这 个 函 数 集 合 就 是 “ 解 析 器”。
现在,在像以太网之类的小型网络上,甚至在一个以太网聚簇上,要维护主机名和 I P 地 址的对应表不是件难事。维护信息通常保存在一个名为 / e t c / h o s t s 的 文 件 中 。 在 增 添 或 删 除 主 机名或重新分配 I P 地 址 时 , 只 须 根 据 所 有 的 主 机 , 更 新 主 机 名 即 可 。 显 而 易 见 , 这 对 由 若 干 台机器组成的网络来说,是颇为头疼的。
要 解 决 这 一 问 题 , 方 法 之 一 是 N I S( 网 络 信 息 系 统 ),这是 S u n 公 司 开 发 的 。 简 单 地 说 , 叫 作 Y P 或黄页。 N I S把 主 机 文 件 ( 和 其 他 信 息 ) 保 存 在 一 个 主 要 主 机 的 数 据 库 内 , 客 户 机 如 有 需要,就可从该数据库内提取。但是,这个方法仍然只适用于中等大小的网络,比如局域网, 因为它只对整个主机数据库进行集中维护,并把它分发到各个服务器。
在因特网上,地址信息最初也是保存在一个独立的 H O S T S . T X T 数据库内。这个文件的维护 在“网络信息中心”(N I C)进行,而且必须由所有参与站点进行下载和安装。随着网络的扩大, 这一方案的问题就越来越突出。除了定期安装 H O S T S . T X T涉 及 的 管 理 开 销 外 , 各 个 服 务 器 的 下 载量也越来越大。更为严重的是,所有主机名都必须利用NIC进行注册,以保证主机名不重复。
这就是 1 9 8 4 年新的主机名解析方案出台的原因。它就是域名系统( D N S )。 D N S 是保 罗·莫克皮特里斯设计的,完满解决了上面提到的两大问题。