📄 itpub论坛 - rfc 1058 路由信息协议(routing information protocol).htm
字号:
<a href="editpost.php?s=&action=editpost&postid=142685"><img src="images/edit.gif" border="0" alt="编辑/删除"></a>
<a href="newreply.php?s=&action=newreply&postid=142685"><img src="images/quote.gif" border="0" alt="引用/回复"></a>
</font></td>
</tr>
</table>
</td>
</tr>
</table>
</td></tr></table>
<!-- spacer --></td><td width="10"><img width="10" height="1" src="images/space.gif" alt=""></td></tr></table>
<table bgcolor="#FFFFFF" width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td width="10"><img width="10" height="1" src="images/space.gif" alt=""></td><td width="100%"><!-- spacer -->
<table cellpadding="0" cellspacing="0" border="0" bgcolor="#FFFFFF" width="100%" align="center"><tr><td>
<table cellpadding="4" cellspacing="1" border="0" width="100%">
<tr>
<td bgcolor="#DFDFDF" width="175" valign="top" nowrap>
<a name="post142686"></a>
<font face="verdana, arial, helvetica" size="2" >马儿快跑</font><br>
<font face="verdana,arial,helvetica" size="1" >版主</font><br>
<img src="avatar.php?userid=10&dateline=1008034726" border="0" alt=""><p>
<font face="verdana,arial,helvetica" size="1" >注册日期: 2001 Sep<br>
来自: 苏州<br>
发帖数量: 719<br>
<!--论坛积分:--></font></td>
<td bgcolor="#DFDFDF" width="100%" valign="top">
<font face="verdana,arial,helvetica" size="1" > </font>
<p><font face="verdana, arial, helvetica" size="2" >2.2. 避免不稳定性
<br />
<br />上面描述的算法使主机、网关通过计算得到正确的路由表。但在实际使用中还是不十分实用。上面仅证明了路由表会在有限时间内汇聚,但没有保证其汇聚速度可以用于实用;对网段变为不可到达的情况也没有涉及。
<br />
<br />对算法进行扩展使其能够处理路径无效很简单。如上所述,选择一个表示“无穷大”的数值。这个数值必须比所有可能得到的实际数值要大。在本例中使用16来表示不可到达。假设一个网络变的不可到达,该网络的所有直接邻居将到达此网络的尺度标为16。我们可以这样来分析:假设每个邻居网关有连接到一个虚网段的连接,其成本为16。因为这是连接虚网段的唯一路径,系统中的其他网关通过这些网关到达虚网段的成本将至少为16。离原始邻居网关相距一跳的网关的成本为17,相距两条的成本为18等等。对于超过最大值的成本都会被设为16。明显,到达虚网段的路径将都是16。
<br />
<br />很不幸,这样简单的方法不能解决在多长时间内汇聚的问题。在更深入之前,需要看一下一个例子(是从[2]中借鉴)。注意,下面的情况不会在现实中出现,从中可以明白新功能实现的必要。下面的字母是网关,连线是网络。
<br />
<br /> A-----B
<br /> \ / \
<br /> \ / |
<br /> C / C、D间线路的成本是10
<br /> | / 其他线路的成本是1
<br /> |/
<br /> D
<br /> |<=== 目标网络
<br />
<br />每个网关都有到各网络的路由表。但在本例中,我们只需要考虑到达图中最下方网络的路径。
<br />
<br /> D: 直接相连,尺度1
<br /> B: 通过D相连,尺度2
<br /> C: 通过B相连,尺度3
<br /> A: 通过B相连,尺度3
<br />
<br />现在假设B、D间的线路失效。连接将通过C、D间的路径。很不幸,要做好转换将花相当长时间。当B发现到D的路径失效时,路由开始改变。我们假设各网关同时发送路由更新来简化情况。下表显示了各网关到达目标网络的路径和尺度。
<br />
<br /> 时间 ------>
<br />
<br /> D: 直连, 1 直连, 1 直连, 1 直连, 1 ... 直连, 1 直连, 1
<br /> B: 不可到 C, 4 C, 5 C, 6 C, 11 C, 12
<br /> C: B, 3 A, 4 A, 5 A, 6 A, 11 D, 11
<br /> A: B, 3 C, 4 C, 5 C, 6 C, 11 C, 12
<br />
<br />问题在于:虽然B可以使用超时来去处失效的路径,但将使用太长的时间。一开始,A、C还是相信可以通过B可以到达目标,并使用尺度3。下面B错误的认为可以从A或C到达目标,而且没有办法来解决。A、C当发现B的路径失效后,它们之间还会认为可以通过对方到达目标。虽然最后系统可以汇聚,但这将花去太多的时间。在最坏的情况下,当一个网络与系统的其他部分彻底失去连接时,将花费相当长的时间来使其他网络知道这一情况。这个问题叫作“记数到无穷大(counting to infinity)”。
<br />
<br />所以,所谓的“无穷大”需要选择的尽可能小。当网络彻底失去连接时,将尽可能快的记数结束。无穷大必须比实际可能的路径尺度要大,但不应更大。其数值的选择是在网络大小和汇聚时间两者之间的折中。RIP协议的设计者认为这个协议不适用于直径大于15的网络。
<br />
<br />可以通过一些方法来解决这些问题。在RIP中使用了“带逆向毒化的水平分割(split horizon with poisoned reverse)”与“触发更新(triggered updates)”。
<br />
<br />2.2.1. 水平分割
<br />
<br />上面的问题之所以产生,原因之一是因为A、C相互错误的宣告可以到达D。可以通过下面的办法来避免这一情况。具体来说就是:不向发送该路径的邻居宣告该目标可达。“水平分割”就是不向发送该条路径的邻居网关发送包括该路径的更新。“带逆向毒化的水平分割”就是发送此类更新,但将其尺度标为无穷大。
<br />
<br />如果A认为可以从C到达D,那么A就向C发送信息表示D不可达。如果C宣告的路径是存在的,那么C可能和D直接相连,或可以通过其他网关到达D。C的路径不能回到A,这样会产生回路。A通过向C宣告D不可达,就可以认为C的路径不通过A。前面讨论的是A、C在点对点链路的情况,当A、C在广播网,如以太网中时,在网络中就可能会有其他的网关。如果A有通过C的路径,A也会向网络中的其他网关宣告D不可达。网络中的其他网关会从C直接得到路径,而不需要通过A到达C。所以,如果A有通过C的路径,其他网关也就有了通过C的路径。这很幸运,C就可以通过广播向网络中的所有网关发送更新信息了。
<br />
<br />通常情况下,带逆向毒化的水平分割比不同的水平分割更安全。两个相连的网关相互发送尺度为16的逆向路径,就可以直接避免回路。如果不发送逆向路径,错误的路径需要一段时间过后才能被消除。但是,毒化的逆向路径也有缺点:它增加了路由信息数量。考虑一个骨干网络连接了几幢建筑。每幢建筑中有一个网关连接着本地网络。网关的路由更新将广播到骨干网络上。每个网关都需要了解其他网关连接着怎样的网络。在使用普通水平分割时,只有被发送到骨干上的路由更新出现在路由信息中;而使用带逆向毒化的水平分割时,网关还要保存从骨干收到的很多尺度为16的路径。随着系统的增大,这可能产生很多更新信息来表示不可达网络。
<br />
<br />在静态情况下,宣告尺度为16的逆向路径不提供更多可用信息。在一个广播网络中如果有很多网关的话,这会需要额外的带宽。使用逆向宣告的原因使提高动态性能。当拓扑改变的时候,宣告不可使用的路径可以加快汇聚。但在一些情况下,网络管理员宁可汇聚减慢也要使路由负载减少。所以在实现中使用了普通水平分割,而不是带逆向毒化的水平分割;或者提供一个选项给管理员来选择。同样允许将两种情况混合使用,如在路由改变后的一段时间里使用逆向毒化,而后忽略。
<br />
<br />2.2.2. 触发更新
<br />
<br />带逆向毒化的水平分割可以避免两个网关之间的路由回路。但在三个网关的情况时,还会出现相互欺骗。例如A认为可以从B得到路径,B认为从C,而C认为从A。水平分割不能解决这样的回路。这样的回路只有当尺度达到无穷大以后而认为不可达。触发更新试图加速这样情况下的汇聚。实现触发更新,需要加入如下规则:当网关发现路径的尺度改变后,需要尽快地发送更新信息,而不管周期性信息发送的时间是否到达。(具体的时间根据协议不同,一些距离向量协议,如RIP,指定了一个很小的延迟,以避免触发更新占据过多的网络流量)。将这和计算新尺度的规则结合。假设有通过网关G到达目标N的路径,如果从G得到新的更新,接收的网关必须相信这个新的信息,而不管这个尺度比原来的好还是坏。当尺度改变时,接收的网关也必须向它的每一个直接邻居发送触发更新。这将引起一系列的触发更新,很容易知道哪些网关和主机将参与这一系列触发更新。当网关G发现目标N的路径无效时,就向它的邻居发出触发更新。只有哪些认为要通过G到达N的邻居才相信这一信息,其他网关将忽略该信息,因为新的更新使用一个更差的尺度。使用G到达N的邻居更新尺度,并向他们的邻居发送触发更新。同样,只有使用这些路径的邻居才会注意这一信息。这样,触发更新将传遍所有使用网关G的路径。传播在使用其他路径到达目标N的地方停止。
<br />
<br />如果系统能够保证这一系列的触发更新发送,就可以保证记数到无穷大不会发送。错误的路径会马上被去除,也不会有回路。
<br />
<br />很不幸,事情没有这么巧。触发更新也许会和周期性更新同时发送;没有收到触发更新的网关还会发送不存在的路径。网关也许会先收到触发更新,在收到错误的周期更新。这将会产生局部的错误路径。触发更新不会发送的那么及时,而记数到无穷大总还会存在。</font></p>
<p><font face="verdana, arial, helvetica" size="2" ><br>__________________<br>不用告诉问路者最近的路,而要告诉他最好找的路
<br />email : raymon@itpub.net</font></p>
<p></p>
<p align="right"><font face="verdana,arial,helvetica" size="1" >
<a HREF="report.php?s=&postid=142686"><IMG SRC="images/warn.gif" BORDER=0 ALT="向版主反映这个帖子"></A><a href="postings.php?s=&action=getip&postid=142686"><img src="images/ip.gif" border=0 alt="查看马儿快跑 的IP地址"</a></font></p>
</td>
</tr>
<tr>
<td bgcolor="#DFDFDF" width="175" height="16" nowrap><font face="verdana,arial,helvetica" size="1" ><img src="images/off.gif" border="0" alt="马儿快跑 不在线" align="absmiddle"> <img src="images/posticon.gif" border="0" alt="旧帖">
02-04-25 <font color="#666686">13:45</font></font></td>
<td bgcolor="#DFDFDF" width="100%" valign="middle" height="16">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr valign="bottom">
<td><font face="verdana,arial,helvetica" size="1" >
<a href="member.php?s=&action=getinfo&userid=10" target="_blank"><img src="images/profile.gif" border="0" alt="点这里查看 马儿快跑 的个人资料"></a> <a href="private.php?s=&action=newmessage&userid=10"><img src="images/sendpm.gif" border="0" alt="点这里给 马儿快跑发送一条悄悄话"></a> <a href="search.php?s=&action=finduser&userid=10"><img src="images/find.gif" border="0" alt="查找 马儿快跑 的更多帖子"></a> <a href="member2.php?s=&action=addlist&userlist=buddy&userid=10"><img src="images/buddy.gif" border="0" alt="将 马儿快跑 添加到你的好友列表"></a>
<a href="http://search.tencent.com/cgi-bin/friend/user_show_info?ln=35945104" target=_blank><img src="images/oicq.gif" alt="马儿快跑 的OICQ号码:35945104" border=0></a> <!-- $ post[aimicon] --> <!-- $ post[yahooicon] -->
</font></td>
<td align="right" nowrap><font face="verdana,arial,helvetica" size="1" >
<a href="editpost.php?s=&action=editpost&postid=142686"><img src="images/edit.gif" border="0" alt="编辑/删除"></a>
<a href="newreply.php?s=&action=newreply&postid=142686"><img src="images/quote.gif" border="0" alt="引用/回复"></a>
</font></td>
</tr>
</table>
</td>
</tr>
</table>
</td></tr></table>
<!-- spacer --></td><td width="10"><img width="10" height="1" src="images/space.gif" alt=""></td></tr></table>
<table bgcolor="#FFFFFF" width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td width="10"><img width="10" height="1" src="images/space.gif" alt=""></td><td width="100%"><!-- spacer -->
<table cellpadding="0" cellspacing="0" border="0" bgcolor="#FFFFFF" width="100%" align="center"><tr><td>
<table cellpadding="4" cellspacing="1" border="0" width="100%">
<tr>
<td bgcolor="#F1F1F1" width="175" valign="top" nowrap>
<a name="post142689"></a>
<font face="verdana, arial, helvetica" size="2" >马儿快跑</font><br>
<font face="verdana,arial,helvetica" size="1" >版主</font><br>
<img src="avatar.php?userid=10&dateline=1008034726" border="0" alt=""><p>
<font face="verdana,arial,helvetica" size="1" >注册日期: 2001 Sep<br>
来自: 苏州<br>
发帖数量: 719<br>
<!--论坛积分:--></font></td>
<td bgcolor="#F1F1F1" width="100%" valign="top">
<font face="verdana,arial,helvetica" size="1" > </font>
<p><font face="verdana, arial, helvetica" size="2" >3. 协议详述
<br />
<br />RIP的目的是为在IP网络环境中的主机和网关交换信息而计算路径。RIP是一个距离向量协议,其主要功能在第2章中已经描述。主机和网关都可以实现RIP,在很多IP文档中,使用术语“主机(host)”来范指。RIP是传输“目标(destinations)”的路径信息,目标可以包括独立的主机、网络或一个特殊的默认路径。
<br />
<br />每个使用RIP的主机都有接口连接一个或多个网络。这些被成为“直接连接网络(directly-connected networks)”。协议就是使用这些网络的相关信息。信息中最重要的是尺度(metric)或叫作成本(cost),网络的尺度在整数1-15之间。大多数实现都使用1作为尺度,新的版本中允许管理员为每个网络设定成本。除了成本,每个网络有一个IP网络地址和相对应的掩码,这是由系统管理员手工设置的,且与本协议无关。
<br />
<br />注意在3.2节中的规则:每个IP网络只有一个子网掩码,以及只有直接连接网络的子网掩码是已知的。但是,也有可能需要在一个网络中存在多种子网掩码;或需要知道远端网络的掩码。这需要修改协议使其传送子网信息,这样的修改提高了可用性。
<br />
<br />每个实现RIP协议的主机都有一张路由表,表中为每个通过RIP得到的目标建立一项。每一项中都至少有下列信息:
<br />
<br />- 目标的IP地址。
<br />
<br />- 尺度,表示主机到目标的总成本。是从主机到目标路径上的各网络成本之和。
<br />
<br />- 到达目标的下一网关的地址。如果目标是直接连接网络,此项不需要。
<br />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -