⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc3063.txt

📁 283个中文RFC文档
💻 TXT
📖 第 1 页 / 共 5 页
字号:
组织:中国互动出版网(http://www.china-pub.com/)
(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:徐春红(airria    air_xu@263.net )
译文发布时间:2001-3-29
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保留本文档的翻译及版权信息。




 
MPLS(多协议标签交换)环路预防机制

摘要
        本文讲述了一种基于“线程”的、用于防止多协议标签交换协议(MPLS)设置含有环路的标签交换路径(LSP)的简单机制。此机制与虚电路(VC)的合并相兼容,但此兼容u并不是必需的。该机制还可用于下游按需等级分配也可用于下游等级分配。在协议消息中对要传输的信息进行了紧密的捆绑(也就是,不需使用路径矢量)。当一个节点需要转换到它的下一跳时,分布式程序被执行。不过,这只针对那些下游变化的节点。

目录
摘要	1
1.介绍	2
2.基本的定义	3
3.线程基础	4
3.1    线程属性	4
3.2.  线程环	5
3.3.  线程的基本行为	5
3.4   线程基本行为实例	7
4.线程算法	9
5. 算法的适用性	10
5.1   LSP路由环的预防/检测	10
5.2  当新路径上有路由环时使用旧路径	10
5.3    如何处理下游等级分配	10
5.4.  如何实现负载的分离	10
6.为什么算法是有效的?	11
6.1   为什么一个带有未知跳数的线程被扩展	11
6.2.  为什么一个回绕的线程不能包含一个环?	11
6.3.  为什么L3路由环被检测	12
6.4.  为什么L3不被错误地检测	12
6.5一个滞留线程怎样自动地从环路中恢复	12
6.6.  为什么不同颜色的线程不能相互追赶?	12
7.  环预防的例子	13
7.1 第一个例子	13
7.2.  第二个例子	16
8. 线程控制时钟	16
8.1. 有限状态机制	17
9.   与路径矢量/扩散方法进行比较	20
10 .安全考虑	20
附录A--算法的进一步讨论	20
A.1. 环路预防的强制方法	20
A.2. 强制方法有哪些不妥?	21
A.3. 线程跳数	21
A.4. 线程颜色	22
A.5. 颜色和跳数之间的关系	23
A.6. 检测线程环	23
A.7. 预防LSPs环路的建立	24
A.8. 撤销线程	25
A.9. 修改现有线程的跳数和颜色	25
A.10.什么时候没有下一跳?	25
A.11. 下一跳的变化和先前存在的有颜色的输入线程	25
A.12. 一个环中有多少个线程在运行?	26
A.13. 关于跳数U的一些特殊规则	27
A.14. 从环路中恢复	27
A.15. 继续使用旧路径	28

1.介绍
       本文讲述了一种基于线程,用于防止MPLS设置具有路由环的标签转换路径(LSPs)的简单机制。
        当一个LSR(标签交换路由器)发现其有一个新的特定的跳向FEC(等效前传类)[1]的下一跳时,它就创建一个线程并且将其扩展为下游。每一个这样的线程都被分配唯一的一种颜色来标识,这样就可保证网络上的任何两个线程都不会有相同的颜色。
        对于一个给定的LSP,若从节点到最远的上 游节点上都没有跳数变化,那么一旦一个线程被扩展为一个特定的下一跳,其它的线程就不能再被扩展为这样的下一跳。与特定LSP的 特定的下一跳相关联的仅有的状态信息就是线程的颜色和跳数。
        如果存在路由环,那么某一线程将会返回至它已经经过的LSR处。因为线程有特定的颜色,所以这一点很容易检测。
        第三部分和第四部分提供了用于检测的没有路由环的程序。当线程被检测的时候,线程被回绕至其创建处。当他们被回绕时,标签被分配。因而,标签只有在保证自由路由环时才被分配。
        当一个线程被扩展时,它所经过的LSRs必须记录它的颜色和跳数,但是当线程已被回绕时,LSRs就只需要记录线程的跳数。
        如果LSP中有一些,或全部,或根本就不存在LSRs支持VC-合并,线程机制同样有效。它可以被用于请求的下游按需标签分配或者用于未经请求的下游标签分配[2,3]。该机制也可用于路由环检测,旧路由的保留和负载分离。
        协议消息必须携带的并且必须保留在状态表内部的那些状态信息大小是固定的,与网络大小无关。因而线程机制比那些需带有路径矢量的选择对象更具有可伸缩性。
        为了在路由变化后,建立一个新的LSP,线程机制仅需要在变化点的下游节点之间进行通信,而不需要在变化点的上游节点之间进行通信。所以,线程机制比要求执行扩散算法的选择对象更加健壮。(参看第9部分)

2.基本的定义

LSP
        我们将运用术语LSP参照一个根结点为出口点的多点到一点的树。参见3.5[3]部分。
        下面,我们假设网络中只设有一个LSP来讨论。这使得我们在谈到输入、输出链接时不需要老是说“对于同一个LSP”这样的话。
输入链接,上游链接
输出链接,下游链接
       在给定的节点处,一个LSP将有一个或更多个输入或上游链接和一个输出链接或下游链接。一个“链接”实际上是邻近LSR的一种抽象的联系;它是“树”的一个“边缘”,且就象一个“接口”一样不必是一个特别的具体实例。
   
叶节点,入口节点
        没有上游链接的节点
  
符合条件的叶节点
      能够成为叶节点的节点。例如,如果一个节点不能直接创建一个L3包或者在其输出链  接上不能接收一个L3包,那么此节点就不是一个符合条件的叶节点。

链接跳数
       每个链接用一个“链接跳数”标识。此“链接跳数”就是给定链接与其最远的上游叶节点之间的跳的数目。在任何一个节点上,下游链接的链接跳数总是比与之相关的最大的上游链接跳数大1。

       在一个给定节点上,我们用"Hmax"来定义节点上所有的输入链接跳数的最大值。注意:下游链接跳数等于Hmax+1。在一个叶节点上,Hmax被置为0。
        图1显示了一个链接跳数的例子。
                     1      2
                   A---B---C           K
                                 |             |
                                 |3           |1
                                 |             |
                                 |  4     5  |  6   7
                                D---G---H---I---J
                                |
                                |2
                            1  |
                         E---F

                图1一个链接跳数例子

   
下一跳的获取
          虽然以前节点N认为FEC F是不可到达的,但是现在它却可以有通向它的下一跳。

下一跳的丢失 
       节点N以前认为节点A是通向FEC F的下一跳,但是现在在节点A再也没有通向FEC F的下一跳了。无论何时下一跳向下传,节点A总会丢失一个下一跳。

下一跳的变化
      在节点N,通向FEC F的下一跳从节点A变化到B,这里节点A与B是不同的。下一跳的变化可以看作是老的下一跳丢失事件与新下一跳获取事件的结合。


3.线程基础

        在下游按需等级分配形式(入口初始化分配控制)中,线程即是用于建立一个LSP的消息序列。
3.1    线程属性
   
   线程有三个属性。这些属性可被编码到如下一个单独的线程对象中。
    0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5  6  7  8  9  0  1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                                                                                              |
  +                                                            Color                                                        +
   |                                                                                                                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Hop Count           |      TTL                   |           Reserved                                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

线程颜色
        每当一个节点产生一个路径控制消息时,节点就会分配一种唯一的颜色给此消息。此颜色在时间和空间都是唯一的:它的编码包含一个节点的IP地址,而此地址与该节点所保留的编号空间的唯一的事件确认相关联。节点发送给下游的路径设置消息将包含该颜色。另外,当一个节点发送包含颜色的消息给下游时,节点将记录此颜色并且将此颜色设为下游链接的颜色。
        当一个带有颜色信息的消息被接收时,它的颜色就成为输入链接的颜色。包含某一特定颜色消息的线程就被标识为具有那种颜色的线程。
        特别的颜色值“透明色”(全0)被保留。
       分配唯一的颜色值的一个可行方法是:从事件标识符的初始值开始,每分配一种颜色值对其加1(对最大值取模)。用这种方法,最初的事件标识符可以随机选取也可以分配一个比以前系统赋值所使用的最大的事件标识符更大的值。

线程跳数
       为了保持链接跳数,我们需要在路径控制消息中携带跳数。例如,一个叶节点将分配跳数1给它的下游链接并将此值存储到它发往下游的路径建立消息中。当一个路径建立消息被发往下游时,一个节点将分配一个比其最大的输入链接跳数大1的跳数值给它的下游链接,它也会将此值存储到其发往下游的路径控制消息中。一旦跳数值被存储到路径控制消息中,我们就可将此值当作一个“线程跳数”。
         一个特别的跳数值“未知的”(=0xff)比任何一个已知的值都要大,它被用于存在路由环的情况下。一旦线程跳数值成为“未知的”,那么当线程被扩展时,它的跳数值就不再会被增加。

线程TTL
       为了避免某些情况下的未定义的控制信息环,一个TTL线程就会被创建。当一个节点产生一个路径控制消息时并且将其发送到下游时,它就为其消息产生一个TTL线程。该TTL线程在每一跳上都被减1。当TTL线程到达0时,消息就不能再向前传了。与线程跳数和线程颜色不同,TTLs线程不需要被存储在输入链接中。

3.2.  线程环
        当同一颜色的线程在多个输入链接中被接收到或者接收到的线程颜色是由接收节点分配时,我们就称线程形成了循环。通过检查接收线程颜色中的IP地址部分,一个线程创建者就可以判断出它是否分配了它接收到的线程的颜色。

3.3.  线程的基本行为
        为了防止LSP路由环,通过使用线程:“扩展”、“回绕”、“撤销”、“合并”、“滞留”来定义线程的五个基本行为。本部分仅描述每个基本行为,并不描述这些基本行为是如何相互作用以及整个算法是如何起作用的。算法的主体部分将在每4部分描述。

线程的扩展(extending)

        当一个节点开始发送一个带有一组线程属性的路径建立消息给它的下一跳时,我们就说“此节点创建了一个线程并将之向下游扩展”。当一个节点从其上游节点接收到带有一组线程属性的路径建立消息并将其发向它的下游时,我们就说“此节点接收到一个线程并将之向下游扩展”。线程的颜色和跳数就成为输出链接的颜色和跳数。在一个特定的链接处,不管何时接收到一个线程,线程的颜色都将代替链接先前所具有的任何颜色和跳数而成为该输入链接当前的颜色和跳数。      
       例如,当一个入口节点初始化一个路径建立时,它就创建了一个线程并通过发送一个路径建立消息将其扩展到下游。线程跳数被设置为1,线程颜色用一个合适的事件标识符被设置为入口节点的地址,TTL线程被设置为它的最大值。
      当一个节点接收一个线程并且将之扩展至下游时,节点或者(i)不改变颜色扩展线程或者(ii)改变颜色扩展线程。如果线程是在一个新的输入链接上被接收并在一个已经存在的输出链接上被扩展,那么这个被接收的线程就会被改变颜色扩展,其他情况下,线程的扩展就不用改变颜色。当一个线程被改变颜色扩展时,一个新的颜色的线程就被创建和并被扩展。
       线程的创建不仅仅只在叶节点才会发生。如果一个中间节点有一个输入链接,无论何时它获得一个新的下一跳时,它就会创建和扩展一个新的线程。
        当一个节点注意到一个链接跳数减少的下一跳节点时,只要它不是在扩展一个带颜色信息的线程,一个透明线程就会被扩展。

线程合并(merging)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -