IP 选路

    选路是 I P 最 重 要 的 功 能 之 一 。需 要 进 行 选 路 的 数 据 报可以由本地主机产生,也可以由其他主机产生。在后

一种情况下,主机必须配置成一个路由器,否则通过网络接口接收到的数据报,如果目的地址不是本机就要被丢弃(例如,悄无声息地被丢弃)。 

        路 由 守 护 程 序 ( d a e m o n ),   通 常 这 是 一 个 用 户 进 程 。 在U n i x 系统中,大多数普通的守护程序都是路由程序和网关程序(术语 d a e m o n 指 的 是 运 行 在 后台的进程,它代表整个系统执行某些操作。 d a e m o n 一 般 在 系 统 引 导 时 启 动 , 在 系 统 运 行 期 间一直存在)。在某个给定主机上运行何种路由协议,如何在相邻路由器上交换选路信息,以及选路协议是如何工作的,所有这些问题都是非常复杂的,其本身就可以用整本书来加以讨论。

        所 示 的 路 由 表 经 常 被 I P 访 问 ( 在 一 个 繁 忙 的 主 机 上 , 一 秒 钟 内 可 能 要 访 问 几 百 次 ),   但 是 它 被 路 由 守 护 程 序 更 新 的 频 度 却 要 低 得 多 ( 可 能 大 约 3 0 秒 种 一 次 )。 当 接 收 到 I C M P 重定向,报文时,路由表也要被更新


 

 选路的原理   

       开始讨论 I P 选 路 之 前 , 首 先 要 理 解 内 核 是 如 何 维 护 路 由 表 的 。 路 由 表 中 包 含 的 信 息 决 定了 IP 层所做的所有决策。

我们列出了 I P 搜索路由表的几个步骤:
1) 搜索匹配的主机地址;
2) 搜索匹配的网络地址;
3) 搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为 0)。匹配主机地址步骤始终发生在匹配网络地址步骤之前。

       I P 层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。这区别于选路策略,它只是一组决定把哪些路由放入路由表的规则。 I P 执 行 选 路 机 制 , 而 路由守护程序则一般提供选路策略。 

简单路由表   

首先来看一看一些典型的主机路由表。在主机svr4上,我们先执行带-r选项的netstat命令列出路由表,然后以-n选项再次执行该命令,以数字格式打印出IP地址(我们这样做是因为路由表 中 的 一 些 表 项 是 网 络 地 址 , 而 不 是 主 机 地 址 。 如 果 没 有 - n 选项, n e t s t a t 命 令 将 搜 索 文 件/ e t c / n e t w o r k s 并 列 出 其 中 的 网 络 名 。 这 样 会 与 另 一 种 形 式 的 名 字 网 络 名 加 主 机 名 相 混 淆 )。 



1 行 说 明 , 如 果 目 的 地 是 1 4 0 . 2 5 2 . 1 3 . 6 5 ( s l i p 主机), 那 么 网 关 ( 路 由 器 ) 将 把 分 组 转发给 1 4 0 . 2 5 2 . 1 3 . 3 5 ( b s d i )。 这 正 是 我 们 所 期 望 的 , 因 为 主 机 s l i p 通过 S L I P 链路与 b s d i 相连接,而 b s d i 与 该 主 机 在 同 一 个 以 太 网 上 。

对 于 一 个 给 定 的 路 由 器 , 可 以 打 印 出 五 种 不 同 的 标 志 ( f l a g ):
U 该路由可以使用。
G 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地是直接相连的。
H 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。如果没有设置该

标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个网络号,或者网

络号与子网号的组合。
D 该路由是由重定向报文创建的
M 该路由已被重定向报文修改

标志G是非常重要的,因为由它区分了间接路由和直接路由(对于直接路由来说是不设置

标志 G 的)。 其 区 别 在 于 , 发 往 直 接 路 由 的 分 组 中 不 但 具 有 指 明 目 的 端 的 I P 地 址 , 还 具 有 其 链路 层 地 址 ( 见 图 3 - 3 )。 当 分 组 被 发 往 一 个 间 接 路 由 时 , I P 地 址 指 明 的 是 最 终 的 目 的 地 , 但 是链 路 层 地 址 指 明 的 是 网 关 ( 即 下 一 站 路 由 器 )。 我 们 在 图 3 - 4 已 看 到 这 样 的 例 子 。 在 这 个 路 由表 例 子 中 , 有 一 个 间 接 路 由 ( 设 置 了 标 志 G ), 因 此 采 用 这 一 项 路 由 的 分 组 其 I P 地 址 是 最 终 的目的地( 1 4 0 . 2 5 2 . 1 3 . 6 5 ),但是其链路层地址必须对应于路由器 1 4 0 . 2 5 2 . 1 3 . 3 5 。 

 

理解G和H标志之间的区别是很重要的。 G标志区分了直接路由和间接路由,如上所述。但是 H 标 志 表 明 , 目 的 地 址 ( n e t s t a t 命 令 输 出 第 一 行 ) 是 一 个 完 整 的 主 机 地 址 。 没 有 设 置H 标 志 说 明 目 的 地 址 是 一 个 网 络 地 址 ( 主 机 号 部 分 为 0 )。 当 为 某 个 目 的 I P 地 址 搜 索 路 由 表 时 ,主机地址项必须与目的地址完全匹配,而网络地址项只需要匹配目的地址的网络号和子网号就可以了。另外,大多数版本的 n e t s t a t 命 令 首 先 打 印 出 所 有 的 主 机 路 由 表 项 , 然 后 才 是 网络路由表项。 

参考记数 R e f c n t ( R e f e r e n c e c o u n t ) 列 给 出 的 是 正 在 使 用 路 由 的 活 动 进 程 个 数 。 面 向 连 接的协议如 T C P 在 建 立 连 接 时 要 固 定 路 由 。 如 果 在 主 机 s v r 4 s l i p之间建立 T e l n e t 连 接 , 可 以看 到 参 考 记 数 值 变 为 1 。 建 立 另 一 个 Te l n e t 连 接 时 , 它 的 值 将 增 加 为 2 , 依 此 类 推 。

下 一 列 (“ u s e ”) 显 示 的 是 通 过 该 路 由 发 送 的 分 组 数 。 如 果 我 们 是 这 个 路 由 的 唯 一 用 户 ,那么运行 p i n g 程序发送 5 个分组后,它的值将变为 5 。最后一列( i n t e r f a c e ) 是 本 地 接 口 的 名字。 


输出的第 2 行 是 环 回 接 口 ( 2 . 7 节), 它 的 名 字 始 终 为 l o 0 。 没 有 设 置 G 标 志 , 因 为 该 路 由 不是一个网关。 H 标志说明目的地址( 1 2 7 . 0 . 0 . 1 ) 是 一 个 主 机 地 址 , 而 不 是 一 个 网 络 地 址 。 由 于没有设置 G 标志,说明这是一个直接路由,网关列给出的是外出 I P 地址。

输出的第 3行是默认路由。每个主机都有一个或多个默认路由。这一项表明,如果在表中没 有 找 到 特 定 的 路 由 , 就 把 分 组 发 送 到 路 由 器 1 4 0 . 2 5 2 . 1 3 . 3 3 ( s u n 主机)。 这 说 明 当 前 主 机( s v r 4) 利 用 这 一 个 路 由 表 项 就 可 以 通 过 I n t e r n e t 经路由器 s u n (及其 S L I P 链 路 ) 访 问 其 他 的 系统。建立默认路由是一个功能很强的概念。该路由标志( U G ) 表 明 它 是 一 个 网 关 , 这 是 我 们

所期望的。 

这里,我们有意称sun为路由器而不是主机,因为它被当作默认路由器来使用,它发挥的是IP转发功能,而不是主机功能。

Host Requirements RFC文档特别说明,IP层必须支持多个默认路由。但是,许多实现系统并不支持这一点。当存在多个默认路由时,一般的技术就成为它们周围的知更鸟了,例如,Solaris 2.2就是这样做的。 

