IP选路与动态选路协议

IP选路

IP选路概念

选路是I P最重要的功能之一。下图是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选路之前,首先要理解内核是如何维护路由表的。路由表中包含的信息决定了I P层所做的所有决策。

I P搜索路由表的几个步骤:

  1. 搜索匹配的主机地址;
  2. 搜索匹配的网络地址;
  3. 搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为 0)。

匹配主机地址步骤始终发生在匹配网络地址步骤之前。

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

简单路由表

首先来看一看一些典型的主机路由表。在主机s v r 4上,我们先执行带-r选项的n e t s t a t命令列出路由表,然后以-n选项再次执行该命令,以数字格式打印出I P地址(我们这样做是因为路由表中的一些表项是网络地址,而不是主机地址。如果没有- 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地址,还具有其链路层地址,如下图所示。
在这里插入图片描述
当分组被发往一个间接路由时, I P地址指明的是最终的目的地,但是链路层地址指明的是网关(即下一站路由器)。在这个路由表例子中,有一个间接路由(设置了标志 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(Reference count)列给出的是正在使用路由的活动进程个数。面向连接的协议如T C P在建立连接时要固定路由。如果在主机 s v r 4和s l i p之间建立Te 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行是环回接口,它的名字始终为 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)表明它是一个网关,这是我们所期望的。

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

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

输出中的最后一行是所在的以太网。 H标志没有设置,说明目的地址( 1 4 0 . 2 5 2 . 1 3 . 3 2)是一个网络地址,其主机地址部分设为 0。。事实上,是它的低 5位设为0,下图所示。由于这是一个直接路由(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 ffffff 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地址:
    在这里插入图片描述
    在前两种情况下,对路由表的第 2次搜索得到一个匹配的网络地址 1 4 0 . 2 5 2 . 1 3 . 3 2,并把I P报文传送给以太网驱动程序。正如下图所示的那样,I P报文中的目的地址为本机 I P地址,因此报文被送给环回驱动程序,然后由驱动程序把报文放入 I P输出队列中。

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

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

动态选路协议

动态选路协议概念

当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。路由器上有一个进程称为路由守护程序( routing daemon),它运行选路协议,并与其相邻的一些路由器进行通信。正如下图所示,路由守护程序根据它从相邻路由器接收到的信息,更新内核中的路由表。
在这里插入图片描述
动态选路并不改变内核在 I P层的选路方式。这种选路方式称为选路机制(routing mechanism)。内核搜索路由表,查找主机路由、网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中的信息改变了—当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件中的 r o u t e命令。

正如前面所描述的那样,路由守护程序将选路策略( routing policy)加入到系统中,选择路由并加入到内核的路由表中。如果守护程序发现前往同一信宿存在多条路由,那么它(以某种方法)将选择最佳路由并加入内核路由表中。如果路由守护程序发现一条链路已经断开(可能是路由器崩溃或电话线路不好),它可以删除受影响的路由或增加另一条路由以绕过该问题。

在像I n t e r n e t这样的系统中,目前采用了许多不同的选路协议。 I n t e r n e t是以一组自治系统(A S,Autonomous System)的方式组织的,每个自治系统通常由单个实体管理。常常将一个公司或大学校园定义为一个自治系统。 N S F N E T的I n t e r n e t骨干网形成一个自治系统,这是因为骨干网中的所有路由器都在单个的管理控制之下。

每个自治系统可以选择该自治系统中各个路由器之间的选路协议。这种协议我们称之为内部网关协议I G P(Interior Gateway Protocol)或域内选路协议(intradomain routing protocol)。

最常用的I G P是选路信息协议 R I P。一种新的 I G P是开放最短路径优先 O S P F(Open Shortest Path First)协议。它意在取代 R I P。另一种1 9 8 6年在原来N S F N E T骨干网上使用的较早的 I G P协议—H E L L O,现在已经不用了。

新的RFC [Almquist 1993]规定,实现任何动态选路协议的路由器必须同时支持OSPF和RIP,还可以支持其他IGP协议。

外部网关协议E G P(Exterier Gateway Protocol)或域内选路协议的分隔选路协议用于不同自治系统之间的路由器。在历史上,(令人容易混淆)改进的 E G P有着一个与它名称相同的协议:E G P。新E G P是当前在N S F N E T骨干网和一些连接到骨干网的区域性网络上使用的是边界网关协议B G P(Border Gateway Protocol)。B G P意在取代E G P。

Unix选路守护程序

U n i x系统上常常运行名为r o u t e d路由守护程序。几乎在所有的 T C P / I P实现中都提供该程序。该程序只使用R I P进行通信,这是一种用于小型到中型网络中的协议。

另一个程序是g a t e d。I G P和E G P都支持它。[Fedor 1998]描述了早期开发的 g a t e d。下图所示对r o u t e d和两种不同版本的g a t e d所支持的不同选路协议进行了比较。大多数运行路由守护程序的系统都可以运行 r o u t e d,除非它们需要支持g a t e d所支持的其他协议。

在这里插入图片描述

RIP:选路信息协议

它是最广为使用(也是最受攻击)的选路协议。对于 R I P的正式描述文件是RFC 1058 [Hedrick 1988a],但是该R F C是在该协议实现数年后才出现的。

度量

R I P所使用的度量是以跳 ( h o p )计算的。所有直接连接接口的跳数为 1。考虑下图所示的路由器和网络。画出的 4条虚线是广播 R I P报文。
在这里插入图片描述
路由器R 1通过发送广播到 N 1通告它与N 2之间的跳数是 1(发送给 N 1的广播中通告它与N 1之间的路由是无用的)。同时也通过发送广播给N 2通告它与N 1之间的跳数为1。同样,R 2通告它与N 2的度量为1,与N 3的度量为1。

如果相邻路由器通告它与其他网络路由的跳数为1,那么我们与那个网络的度量就是 2,这是因为为了发送报文到该网络,我们必须经过那个路由器。在我们的例子中, R 2到N 1的度量是2,与R 1到N 3的度量一样。

由于每个路由器都发送其路由表给邻站,因此,可以判断在同一个自治系统 A S内到每个网络的路由。如果在该 A S内从一个路由器到一个网络有多条路由,那么路由器将选择跳数最小的路由,而忽略其他路由。

跳数的最大值是 1 5,这意味着 R I P只能用在主机间最大跳数值为 1 5的A S内。度量为1 6表示到无路由到达该I P地址。

总结

IP选路总结

I P路由操作对于运行T C P/I P的系统来说是最基本的,不管是主机还是路由器。路由表项的内容很简单,包括: 5 bit标志、目的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重定向报文动态修改。

动态选路协议总结

有两种基本的选路协议,即用于同一自治系统各路由器之间的内部网关协议( I G P)和用于不同自治系统内路由器通信的外部网关协议( E G P)。

最常用的I G P是路由信息协议(R I P),而O S P F是一个正在得到广泛使用的新 I G P。一种新近流行的E G P是边界网关协议(B G P)。。第 2版R I P是其最近的一个改进版,它支持子网,还有一些其他改进技术。同时也对 O S P F、B G P和无类型域间选路( C I D R)进行了描述。 C I D R是一种新技术,可以减小 I n t e r n e t路由表的大小。

域间选路协议( I D R P)最开始时,是一个为了使用O S I地址而不是I P地址,而进行修改的 B G P版本。Intermediate System to IntermediateSystem 协议(I S - I S)是O S I的标准I G P。可以用它来选路 C L N P(无连接网络协议),这是一种与I P类似的O S I协议。I S - I S和O S P F相似。

动态选路仍然是一个网间互连的研究热点。对使用的选路协议和运行的路由守护程序进行选择,是一项复杂的工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值