输 出 中 的 最 后 一 行 是 所 在 的 以 太 网 。 H 标 志 没 有 设 置 , 说 明 目 的 地 址 ( 1 4 0 . 2 5 2 . 1 3 . 3 2 )是一 个 网 络 地 址 , 其 主 机 地 址 部 分 设 为 0 。 事 实 上 , 是 它 的 低 5 位设为 0 (见图 3 - 1 1 )。 由 于 这 是一 个 直 接 路 由 ( G 标 志 没 有 被 设 置 ), 网 关 列 指 出 的 I P 地 址 是 外 出 地 址 。

n e t s t a t 命令输出的最后一项还隐含了另一个信息,那就是目的地址( 1 4 0 . 2 5 2 . 1 3 . 3 2 )的子网掩码。如果要把该目的地址与 1 4 0 . 2 5 2 . 1 3 . 3 3 进 行 比 较 , 那 么 在 比 较 之 前 首 先 要 把 它 与目的地址掩码( 0 x f ffff f e 0 , 3 . 7 节 ) 进 行 逻 辑 与 。 由 于 内 核 知 道 每 个 路 由 表 项 对 应 的 接 口 , 而且每个接口都有一个对应的子网掩码,因此每个路由表项都有一个隐含的子网掩码。 

主机路由表的复杂性取决于主机所在网络的拓扑结构。

1) 最简单的(也是最不令人感兴趣的)情况是主机根本没有与任何网络相连。 T C P / I P 协议仍然能用于这样的主机,但是只能与自己本身通信!这种情况下的路由表只包含环回接口一项。

2) 接下来的情况是主机连在一个局域网上,只能访问局域网上的主机。这时路由表包含两项:一项是环回接口,另一项是局域网(如以太网)。

3) 如 果 主 机 能 够 通 过 单 个 路 由 器 访 问 其 他 网 络 ( 如 I n t e r n e t ) 时 , 那 么 就 要 进 行 下 一 步 。 

一般情况下增加一个默认表项指向该路由器。
4) 如果要新增其他的特定主机或网络路由,那么就要进行最后一步。在我们的例子中,

到主机 s l i p 的 路 由 要 通 过 路 由 器 b s d i 就 是 这 样 的 例 子 。

我们根据上述 I P 操 作 的 步 骤 使 用 这 个 路 由 表 为 主 机 s v r 4 上 的 一 些 分 组 例 子 选 择 路 由 。
1) 假 定 目 的 地 址 是 主 机 s u n , 1 4 0 . 2 5 2 . 1 3 . 3 3 。 首 先 进 行 主 机 地 址 的 匹 配 。 路 由 表 中 的 两

个主机地址表项( s l i p l o c a l h o s t ) 均 不 匹 配 , 接 着 进 行 网 络 地 址 匹 配 。 这 一 次 匹 配 成功 , 找 到 表 项 1 4 0 . 2 5 2 . 1 3 . 3 2 ( 网 络 号 和 子 网 号 都 相 同 ), 因 此 使 用 e m d 0 接 口 。 这 是 一 个 直 接路由,因此链路层地址将是目的端的地址。

2) 假 定 目 的 地 址 是 主 机 s l i p , 1 4 0 . 2 5 2 . 1 3 . 6 5 。 首 先 在 路 由 表 搜 索 主 机 地 址 , 并 找 到 一 个匹配地址。这是一个间接路由,因此目的端的 I P 地址仍然是 1 4 0 . 2 5 2 . 1 3 . 6 5, 但 是 链 路 层 地 址必须是网关 1 4 0 . 2 5 2 . 1 3 . 6 5 的 链 路 层 地 址 , 其 接 口 名 为 e m d 0

3) 这一次我们通过 I n t e r n e t 给主机 a w . c o m ( 1 9 2 . 2 0 7 . 11 7 . 2 ) 发 送 一 份 数 据 报 。 首 先 在 路由表中搜索主机地址,失败后进行网络地址匹配。最后成功地找到默认表项。该路由是一个间接路由,通过网关 1 4 0 . 2 5 2 . 1 3 . 3 3 ,并使用接口名为 e m d 0

4) 在我们最后一个例子中,我们给本机发送一份数据报。有四种方法可以完成这件事,如用主机名、主机 I P 地址、环回名或者环回 I P 地址: 

ftp svr4
ftp 140.252.13.34ftp localhost
ftp 127.0.0.1

在 前 两 种 情 况 下 , 对 路 由 表 的 第 2 次 搜 索 得 到 一 个 匹 配 的 网 络 地 址 1 4 0 . 2 5 2 . 1 3 . 3 2 ,并把 I P报 文 传 送 给 以 太 网 驱 动 程 序 。 正 如 图 2 - 4 所 示 的 那 样 , I P 报 文 中 的 目 的 地 址 为 本 机 I P 地址,因此报文被送给环回驱动程序,然后由驱动程序把报文放入 I P 输 出 队 列 中 。

在后两种情况下,由于指定了环回接口的名字或 I P 地 址 , 第 一 次 搜 索 就 找 到 匹 配 的 主 机地址,因此报文直接被送给环回驱动程序,然后由驱动程序把报文放入 I P 输 出 队 列 中 。

上述四种情况报文都要被送给环回驱动程序,但是采用的两种路由决策是不相同的。 


初始化路由表   


我们从来没有说过这些路由表是如何被创建的。每当初始化一个接口时(通常是用
i f c o n f i g 命 令 设 置 接 口 地 址 ), 就 为 接 口 自 动 创 建 一 个 直 接 路 由 。 对 于 点 对 点 链 路 和 环 回 接 口来说,路由是到达主机(例如,设置 H标志)。对于广播接口来说,如以太网,路由是到达网络。

到达主机或网络的路由如果不是直接相连的,那么就必须加入路由表。一个常用的方法是 在 系 统 引 导 时 显 式 地 在 初 始 化 文 件 中 运 行 r o u t e 命令。在主机 s v r 4 上 , 我 们 运 行 下 面 两 个 命令来添加路由表中的表项:

route add default sun 1route add slip bsdi 1

3 个参数( d e f a u l t s l i p ) 代 表 目 的 端 , 第 4 个 参 数 代 表 网 关 ( 路 由 器 ), 最 后 一 个参数代表路由的度量 ( m e t r i c ) r o u t e 命令在度量值大于 0 时要为该路由设置 G 标 志 , 否 则 , 当耗费值为 0时就不设置 G标志。 

不幸的是,几乎没有系统愿意在启动文件中包含route命令。在4.4BSD和BSD/386系 统 中 , 启 动 文 件 是 / e t c / n e t s t a r t ;在 S V R 4 系 统 中 , 启 动 文 件 是/ e t c / i n e t / r c . i n e t;在 S o l a r i s 2 . x 中 , 启 动 文 件 是 / e t c / r c 2 . d / S 6 9 i n e t ;在SunOS 4.1.x中,启动文件是/etc/rc.local;而AIX 3.2.2则使用文件/etc/rc.net。

一些系统允许在某个文件中指定默认的路由器,如 / e t c / d e f a u l t r o u t e r 。 于 是 在 每次重新启动系统时都要在路由表中加入该默认项。

初始化路由表的其他方法是运行路由守护程序或 者 用 较 新 的 路 由 器 发 现 协 议。 

较复杂的路由表   

在 我 们 的 子 网 上 , 主 机 s u n 是 所 有 主 机 的 默 认 路 由 器 , 因 为 它 有 拨 号 S L I P 链路连接到

I n t e r n e t 上 ( 参 见 扉 页 前 图 )。 




前 两 项 与 主 机 s v r 4 的 前 两 项 一 致 : 通 过 路 由 器 b s d i 到达 s l i p 的 特 定 主 机 路 由 , 以 及 环回路由。

第3行是新加的。这是一个直接到达主机的路由 (没有设置G标志,但设置了H标志),对应于点对点的链路,即 S L I P 接口。如果我们把它与 i f c o n f i g 命令的输出进行比较:

sun % ifconfig sl0
s l 0 : f l a g s = 1 0 5 1 <U P , P O I N T O P O I N T , R U N N I N G >

inet 140.252.1.29 --> 140.252.1.183 netmask ffffff00

可 以 发 现 路 由 表 中 的 目 的 地 址 就 是 点 对 点 链 路 的 另 一 端 ( 即路由器 n e t b ), 网 关 地 址 为 外 出接 口 的 本 地 I P 地址 ( 1 4 0 . 2 5 2 . 1 . 2 9 ) (前 面 已 经 说 过 , n e t s t a t 为 直 接 路 由 打 印 出 来 的 网 关 地 址 就是本地接口所用的 I P 地址 )

默认的路由表项是一个到达网络的间接路由 (设置了G标志,但没有设置H标志),这正是我 们 所 希 望 的 。 网 关 地 址 是 路 由 器 的 地 址 ( 1 4 0 . 2 5 2 . 1 . 1 8 3 , S L I P 链 路 的 另 一 端 ), 而不是 S L I P 链路的本地 I P 地址 ( 1 4 0 . 2 5 2 . 1 . 2 9 ) 。 其 原 因 还 是 因 为 是 间 接 路 由 , 不 是 直 接 路 由 。

还 应 该 指 出 的 是 , n e t s t a t 输出的第 3 和第 4 ( 接口名为 s l 0 ) S L I P 软 件 在 启 动 时 创 建 ,并在关闭时删除 .

 

没有到达目的地的路由   

       我们所有的例子都假定对路由表的搜索能找到匹配的表项,即使匹配的是默认项。如果路由表中没有默认项,而又没有找到匹配项,这时会发生什么情况呢?

结 果 取 决 于 该 I P 数 据 报 是 由 主 机 产 生 的 还 是 被 转 发 的 ( 例 如 , 我 们 就 充 当 一 个 路 由 器 )。如果数据报是由本地主机产生的,那么就给发送该数据报的应用程序返回一个差错,或者是“主机不可达差错”或者是“网络不可达差错”。如果是被转发的数据报,那么就给原始发送 端发送一份 I C M P 主机不可达的差错报文。下一节将讨论这种差错。    

ICMP主机与网络不可达差错   

        当路由器收到一份 I P 数据报但又不能转发时,就要发送一份 I C M P “ 主 机 不 可 达 ” 差 错 报文( I C M P 主机不可达报文的格式如图 6 - 1 0 所示)。 可 以 很 容 易 发 现 , 在 我 们 的 网 络 上 把 接 在路由器 s u n 上 的 拨 号 S L I P 链 路 断 开 , 然 后 试 图 通 过 该 S L I P 链 路 发 送 分 组 给 任 何 指 定 s u n 为默认路由器的主机。 

较老版本的 B S D 产 生 一 个 主 机 不 可 达 或 者 网 络 不 可 达 差 错 , 这 取 决 于 目 的 端 是 否处于一个局域子网上。4.4 BSD只产生主机不可达差错。 

转发或不转发   

前面我们已经提过几次,一般都假定主机不转发 I P 数 据 报 , 除 非 对 它 们 进 行 特 殊 配 置 而作为路由器使用。如何进行这样的配置呢?

大多数伯克利派生出来的系统都有一个内核变量 i p f o r w a r d i n g , 或 其 他 类 似 的 名 字(参见附录 E )。一些系统(如 B S D / 3 8 6 S V R 4)只有在该变量值不为 0 的情况下才转发数据报。

SunOS 4.1.x允许该变量可以有三个不同的值:- 1表示始终不转发并且始终不改变它的值; 0表示默认条件下不转发,但是当打开两个或更多个接口时就把该值设为 1;1表示始终转发。Solaris 2.x把这三个值改为0(始终不转发)、1(始终转发)和2(在打开两个或更多个接口时才转发)。

较早版本的 4 . 2 B S D主 机 在 默 认 条 件 下 可 以 转 发 数 据 报 , 这 给 没 有 进 行 正 确 配 置 的 系 统 带来了许多问题。这就是内核选项为什么要设成默认的“始终不转发”的原因,除非系统管理员进行特殊设置。 


ICMP重定向差错   

I P 数 据 报 应 该 被 发 送 到 另 一 个 路 由 器 时 , 收 到 数 据 报 的 路 由 器 就 要 发 送 I C M P 重定向差错报文给 I P 数据报的发送端。这在概念上是很简单的,正如图 9 - 3所 示 的 那 样 。 只 有 当 主 机 可以 选 择 路 由 器 发 送 分 组 的 情 况 下 , 我 们 才 可 能 看 到 I C M P 重 定 向 报 文 ( 回 忆 我 们 在 图 7 - 6 中看过的例子)。 

1) 我 们 假 定 主 机 发 送 一 份 I P 数据报给 R 1 。 这 种 选 路 决 策 经 常 发 生 , 因 为 R 1 是 该 主 机 的 默认路由。

2 ) R 1 收到数据报并且检查它的路由表,发现 R 2 是 发 送 该 数 据 报 的 下 一 站 。 当 它 把 数 据 报发送给 R 2 时, R 1 检 测 到 它 正 在 发 送 的 接 口 与 数 据 报 到 达 接 口 是 相 同 的 ( 即 主 机 和 两 个 路 由 器所在的 L A N)。这样就给路由器发送重定向报文给原始发送端提供了线索。

3) R1 发送一份 I C M P 重 定 向 报 文 给 主 机 , 告 诉 它 以 后 把 数 据 报 发 送 给 R 2 而不是 R 1 。 


重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。主机启动时路由表 中 可 以 只 有 一 个 默 认 表 项 ( 在 图 9 - 3 所 示 的 例 子 中 , 为 R 1 R 2 )。 一 旦 默 认 路 由 发 生 差 错 ,默认路由器将通知它进行重定向,并允许主机对路由表作相应的改动。 I C M P 重定向允许T C P / I P 主机在进行选路时不需要具备智能特性,而把所有的智能特性放在路由器端。显然,在我们的例子中, R 1 R2 必须知道有关相连网络的更多拓扑结构的信息,但是连在 L A N 上的所有主机在启动时只需一个默认路由,通过接收重定向报文来逐步学习。 

I C M P 重 定 向 报 文 的 格 式 如 图 所示。    


关于 I C M P 重 定 向 报 文 有 很 多 规 则 。 首 先 , 重 定 向 报 文 只 能 由 路 由 器 生 成 , 而 不 能 由 主 机生成。另外,重定向报文是为主机而不是为路由器使用的。假定路由器和其他一些路由器共同参与某一种选路协议,则该协议就能消除重定向的需要(这意味着在图 9 - 1 中 的 路 由 表 应 该 消除或者能被选路守护程序修改,或者能被重定向报文修改,但不能同时被二者修改)。   

4 . 4 B S D 系统中,当主机作为路由器使用时,要进行下列检查。在生成 I C M P 重 定 向 报 文

之前这些条件都要满足。
1) 出接口必须等于入接口。
2) 用 于 向 外 传 送 数 据 报 的 路 由 不 能 被 I C M P 重 定 向 报 文 创 建 或 修 改 过 , 而 且 不 能 是 路 由 器

的默认路由。
3) 数据报不能用源站选路来转发。
4) 内核必须配置成可以发送重定向报文。

内核变量取名为 i p _ s e n d r e d i r e c t s 或其他类似的名字(参见附录 E )。大多数当前的系统(例如 B S D、 S u n O S 4 . 1 . x S o l a r i s 2 . x A I X 3 . 2 . 2 )在默认条件下都设置该变量,使系统可以发送重定向报文。其他系统如SVR4则关闭了该项功能。

另外,一台 4 . 4 B S D 主机收到 I C M P 重 定 向 报 文 后 , 在 修 改 路 由 表 之 前 要 作 一 些 检 查 。 这 是为了防止路由器或主机的误操作,以及恶意用户的破坏,导致错误地修改系统路由表。

1) 新的路由器必须直接与网络相连接。
2) 重定向报文必须来自当前到目的地所选择的路由器。
3) 重定向报文不能让主机本身作为路由器。
4) 被修改的路由必须是一个间接路由。关于重定向最后要指出的是,路由器应该发送的只是对主机的重定向(代码 1或3,如图

9 - 5 所示), 而 不 是 对 网 络 的 重 定 向 。 子 网 的 存 在 使 得 难 于 准 确 指 明 何 时 应 发 送 对 网 络 的 重 定向而不是对主机的重定向。只当路由器发送了错误的类型时,一些主机才把收到的对网络的重定向当作对主机的重定向来处理。 


ICMP路由器发现报文   

在本章前面已提到过一种初始化路由表的方法,即在配置文件中指定静态路由。这种方法经常用来设置默认路由。另一种新的方法是利用 I C M P 路 由 器 通 告 和 请 求 报 文 。 

一般认为,主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应地更新它们的路由表。 


R F C 1 2 5 6 [ D e e r i n g 1 9 9 1 ] 确定了这两种 I C M P 报文的格式。 I C M P 路 由 器 请 求 报 文 的 格 式 如图 9 - 6 所示。 I C M P 路 由 器 通 告 报 文 的 格 式 如 图 9 - 7 所示。 

路由器在一份报文中可以通告多个地址。地址数指的是报文中所含的地址数。地址项大小指的是每个路由器地址 32 bit字的数目,始终为 2。生存期指的是通告地址有效的时间(秒数)。 



接下来是一对或多对 I P 地址和优先级。 I P 地 址 必 须 是 发 送 路 由 器 的 某 个 地 址 。 优 先 级 是一个有符号的 3 2 b i t 整数,指出该 I P 地 址 作 为 默 认 路 由 器 地 址 的 优 先 等 级 , 这 是 与 子 网 上 的 其他路由器相比较而言的。值越大说明优先级越高。优先级为 0 x 8 0 0 0 0 0 0 0 说 明 对 应 的 地 址 不 能作为默认路由器地址使用,尽管它也包含中通告报文中。优先级的默认值一般为 0。 

路由器操作   

当路由器启动时,它定期在所有广播或多播传送接口上发送通告报文。准确地说,这些通告报文不是定期发送的,而是随机传送的,以减小与子网上其他路由器发生冲突的概率。一般每两次通告间隔 4 5 0 秒和 6 0 0 秒。一份给定的通告报文默认生命周期是 3 0 分钟。

使用生命周期域的另一个时机是当路由器上的某个接口被关闭时。在这种情况下,路由器可以在该接口上发送最后一份通告报文,并把生命周期值设为 0。

除了定期发送主动提供的通告报文以外,路由器还要监听来自主机的请求报文,并发送路由器通告报文以响应这些请求报文。

如果子网上有多台路由器,由系统管理员为每个路由器设置优先等级。例如,主默认路由器就要比备份路由器具有更高的优先级。 

主机操作   

主机在引导期间一般发送三份路由器请求报文,每三秒钟发送一次。一旦接收到一个有效的通告报文,就停止发送请求报文。

主机也监听来自相邻路由器的请求报文。这些通告报文可以改变主机的默认路由器。另外,如果没有接收到来自当前默认路由器的通告报文,那么默认路由器会超时。

只要有一般的默认路由器,该路由器就会每隔 1 0 分钟发送通告报文,报文的生命周期是3 0 分钟。这说明主机的默认表项是不会超时的,即使错过一份或两份通告报文。 

实现   

路由器发现报文一般由用户进程(守护程序)创建和处理。这样,在图 9 - 1 中 就 有 另 一 个    

修改路由表的程序,尽管它只增加或删除默认表项。守护程序必须把它配置成一台路由器或

主机来使用。 

小结   

I P 路由操作对于运行 T C P / I P 的 系 统 来 说 是 最 基 本 的 , 不 管 是 主 机 还 是 路 由 器 。 路 由 表 项的内容很简单,包括: 5 b i t 标志、目的 I P 地 址 ( 主 机 、 网 络 或 默 认 )、下一站路由器的 I P 地址(间接路由)或者本地接口的 I P 地 址 ( 直 接 路 由 ) 及 指 向 本 地 接 口 的 指 针 。 主 机 表 项 比 网 络 表

项具有更高的优先级,而网络表项比默认项具有更高的优先级。
系统产生的或转发的每份
I P 数据报都要搜索路由表,它可以被路由守护程序或 I C M P 重定

向报文修改。系统在默认情况下不转发数据报,除非进行特殊的配置。用 r o u t e 命 令 可 以 进入静态路由,可以利用新 I C M P 路 由 器 发 现 报 文 来 初 始 化 默 认 表 项 , 并 进 行 动 态 修 改 。 主 机 在启动时只有一个简单的路由表,它可以被来自默认路由器的 I C M P 重 定 向 报 文 动 态 修 改 。

在本章中,我们集中讨论了单个系统是如何利用路由表的。在下一章,我们将讨论路由器之间是如何交换路由信息的。 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值