99网
您的当前位置:首页RFC3031(中文版)——MPLS协议规范

RFC3031(中文版)——MPLS协议规范

来源:99网
2.MPLS介绍 ................................................................................................................. 2 2.1.简介...................................................................................................................... 3 3.MPLS基础 ................................................................................................................. 4 3.1.标签...................................................................................................................... 4 3.2.上游和下游lsr..................................................................................................... 5 3.3.标签分组.............................................................................................................. 5 3.4.标签分配和分发.................................................................................................. 5 3.5.一个标签绑定的属性.......................................................................................... 5 3.6.标签分发协议LDP ............................................................................................. 5 3.7.下游主动分发 vs. 下游按需分发 ....................................................................... 6 3.8.标签保持模式...................................................................................................... 6 3.9.标签栈.................................................................................................................. 6 3.10.下一跳标签转发表项NHLFE .......................................................................... 7 3.11.输入标签映射ILM ........................................................................................... 7 3.12.等价类到nhlfe的映射FTN ............................................................................. 7 3.13.标签交换............................................................................................................ 7 3.14.标签的范围和唯一性........................................................................................ 8 3.15.标签交换路径,lsp输入点,lsp输出点 ......................................................... 9 3.16.倒数第二跳弹出.............................................................................................. 10 3.17.LSP的下一跳 .................................................................................................. 11 3.18.无效的输入标签.............................................................................................. 11 3.19.lsp控制:有序 vs .................................................................................. 11 3.20.聚合.................................................................................................................. 12 3.21.路由选择.......................................................................................................... 13 3.22.缺少输出标签.................................................................................................. 13 3.23.生存时间TTL ................................................................................................. 14 3.24.环回控制.......................................................................................................... 14 3.25.标签编码.......................................................................................................... 15 3.25.1.mpls规定的硬件和软件 .......................................................................... 15 3.25.2.ATM交换机作为lsr ................................................................................ 15 SVC编码 ......................................................................................................... 15 SVP编码 ......................................................................................................... 15 SVP多点编码 ................................................................................................. 16 3.25.3.这几种编码技术的互操作性................................................................... 16 3.26.标签合并.......................................................................................................... 16 3.26.1.非合并的lsr.............................................................................................. 17 3.26.2.合并以及非合并lsr的标签 ..................................................................... 17 3.26.3.atm的合并 ................................................................................................ 18 3.27.隧道和分层...................................................................................................... 18 3.27.1.逐跳路由的隧道....................................................................................... 18 3.27.2.显式路由隧道........................................................................................... 18 3.27.3.LSP隧道 ................................................................................................... 18 3.27.4.分层:lsp中的lsp隧道 ........................................................................... 18 3.27.5.标签分发对等实体和层次....................................................................... 19

3.28.标签分发协议的传送...................................................................................... 20 3.29.为什么有多种标签分发协议?...................................................................... 20 3.29.1.BGP和LDP ............................................................................................. 20 3.29.2.RSVP分发标签 ........................................................................................ 20 3.29.3.显式路由lsp的标签 ................................................................................ 20 3.30.多播.................................................................................................................. 20 4.MPLS的一些应用 ................................................................................................... 21 4.1.MPLS和逐跳路由业务 .................................................................................... 21 4.1.1.地址前缀的标签......................................................................................... 21 4.1.2.为地址前缀分发标签................................................................................. 21 4.1.2.1.对于一个地址前缀的标签分发对等实体.......................................... 21 4.1.2.2.分发标签.............................................................................................. 21 4.1.3.使用逐跳路由路径作为lsp ....................................................................... 22 5.逐跳ldp .................................................................................................................... 22 5.1.标签的通知和使用的过程................................................................................ 22 5.1.1.下游lsr:分发过程.................................................................................... 22 5.1.1.1.无条件入栈(PushUnconditional) ........................................................ 23 5.1.1.2.有条件入栈(PushConditional) ............................................................ 23 5.1.1.3.无条件出栈(PulledUnconditional) ...................................................... 23 5.1.1.4.有条件出栈(PulledConditional) .......................................................... 24 5.1.2.上游lsr:请求过程.................................................................................... 24 5.1.2.1.从不请求(RequestNever) .................................................................... 24 5.1.2.2.按需请求(RequestWhenNeed) ............................................................ 24 5.1.2.3.收到请求再请求(RequestOnRequest) ................................................ 25 5.1.3.上游lsr:不激活处理................................................................................ 25 5.1.3.1.请求重试(RequestRetry) ..................................................................... 25 5.1.3.2.请求不重试(RequestNoRetry) ............................................................ 25 5.1.4.上游lsr:释放过程.................................................................................... 25 5.1.4.1.发生改变的时候释放(ReleaseOnChange) ......................................... 25 5.1.4.2.发生改变的时候不释放(NoReleaseOnChange) ................................ 26 5.1.5.上游lsr:标签使用过程............................................................................ 26 5.1.5.1.立即使用(UseImmediate).................................................................... 26 5.1.5.2.在没有检测到环回的情况下使用(UseIfNoLoopDetected) .............. 26 5.1.6.下游lsr:回收处理.................................................................................... 26 5.2.mpls方案:对上述处理过程的组合的支持 ................................................... 27 5.2.1.支持标签合并的方案................................................................................. 27 5.2.2.不支持标签合并的方案............................................................................. 28 5.2.3.关于互操作性的考虑................................................................................. 28 6.基于安全的考虑....................................................................................................... 29

2.MPLS介绍

这个文档规定mpls的体系结构。注意利用mpls进行多播处理不是本文档讨论的内容。

2.1.简介

在无连接的网络层,一个分组在从源到目的的过程中,在它途径的每个路由器上,每个路由器都会的进行转发控制。也就是说,每个路由器都要分析分组的首部,每个路由器都要允许路由算法。并且,每个路由器根据分组首部分析的结果和路由算法的结果的选择分组的下一跳。

分组首部中包含的信息远远超过用于选择下一跳所需的信息。为一个分组选择下一跳可以被看作是两个功能的组合。首先是讲所有的可能收到的分组划分成为一系列的“转发等价类(FECs)”。其次,将每个等价类映射到一个下一跳上去。映射到同一个等价类中的不同的分组,从转发的观点来看是没有差别的。属于同一个FEC并且是从同一个节点来的所有分组将在同一个通道中传送。(或者,如果使用多路径路由的话,他们将使用这个FEC对应的一套路径。)

在传统的ip转发中,一个路由器在自己的路由表中为两个不同的分组进行路由查找的时候,如果发现他们具有相同的地址前缀X,则认为他们属于相同的FEC。这个X是对每个分组的目的ip地址进行最长匹配的结果。当一个分组在网络中传送的过程中,每一跳都重新检查该分组的首部,并且将其分配的一个FEC中。

在mpls网络中,一个分组被分配到一个fec的动作只会发生在这个分组进入mpls网络的时候。分组所属的fec使用一个定长的值来编码,就是所谓的标签。当一个分组被转发给它的下一跳的时候,标签和分组一起发送,也就是说这个分组转发之前被打上了标签。

在后续的路由器的处理中,不需要再对分组的网络层首部进行分析。分组的标签被当作索引对转发表进行查找,得到下一跳和一个新的标签。老的标签被新的标签替换,分组被转发给它的下一跳。

在mpls的转发中,一旦一个分组被分配给一个fec,后续的路由器都将不再进行进一步的分组首部的分析。所有的后续的转发工作都是由标签驱动的。这是和传统的分组转发相比具有优势的地方。

mpls的转发只需要进行标签的查找和替换,而不需要进行网络层首部的分析。

一个分组一旦进入了mpls网络,就会被指定一个FEC,入口路由器可以使用任何和分组相关的信息来决定这个分组的fec的分配。包括分组的网络层首部之外的信息,例如分组的输入端口等。传统的转发过程只能参考分组的首部信息。

同一个分组,如果从网络的不同的入口路由器进入网络,它的标记是不一样的。而在传统的转发中,由于分组的入口路由器的标志符无法和分组一起在网络中传送。

分组的fec的指定可以被设计得非常的复杂以适应各种各样不同的应用。并且这种复杂性不会对中间的负责分组标签转发的路由器产生任何的影响。 有时候,在一个分组进入网络之前,需要显式的指定分组路径,而不是由路由算法动态的选择。这个需求是策略路由和流量工程所需要的。在传统转

发过程中,这需要使用到“源路由”技术。在mpls中,一个标签可以用来表示一条路径,显式路由的标志符不需要想源路由技术那样由分组自己携带路由信息。

有效路由器分析分组ip首部信息不仅仅是为了获取下一跳,还用首部中的信息来决定分组的优先级和服务类型。从而对不同的分组选择不同的丢弃门限或者时间。Mpls允许分组的优先级和服务类型完全的或者部分的信息可以从标签中获取,当然这不是必须的。在这种情况下,你可以说一个标签表示的是一个fec和优先级或者cos的组合。

Mpls定位在多协议的标签交换,多协议是由于这个技术可以被应用到任何的物理层协议。在这个文档中,我们关注的是将ipv4作为网络层的协议。

一个支持mpls的路由器被成为“标签交换路由器”或者LSR。

3.MPLS基础

本节我介绍一些mpls的基本概念和一些常用的方法。

3.1.标签

所谓标签是一个短小的固定长度的本地标志符,用来标记FEC。被加入到一个分组上的标签表示这个分组所属的FEC。

一般来说,一个分组到一个FEC的指定都是基于或者部分基于这个分组的网络层地址。但是,这个标签并不是分组的网络层地址的简单编码。 如果Ru和Rd都是lsr,他们会约定当Ru发送一个分组给Rd的时候,如果这个分组是一个特殊的FEC F的一员的话,Ru将这个分组加上标签L。也就是说,他们将就在分组从Ru传送到Rd时标签L和等价类F的绑定达成共识。作为这种共识的结果,L成为Ru的表示等价类F的输出标签,同时成为Rd的表示等价类F的输入标签。

注意,任何不是从Ru发送到Rd的分组,即使它属于等价类F,都不能用L表示。L是一个任意值,它到F的绑定是针对Ru和Rd的,是一个本地的操作,而不是针对整个的lsp或者mpls网络的。

像上面我们在说的分组从Ru发送到Rd这种情况,实际上我们并不是在暗示这个分组是在Ru产生或者Rd就是这个分组的目的。更适当的说法是,我们指的是那些所有的在这两个lsr上或者他们中任意一个lsr上传送的分组。 有时候,对于Rd来说,分辨一个收到的分组的标签L是否是由Ru添加的,是一件非常困难甚至是不可能的事情。(一般来说,这种情况发生在Ru和Rd不是直接相连的。)在这种情况下,Rd必须保证从标签到等价类的绑定是一对一的。也就是说,Rd绝对不能和Ru1协定将L绑定到等价类F1,同时又和Ru2协定将L绑定到F2。除非Rd可以保证在收到一个标签L的时候,能够区分他们是由Ru1还是Ru2发送的。

每个lsr都有责任确保他们可以唯一的解释输入标签。

3.2.上游和下游lsr

假设Ru和Rd协定在分组从Ru发送到Rd的时候将L绑定到等价类F。对于这个绑定来说,Ru是上游lsr,而Rd是下游lsr。

对于一个给定的绑定,我们说一个节点是上游,一个节点是下游,意味着在分组从上游节点发送到下游节点的时候,用一个特殊的标签来表示一个特殊的FEC。这并不意味着这个FEC中的分组将被从上游节点路由到下游节点。

3.3.标签分组

一个打了标签的分组是一个被添加了标签的分组。在某些情况下,标签是存在于一个封装的首部,这个首部就是为了标签的目的而添加的。在另外一些情况下,标签存在于已经存在的数据链路层或者网络层首部,只要这里有相应的字段可以完成这个目的。所使用的编码技术对于编码标签的实体和解码标签的实体必须是一致的。

3.4.标签分配和分发

在mpls体系结构中,绑定一个标签L到特殊的一个等价类F是由一个lsr决定的,这个lsr是对于这个绑定来说是下游节点。下游lsr通知上游lsr这个绑定。因而,标签是“下游分配”的,标签绑定的分发是沿着“从下游到上游”的方向的。

如果一个lsr已经被设计成只能在一定的数字范围内查找标签的话,那么它仅仅需要确保它只能在这个数字范围内绑定标签。

3.5.一个标签绑定的属性

一个特殊的标签L到等价类F的绑定,由Rd分发给Ru,可以关联一些属性。如果当Ru作为下游节点分发它的标签到等价类F的绑定的时候,必然的,它同样要将它从Rd那里收到的关联到等价类F的属性分发出去。

3.6.标签分发协议LDP

一个标签分发协议是一套用于lsr通知其他lsr它所做出的标签等价类的绑定的处理过程。两个使用ldp来交换标签等价类绑定信息的lsr,对于他们所交换的绑定信息来说,被成为“标签分发对等实体”。如果两个lsr是标签分发对等实体,我们会说,在他们中间存在一个“标签分发邻接”。 (注意,两个lsr可能对一系列绑定来说都是标签分发对等实体,但是对于其他的一些绑定,可能就不是标签分发对等实体。)

LDP还包括某些协商过程,在这个协商过程中,两个对等实体需要获取对方的mpls的能力。

Mpls的体系结构并不假设只有一个ldp。实际上,不少的不同样的ldp都已经或者正在标准化。现有的协议已经被扩展用来进行标签分发。(例如:MPLS-BGP、MPLS-RSVP-TUNNELS)。新的协议也已经被定义以用来进行标签分发。(例如:MPLS-LDP、MPLS-CR-LDP)。

在这个文档中,我们试图使用首字母缩写“LDP”来描述MPLS-LDP协议,当我们说“标签分发协议”的时候,我们表示的是通用的标签分发协议,而不会使用缩写。

3.7.下游主动分发 vs. 下游按需分发

mpls体系结构允许一个lsr显式请求它的下一跳,关于一个特殊的FEC到标签的绑定。这种方式称为“下游按需”标签分发。

Mpls体系结构也允许一个lsr分发绑定信息给那些没有显式请求该信息的lsr。这称为“下游主动”标签分配。

只提供“下游主动”或者只提供“下游按需”或者两者都提供的方式都是可以的。到底提供的是哪种方式依赖于一个mpls实现的接口的特性。这两种标签分发技术可以被应用于同一个网络。在一个给定的标签分发连接中,上游节点和下游节点必须使用相同的技术。

3.8.标签保持模式

一个lsr Ru可能从Rd收到或者已经收到一个标签绑定到一个特殊的

FEC,即使对于这个FEC来说,Rd不是Ru的下一跳,或者Rd不再是Ru的下一跳。

关于是否保持这个绑定是否丢弃这个绑定,Ru存在一个选择。如果Ru保持这个绑定,如果对于这个FEC来说,Rd最终成为Ru的下一跳的时候,它可以立即开始再次使用这个绑定。如果Ru丢弃这个绑定,如果Rd后来成为下一跳,这个绑定将要被再次请求。

如果一个lsr支持“自由标签保持模式”,它维护从不是自己下一跳的lsr收到的关于标签到等价类的绑定。如果一个lsr支持的是“保守标签保持模式”,它将丢弃这个绑定。

自由标签保持模式允许快速的适应路由的变化,但是保守标签保持模式对于lsr来说只需要维护较少的标签。

3.9.标签栈

迄今为止,我们已经描述的都是一个被标签的分组都只携带一个标签。我们将要看到,分组携带多个标签的模型是非常有用的。这些标签被组织成后进先出的栈,我们成为标签栈。

虽然,mpls支持一个层次,对标签分组的处理是完全和层次结构的。处理总是基于栈顶的标签,并不关注在这个标签之下的其它的标签是否存在,或者这个标签之上的标签是否曾经存在。

一个非标签的分组可以被看作是一个标签栈为空的分组,它的标签栈深度为0。

如果一个分组的标签栈的深度为m,我们将栈底的标签成为1级标签,它之上的标签成为2级标签,栈顶的标签成为m级标签。

当我们介绍lsp通道和mpls层次的概念的时候,大家就会清楚标签栈的使用了。

3.10.下一跳标签转发表项NHLFE

nhlfe用于转发标签分组。它包括以下的信息:

• 分组的下一跳。

• 对分组的标签栈的操作;有以下几种: • 使用一个新的标签替换栈顶标签; • 弹出标签栈;

• 使用新的标签替换栈顶标签,并且将一个或者多个标签入栈; • 在发送分组的时候使用的数据链路层封装; • 当发送分组的时候对标签栈的编码方式; • 为了正确处理分组所需的其他信息。

注意,在一个给定的lsr上,分组的“下一跳”可能是这个lsr自己。在这种情况下,这个lsr应该弹出栈顶标签,然后将弹出栈顶标签的分组再发送给自己处理。然后,它将进行第二次转发判断,这次是基于弹出后的标签栈进行的转发判断。这时候可能还是一个标签分组,或者变成一个ip的分组。 这意味着在某种情况下,lsr需要操作ip首部以进行转发分组的处理。 如果分组的“下一跳”是当前的lsr的话,那么标签栈的操作必须是“弹出”。

3.11.输入标签映射ILM

ILM将每个输入标签映射到一组nhlfe上去。它用于标签分组的转发。 如果ilm映射一个标签到一组nhlfe上,这些nhlfe包含一个以上的表项,那么在转发之前必须中这些表项中选择一个用来作为转发的依据。从这一组中选择一个的过程不是本文档讨论的内容。这种多nhlfe的方式在需要多条等值的链路的负载平衡的时候是非常有用的。

3.12.等价类到nhlfe的映射FTN

FTN将每个fec映射到一组nhlfe上去。在转发非标签的分组的时候使用这个映射,这些非标签的分组在转发之前会变成标签分组。

如果ftn将一个fec映射到一组nhlfe上,这些nhlfe中包含多个元素,在分组转发之前必须选择其中一个。如何选择不是本文档讨论的内容。这种方式在需要多条等值的链路的负载平衡的时候是非常有用的。

3.13.标签交换

标签交换在转发一个分组的过程中按照如下的步骤。

为了转发一个标签分组,一个lsr检查分组的标签栈顶的标签。使用ilm来将这个标签映射到一个nhlfe。使用这个nhlfe中的信息来决定向何处转发分组,并且对标签栈进行操作。然后,将新的标签栈进行编码加入到分组中,标签转发这个分组。

为了转发一个非标签的分组,一个lsr分析网络层首部,决定这个分组的FEC。然后使用ftn将这个fec映射到一个nhlfe。使用这个nhlfe中的信息来决定向何处转发分组,并且对标签栈进行操作(这时,弹出标签栈顶的操作肯定是不合法的。)。然后,将新的标签栈进行编码加入到分组中,标签转发这个分组。

需要非常注意的是,当使用标签交换的时候,下一跳是从nhlfe中得到的,这和不使用mpls的路由转发是不一样的。

3.14.标签的范围和唯一性

一个给定的lsr Rd绑定标签L1到等价类F,并且分发这个绑定给标签分发对等实体Ru1。Rd还绑定L2到等价类F,然后分发这个绑定到标签分发对等实体Ru2。L1是否等于L2不是mpls体系结构所决定的,这是一个本地的问题。

一个给定的lsr Rd绑定标签L到等价类F1,分发这个绑定给标签分发对等实体Ru1。Rd还绑定标签L到等价类F2,分发这个绑定到标签分发对等实体Ru2。如果Rd可以分辨一个分组的标签栈顶为L是由Ru1还是Ru2添加的话,就可以不要求F1一定等于F2。在这种情况下,我们说Rd对Ru1和Ru1分发的标签使用了不同的“标签空间”。

一般的说,如果下面的条件满足的时候,Rd才可以分辨是Ru1还是Ru2在标签栈顶插入了这个相同的标签L。

- Ru1和Ru2是Rd分发标签L的绑定的唯一的标签分发对等实体,并且 - Ru1和Ru2都是提供点到点链路接口直接和Rd相连的。

当这些条件满足的时候,一个lsr可以在接口的范围内使用标签,也就是说,标签在每个接口上是唯一的。我们可以说这个LSR用“基于接口的标签空间”。当这些条件不满足的时候,标签在分配它的lsr内部必须是唯一的,我们称这个lsr使用“基于平台的标签空间”。

如果一个特殊的lsr Rd使用两个点到点接口和一个Ru相连,Rd可以分发给Ru一个标签L到等价类F1的绑定,同时还有一个标签L到等价类F2的绑定,F1!=F2,如果并且只有当每个绑定只在一个点到点接口上是有效的。在其他情况下,Rd都不能分发给Rd将一个标签L到两个不同的等价类的绑定。

即使绑定被看作是在不同的层次上,这个也是要遵守的。在mpls中,没有为不同的层次保留不同的标签空间的概念。当解释一个标签的时候,标签的层次是毫不相关的。

这里有一个问题,对于一个lsr来说可能使用多个按平台的标签空间,或者在同一个接口上使用多个按接口的标签空间。体系结构并不禁止这样的应

用。然而在这种情况下,lsr必须使用某种方法来决定一个特定的输入标签是属于哪个标签空间的。当然,mpls的体系结构并不负责规定这方面的内容。例如,MPLS-SHIM规定了使用不同的标签空间给单播和多播,使用一个数据链路层代码点来区分两种标签空间。

3.15.标签交换路径,lsp输入点,lsp输出点

一个m层的lsp对于一个分组P来说是一系列的路由器,,具有以下的特征:

R1是LSP输入点,是一个lsr,它添加一个标签到分组P的标签栈顶,生成一个深度为m的标签栈;

对于所有的I,1在分组p从R1到R[n-1]发送的过程中,分组p的标签栈的深度始终保持为m;

对于所有的I,1对于所有的I,1决定是基于一个添加进去的标签栈进行的(也就是说,在一个m+k级的标签上,k>0)。

从另外一个方面来说,我们可以将分组p的m层的lsp看作下面一系列的路由器:

由一个lsr(lsp入口)开始,它添加一个m层的标签, 所有的这些中间lsr根据m层标签进行转发判断,

在lsp出口上,转发决定由m-k层标签交换决定,或者由非mpls转发过程处理。

这样的结果或者假设是不论何时一个lsr添加一个标签到一个标签分组中去,需要确保新的标签新标签对应一个等价类,这个等价类的lsp出口是分配标签栈中第二个标签的lsr。

如果对于一个特定的分组p(p的m层标签对应的是等价类F的时候),有一条m层的lsp的话,我们把这一系列的lsr称为“一个特定的等价类F的lsp”。

考虑一组可能是等价类F的lsp输入节点的节点。对于等价类F,每个输入节点都有一条lsp。如果一定数量的这样的lsp具有相同的lsp出口的时候,我们可以认为这一套lsp是一个树,他们的根是lsp出口。(因为数据在这个

树中向根的方向传送,这可以被称作多点到点树。)我们可以因此说这是这个特定的等价类F的“lsp树”。

3.16.倒数第二跳弹出

按照上一节的定义,如果对于分组p来说,是m级的LSP,p在从R[n-1]传送到Rn的时候,它的标签栈深度可以是m-1。也就是说,标签栈在LSP的倒数第二跳弹出,而不是在lsp的出口。

从体系结构的观点,这是最好的做法。M层标签的目的是将分组送到Rn。一旦R[n-1]已经决定了发送这个分组到Rn,这个标签就不再有任何的用处,实际上就不再需要再带着它了。

实现倒数第二跳弹出还有个实际的好处。如果我们不这样作的话,当lsp出口收到一个分组,它首先要查找栈顶标签,然后会发现它自己实际上就是这个分组的lsp出口。它必须将标签出栈,然后检查分组中剩下的部分。如果标签栈中还有其他的标签,出口将查找这个标签,然后根据转发的结果转发这个分组。(在这种情况下,m层lsp的分组的出口对于m-1层lsp来说是一个中间节点。)如果标签栈中没有其他标签,分组将按照网络层目的地址进行转发。注意,这样的话,出口就要进行两次标签查找和一次地址查找。 如果,使用倒数第二跳弹出,那么当在倒数第二跳查找这个标签的时候,它需要明确:1、它自己是倒数第二跳;并且2、下一跳是谁。

倒数第二跳出栈,基于对标签的查找结果转发分组。当lsp出口收到这个分组的时候,栈顶的标签已经是它自己的转发所需要的标签了。如果分组只有一个标签,lsp的出口将只用检查网络层首部,根据网络层地址进行转发。 这种技术允许出口只进行一次查找,倒数第二跳也只用查找一次。 如果下面两个条件满足,那么在一个标签交换的系统中转发的“快速通道”会很容易实现:

- 如果我们可以假设只需要一次查找,那么代码将会非常的简单; - 代码可以基于一个“时间预算”,它假设只需要一次的查找。 实际上,当倒数第二跳弹出实现的话,lsp的出口甚至都可以不是一个lsr。

然而,一些硬件交换引擎可能不支持标签栈的弹出,所以这个功能不是普遍需要的。还是可能在某些情况下不需要倒数第二跳弹出。因此,只有当出口节点明确的需要,或者lsp中的下一个节点不支持mpls的时候,倒数第二跳才可以弹出标签。(如果lsp中的下一跳支持mpls,但是不需要倒数第二跳弹出,那么倒数第二跳不会知道自己就是倒数第二跳节点。)

一个支持标签栈弹出的lsr,当它的下游标签分发对等实体请求这个功能的话,这个节点必须进行倒数第二跳弹出。

标签分发协议初始化的时候必须允许每个lsr决定它的邻接lsr是否可以弹出标签栈。一个lsr绝对不能要求一个标签分发对等实体弹出标签栈,除非对方真的可以实现这个功能。

如果使用倒数第二跳弹出的话,那么就需要搞清楚出口节点是否可以正确解释收到的分组的标签栈中的栈顶标签。只要3.14中描述的唯一性和范围的规则都正确遵守的话,那么就可以明确的解释收到的分组的栈顶标签。

3.17.LSP的下一跳

对于一个特定的标签分组,在一个特定的lsr中,lsp的下一跳是用于转发分组的nhlfe中的下一跳。

一个特定的fec的Lsp的下一跳是ftn映射的这个fec在nhlfe中的下一跳。 注意,lsp的下一跳可能和网络层路由算法指示的下一跳不同。当我们描述网络层路由算法的下一跳的时候,我们使用“L3下一跳”这个术语。

3.18.无效的输入标签

如果一个lsr收到了一个标签分组,而这个输入的标签还没有被绑定的话,这个lsr应该怎么做?它可以看作这个分组没有标签,分组作为非标签分组来转发。然而,在某种情况下,这样做可能会导致环回。如果上游lsr认为这个标签是绑定到一个显式路由,下游lsr认为这个标签没有被绑定到任何一个fec,并且如果这个非标签分组的逐跳ip路由将这个分组送回到上游lsr的话,就会形成一个环回。

还有一种可能就是,这个标签表示的路由无法从ip首部推算出来。 因此,当收到一个输入标签无效的标签分组的时候,必须丢弃这个分组,除非可以确定转发这个非标签分组不会有任何麻烦。

3.19.lsp控制:有序 vs

一些fec是由地址前缀产生的,这些地址前缀是通过动态的路由算法进行分发的。这些fec的lsp的建立可以通过以下两种方式:lsp控制或者有序lsp控制。

在lsp控制方式中,每个lsr,只要它承认了一个特殊的fec,就的将一个标签绑定到这个fec上去,标签将这个绑定分发给它的标签分发对等实体。这种方法和传统的ip路由的工作方法相一致,依赖于路由算法的快速聚合来保证每个数据包被正确的分发。

在有序lsp控制方式中,一个lsr只会当它自己是这个fec的出口lsr的时候,才会将一个标签绑定到一个特定的fec上去。或者是它已经从一个fec的下一跳收到这个fec的标签绑定。

如果想要保证在一个特定的fec中的业务所经过的路径有一些特殊的属性的时候(例如,业务不会两次经过任一个节点,一定数量的资源对这些业务是可用的,或者业务必须按照显式路由传送,等等。),必须使用有序控制。在控制下,一些lsr会在lsp被完全建立起来之前,对fec中的业务进行交换,并且,因此这个fec中的一些业务会在相应特性要求之外的路径中传播。如果fec的确认是相应的lsp建立的结果的话,也是需要有序控制的。

有序lsp的建立可以是从入口开始的,也可以是从出口开始的。

有序控制和控制是可以同时使用的。然而,除非一个lsp中的所有的lsr都使用有序控制方式,否则,网络表现出的整体的效果是控制方式的,因为一个节点是无法保证在整个lsp被建立之前是否被使用的。 这个体系结构允许每个节点的选择控制和有序控制。由于这两种方法的相互作用,一个给定的lsr只需要支持其中一个。一般的说,控制和有序控制的选择对标签分发机制没有任何影响。

3.20.聚合

将业务划分到fec中的一种分发是为每个路由表中的地址前缀创建一个的fec。然而,在一个特定的mpls域中,这将导致多个fec中的业务实际上使用的是相同的路径。例如,一组不同地址前缀可能具有相同的出口节点,并且标签交换仅仅是用来将业务送到出口节点。在这种情况下,在这个mpls域中,这些fec的集合也是一个fec。这就产生了一个选择:可以为每个fec绑定不同的标签,或者也可以将这些fec的集合使用一个标签来绑定并且将这个标签应用到这个集合中的所有的业务。

将一个标签绑定到fec的集合标签将这个标签应用到集合中所有的业务的过程被称为“聚合”。Mpls体系结构是允许聚合的。聚合可以减少标签的数量,标签还可以减少相应的标签分发控制所需的业务。

对于给定的一组可以聚合到一个单一的fec中的fec,可能的结果是:

(a)将它们聚合到一个fed;(b)将它们聚合到一组fec;(c)根本不做任何聚合的处理。如果我们使用“粒度”来描述聚合的话,上面的情况可以分别描述为(a)最粗糙的粒度;(c)最细的粒度。

当使用有序控制的时候,对于一组给定的fec,每个lsr都应该采用该fec它的下一跳所使用的粒度。

当使用控制的时候,这里可能会有两个邻接的lsr,Ru和Rd,他们对于这组fec的聚合是不同的。

如果Ru比Rd使用更细的聚合粒度,这不会产生任何问题。对于这组fec,Ru分发的标签数目被Rd分发的多。这意味着,当Ru需要转发属于这些fec的标签分组给Rd的时候,它可能需要将n个标签映射到m个标签,n>m。还有一种可以作为选项的方法,Ru还可以收回它已经分发的这组数目为n的标签,然后再分发一组什么为m的标签,和Rd的粒度等级相对应。并不是非要这样做不可,但是这样做可以减少Ru分发的标签个数,标签对于Ru,分发大量的标签也没有什么好处。是不是要这样做是一个本地问题。 如果Ru的聚合粒度比Rd更粗糙(也就是说,对于这组fec,Rd分发了n个标签,Ru分发了m个标签,而n>m),这时有两个选择:

可以采用Rd的更细的粒度。这将要求Ru收回它分发的m个标签,并且重新分发n个标签。这是最好的选择。

还可以简单的将Ru的m个标签映射到Rd的n个标签的一个子集中,但是要保证这种映射的结果要具有相同的路由。例如,假设Ru对于所有的通过一个出口lsr的业务,使用一个标签,尽管Rd对这些业务按照的分组目

的地址绑定了多个标签。如果Ru知道出口lsr的地址,并且Rd已经为表示这个相同的地址的fec绑定了一个标签,那么Ru可以简单的使用这个标签。 不论怎样,每个lsr都需要知道(通过配置)使用什么样的粒度。当使用有序控制的时候,要求每个节点知道在本节点离开mpls网络的fec的粒度。对于控制,最好的结果是保证每个lsr都知道每个fec的粒度。然而,在许多情况下可以通过对所有的fec都使用单一级别的粒度来实现(例如“每个转发表中的ip前缀一个标签”,或者“每个出口节点一个标签”)。

3.21.路由选择

路由选择是为一个特定的fec选择lsp的方法。Mpls协议体系结构为路由选择支持两个选项:(1)逐跳路由;(2)显式路由。

逐跳路由允许每个节点的选择每个fec的下一跳。在现存的ip网络中,这是一种通用的模式。一个“逐跳路由的lsp”是使用逐跳路由来选择lsp中的路由器。

在一个显式路由的lsp中,每个lsr不用的选择下一跳,一个单独的lsr,一般来说是lsp的入口或者出口,规定这个lsp中的部分或者全部的lsr。如果一个lsr规定了整个lsp,这个lsp是“严格的”显式路由。如果这个lsr只规定了lsp中的一部分,这个lsp就是“宽松的”显式路由。 一个显式路由的lsp中的lsr的次序可以由配置来选择,或者由一个节点动态选择(例如,出口节点使用从链路状态数据库中学习到的拓扑信息计算出在这个出口节点终结的所有的路径树)。

显式路由对于一些特殊的用途来说是非常有用的,例如策略路由或者流量工程。在mpls中,显式路由需要在标签被分配的时候指定,但是显式路由不用为每个ip分组指定。这使得mpls的显式路由比ip源路由更有效。 使用显式路由的过程,不论是严格的还是松散的,都不是本文档讨论的内容。

3.22.缺少输出标签

在一个标签分组在lsp中传送的时候,偶尔会出现这样的现象,当这个分组到达一个lsr的时候,ilm不能将这个分组携带的输入标签映射到一个nhlfe中,并且,这个输入标签可能还是有效的。这是由于这个分组的下一跳处于一种临时状态或者运行出错造成的。

在这种情况下,可能会认为剥离这个分组的标签栈并且试图基于分组的网络层首部对该分组进行传统的转发处理。然而,一般来说,这样做并不是一种安全的处理:

如果分组是在一个显式路由的lsp中传送,这样做的结果可能会造成环回。

分组的网络层首部可能没有足够的信息来让这个lsr进行正确的转发处理。 除非可以确保上述的情况不会发生(当然,这不是本文档讨论的内容),才可以进行这样的处理。唯一安全的处理就是丢弃这个分组。

3.23.生存时间TTL

在传统的ip转发过程中,每个分组都在首部中携带一个TTL值。不论何时,当一个分组通过一个路由器的时候,它的ttl值就会减1。如果在这个分组到达目的地之前,分组的ttl为0,这个分组就会被丢弃。

这种方法为防止转发的环回提供了一定程度的保护措施,转发的环回可能由于错误的配置,路由算法的错误或者较慢的收敛速度等原因而存在。Ttl还可以用于其他的用途,例如在多播的范围,对“traceroute”命令的支持等。这意味着和ttl相关的,有两个问题需要mpls来考虑:(1)ttl作为抑止环回的一种方法;(2)ttl作为实现其他功能,例如分组范围的一种方法。 当一个分组在lsp中传送的时候,它应该和那些不使用标签转发的分组一样,表现出相同的ttl。如果分组在一个层次结构的lsp中传送,经过的全部的lsr的跳数应该在它的ttl值中有所反映。

对ttl的处理方法,由于mpls标签存在的位置的不同而变化。标签可能存在于mpls规定的shim首部中,或者mpls标签也可以存在于L2首部中,例如ATM和帧中继。

如果标签值在shim中编码,这个垫片存在于数据链路层和网络层首部之间,这个垫片必须有一个ttl字段,并且应该使用网络层首部中的ttl值进行初始化,在每个lsr跳的处理中,都应该将垫片中的ttl值减1,最后,当分组从它的lsp中送出的时候,垫片中的ttl值应该被复制到网络层首部的ttl字段中。

如果标签值被编码到数据链路层的首部(例如,atm的aal5首部的vpi和vci字段),并且被标签的分组被应该L2交换机转发(也就是应该atm的交换机),数据链路层(像atm)没有ttl字段,那么在每个lsr跳,就不可能对分组的ttl进行减1的处理。应该lsp段落中如果包含一系列的不能对分组的ttl进行减1操作的lsr,这个段落将被称为“没有ttl处理的lsp段落”。 当应该分组从应该没有ttl处理的lsp段落中送出的时候,它应该被设置应该ttl值,来反映它所经过的lsr的跳数。在单播的情况下,可以通过传播一个lsp的长度值给入口节点来实现,使得入口节点可以在转发分组进入这个没有ttl处理的lsp段落之前就将这个ttl减少相应的跳数。

有时候,在一个没有ttl处理的lsp段落入口,就可以知道一个特定分组在到达这个段落的出口之前,它的ttl就会溢出。在这种情况下,这个没有ttl处理的lsp段落的出口lsr对这个分组不能进行分组交换。这意味着,必须发展特殊的处理来支持traceroute功能,例如,traceroute分组将使用传统的逐跳转发方式进行转发处理。

3.24.环回控制

在一个没有ttl处理的lsp段落,ttl无法被用于防止转发环回。环回控制的重要性有赖于用来在这个段落中提供lsr功能的特殊硬件。

假设,以atm为例,atm交换硬件被用于提供mpls交换功能,标签由

vpi/vci字段携带。因为atm交换硬件不能将ttl减1,这里无法对环回提供保护机制。如果atm硬件可以对携带不同vpi/vci值的输入信元,公平的提供对

缓冲池的访问,这个环回对其他的业务不会产生影响。如果atm硬件不能提供这种对缓冲的公平访问,那么即使短暂时间的环回都会导致这个lsr整体性能的严重下降。

即使可以提供对缓冲区的公平访问,提供环回检测的手段也是非常有必要的。另外,即使ttl或者按照vc进行公平的排队处理可以提供防止环回影响的功能,避免在建立lsp的环回也是非常必要的。所有的可能连接在没有ttl处理的lsp段落的lsr都需要支持一种通用的检测环回的技术。然而,环回检测技术是可选的,环回检测技术在[MPLS-ATM][MPLS-LDP]中有规定。

3.25.标签编码

为了传送一个有标签栈的分组,必须定义一个具体的标签栈的编码。体系结构支持几种不同的编码技术;编码技术的选择取决于用于转发标签分组的特定的设备。

3.25.1.mpls规定的硬件和软件

如果使用mpls规定的硬件或者软件来转发标签分组,最显而易见的编码标签栈的方法是定义一个新的协议,我们称为“垫片(shim)”,它存在于数据链路层和网络层首部之间。这个垫片只是网络层首部的封装,它应该是协议的,所以可以用来封装所有的网络层。因此,我们叫做“通用的mpls封装”。

通用的mpls封装被数据链路层协议封装,在[MPLS-SHIM]中定义。

3.25.2.ATM交换机作为lsr

需要注意的是,mpls转发过程和atm交换机的标签转发一模一样。Atm交换机使用输入端口和输入的vpi/vci作为索引查找“交叉连接”表,得到输出端口和输出的vpi/vci。因此,如果如果一个或者多个标签直接编码到atm交换机用来存取的字段,交换机就可以当作应该lsr。我们称这样的设备为“atm lsr”。

这里有三种方法将标签编码到atm信元首部(对aal5来说):

SVC编码

使用vpi/vci字段编码栈顶标签。这种技术可以在任何的网络中使用。每个lsp作为一个ATM的svc,标签分发协议变成atm的“通知”协议。使用这种编码技术,ATM-lsr不能实现入栈、出栈的标签栈操作。

SVP编码

使用VPI字段编码栈顶标签,VCI字段编码标签栈中的第二个标签。这种技术和前一种技术相比有一定的优势,它允许使用atm的vp交换。Lsp作为atm的svp,标签分发协议是atm的通知协议。然而,这种技术不能一直使用,如果网络包括一个atm的虚通道,并且穿过一个非mpls的atm网络,那么mpls使用的vpi字段将不再有效。当这种编码技术使用的时候,位于vp出口的atm lsr可以进行出栈操作。

SVP多点编码

如果在标签栈中有多个标签,标签的个数多于在atm首部中可以编码的个数,atm编码必须和通用的封装方式混和使用。

3.25.3.这几种编码技术的互操作性

如果是一个lsp中的一个段落,R1在发送分组P到R2的时候使用的标签栈的编码技术和R2发送给R3时使用的编码技术不一样。一般的说,mpls体系结构支持lsp中的每一跳使用不同的标签栈编码技术。因此,当我们讨论处理一个标签分组的过程的时候,我们讨论的是在分组的标签栈上的抽象操作。当收到一个标签分组的时候,lsr必须对标签栈进行解码,来得到标签栈的当前值,然后操作标签栈,决定新的标签值,然后将新的标签栈正确的编码,最后将这个标签分组发送给下一跳。

不幸的是,atm交换机不能将一种编码技术翻译成另外一种。Mpls体系结构因此要求,当使用两个atm交换机连接的时候,这两个atm交换机使用相同的编码技术。

Mpls网络包括atm交换机和使用shim首部的lsr组合。在这种网络中,有些lsr既有atm接口又有shim接口。这就是一个lsr具有不同的标签栈编码技术的一个例子。

3.26.标签合并

假设,一个lsr将多个标签绑定到一个特定的fec上。当转发这个fec中的分组的时候,可以使用一个单一的输出标签表示所有的分组。事实是,这个fec中的两个不同的分组,在收到的时候携带的是不同的输入标签,可以使用相同的输出标签来转发它们。这种能力被称为“标签合并”。

如果一个lsr从不同的输入接口上收到两个分组,或者收到两个不同标签的分组,然后在同一个输出接口上使用同样的标签发送这个两个分组,我们称这个lsr有标签合并的能力。一定分组被传送,它们是从不同接口上收到或者它们具有不同的输入标签的信息就会丢失。

如果一个lsr从不同的输入接口上收到两个分组,或者收到两个不同标签的分组,然后必须在两个不同的接口上发送它们或者必须使用不同的标签发送它们的话,那么我们称这个lsr没有标签合并的能力。Atm的lsr使用svc或者svp编码技术就不能进行标签合并的处理。

如果一个特定的lsr,不能进行标签合并,如果处于同一个fec中的两个分组,携带不同的输入标签,那么,它们必须在不同的输出接口上转发,或者必须携带不同的输出标签。在标签合并的情况下,每个fec的输出标签只需要一个。不使用标签合并,每个fec的输出标签的个数最大为网络中的节点个数。

使用标签合并,一个特定的lsr中每个fec的输入标签的个数不大于标签分发邻接点的个数。不使用标签合并,一个特定的lsr所需的每个fec的输入标签的个数最大为,转发这个fec中的业务的上游节点的个数。实际上,对于

一个lsr来说,确定必须为每个fec支持多少个输入标签是非常困难的一件事情。

Mpls体系结构提供合并和非合并两种方式,但是允许lsr不支持标签合并。这导致在合并lsr和非合并lsr之间必须确保正确的互操作的问题。这个问题和数据报媒体和atm的区别还不太一样。不同的媒质类型是协商的。

3.26.1.非合并的lsr

mpls的转发过程和atm以及帧中继非常相似。一个数据单元到达,在“交叉连接表”中,进行标签(VPI/VCI或者DLCI)查找,得到一个输出端口和新的标签值。实际上,可以使用这种技术进行mpls转发,标签分发协议也可以使用“通知协议”来建立交叉连接表。

不幸的是,这种技术不支持标签合并。在atm中,如果有人试图进行标签合并,结果会导致不同分组的信元交错。如果从不同的分组分离出来的信元交错的话,它们将不可能再合并成为一个分组。一些帧中继交换机也使用信元交换,这些交换机同样不可能进行标签合并。原因是一样的。

我们对这个问题,有两种解决方案。首先,mpls将允许使用非合并的lsr;其次,mpls将支持一种处理过程,使得atm交换机的功能和一个支持合并的lsr一样。

由于mpls支持合并和非合并lsr,mpls也要包括在它们之间确保正确互操作的过程。

3.26.2.合并以及非合并lsr的标签

一个上游lsr支持标签合并,它对每个fec只需要发送一个输出标签。一个不支持标签合并的lsr,在发送一个fec中的分组的时候,需要支持多个标签。然而,无法知道到底需要多少标签。这取决于对于这个fec来说,有多少个上游节点。

在mpls体系结构中,如果一个特定的上游邻居不支持标签合并,除非这个lsr显式的请求这个fec的标签,否则它对这个特定的fec,将不会发送任何标签。上游邻居将会进行多次这样的请求,每次给一个新的标签。当一个下游邻居不支持标签合并的时候,那么它还是要请求它的下游邻居新的标签。 当然可能这里有一些节点支持标签合并,但是只能合并有限的输入标签到一个输出标签。假设,例如由于一些硬件的,一个节点可以合并4个输入标签到一个输出标签。假设这个特殊的节点对于一个特定的fec,收到6个输入标签,在这种情况下,这个节点可以将这6个输入标签合并到2个输出标签中去。

是否将标签合并应用到显式路由lsp中有待以后的研究。

3.26.3.atm的合并

3.27.隧道和分层

有时,一个路由器Ru采用显式的操作,使得一个特定的分组被分发到另外一个路由器Rd,而Ru和Rd在这个分组的逐跳通道上,并不是直接相连的,并且Rd也不是这个分组的最终目的地。例如,将一个分组封装在一个目的地址是Rd的网络层分组之内。这样就形成了一个从Ru到Rd的隧道。我们将任何一个经过这样的处理的分组称为“被隧道的分组”。

3.27.1.逐跳路由的隧道

如果一个隧道分组从Ru到Rd所经过的路径就是逐跳路由的路径,我们说这个分组是在一个“逐跳路由隧道”中传送,这个隧道的发送点是Ru,接收点是Rd。

3.27.2.显式路由隧道

如果一个隧道分组从Ru发送到Rd的时候,经过的路径不是逐跳路由的路径,我们就说这是一条“显式路由隧道”。发送点为Ru,接收点为Rd。例如,我们在一个显式路由隧道中发送一个分组的话,应该将这个分组使用源路由封装。

3.27.3.LSP隧道

隧道也可以作为lsp来实现,我们使用标签交换而不是网络层的封装来使得分组在隧道中传送。隧道将是一个lsp ,R1是隧道的发送点,而Rn是隧道的接收点。这就称作是“lsp隧道”。

在这个lsp隧道中传送的分组形成一个fec,隧道中的每个lsr必须为这个fec指定一个标签(也就是说,必须为这个隧道分配一个标签)。为一个lsp隧道分配一个特定的标签的标准是属于隧道的发送点的一个本地问题。为了使分组进入这个lsp隧道,发送点将这个隧道的标签压入到标签栈,然后将这个标签分组发送到这个隧道的下一跳。

如果对于隧道的接收点来说,确定它从隧道中收到哪些分组不是必须的功能,标签栈可以在隧道中进行倒数第二跳弹出。

一个“逐跳路由lsp隧道”是一个隧道,就是在发送点到接收点之间的一个逐跳路由的lsp。

一个“显式路由lsp隧道”是一个lsp隧道,也就是一个显式路由的lsp。

3.27.4.分层:lsp中的lsp隧道

考虑这样的一个lsp 。我们假设R1收到非标签的分组P,在它的标签栈中压入标签使它可以在这个路径中传送,并且,实际上,这是一个逐跳路径。然而,让我们进一步假设R2和R3不是直接相连的,但是是通过一个lsp的隧道“邻接”。所以,实际上,分组P在隧道中通过的次序为

当分组p从R1到R2的时候,它有一个深度为1的标签栈。在R2上,进行标签交换,决定分组P必须进入隧道。R2首先用一个到达R3的标签替换输入标签。然后,它将一个新的标签入栈。这个2级标签意味着到达R21。在R21、R22、R23上对2级标签进行交换。在R2-R3的隧道中,执行倒数第二跳弹出,在分组转发给R3之前,弹出栈顶标签。当R3收到分组p,P只有1级标签。由于R3是分组P的1级lsp的倒数第二跳,它弹出标签栈顶,R4收到的是没有标签的分组P。 标签栈机制允许lsp隧道为任意深度。

3.27.5.标签分发对等实体和层次

假设分组p在1级的lsp 中传送,并且,当从R2传送到R3的时候,经过2级lsp 。从2级lsp的角度来看,R2的标签分发对等实体为R21。从1级lsp的角度来看,R2的标签分发对等实体为R1和R3。一个lsr可以在lsp层次的每一层都有标签分发对等实体。我们在4.6和4.7中将看到一些使用这种层次结构的方法。注意,在这个例子中,R2和R21必须是IGP的邻居,但是R2和R3不一定是IGP的邻居。

当两个lsr是IGP邻居的时候,我们使用“本地标签分发对等实体”来描述它们。当两个lsr是标签分发对等实体,但是不是igp邻居的时候,我们使用“远端标签分发对等实体”来描述它们。在上面的例子中,R2和R21是本地标签分发对等实体,而R2和R3是远端标签分发对等实体。

Mpls体系结构在不同的层次上,支持两种分发标签的方法:显式对等实体和默认对等实体。

通过发送标签分发协议消息,lsr可以和自己的本地标签分发对等实体,实现标签分发。然而,和远端标签分发对等实体进行标签分发要用到以下的两种方法之一:

显式对等实体 - 在显式对等实体中,lsr通过发送标签分发协议消息给对等实体来分发标签。在远端标签分发对等实体的个数比较小的时候,或者高层标签绑定的数目比较大的时候,或者远端标签分发对等实体是处于另外一个路由域的时候,这种技术是非常有用的。当然,lsr必须知道哪个标签是分发给哪个对等实体的。

默认对等实体 - 在默认对等实体中,lsr不发送标签分发协议消息给它的对等实体。而是分发高层标签给它的远端标签分发对等实体,lsr将一个高层标签作为一个低层的属性进行编码,然后分发低层标签(带着那个属性),给它的本地标签分发对等实体。本地标签分发对等实体接下来将信息传播给它的标签分发对等实体们。这个过程不断的进行下去直到信息到达远端的对等实体。当远端标签分发对等实体的个数比较大的时候,这种技术是非常有用的。默认对等实体不需要一个n次方的对等实体的mesh结构来分发标签给远端标签分发对等实体,因为信息是通过本地标签分发对等实体携带的。然而,默认对等实体需要中间节点存储它们不感兴趣的信息。

3.28.标签分发协议的传送

一个标签分发协议用在一个mpls网络的节点之间,来建立和维护标签绑定。为了mpls的正确操作,标签分发信息必须可靠的传输,和一个特定的fec有关的标签标签分发协议消息,必须按照顺序发送。流量控制是必要的,同样,在一个数据报中携带多个标签信息的能力也是必要的。

达到这些目的的一种方法是使用TCP作为传输协议,在[MPLS-LDP]和[MPLS-BGP]中有描述。

3.29.为什么有多种标签分发协议?

这个体系结构并没有规定在什么环境下使用什么标签分发协议。但是,有以下几点注意事项。

3.29.1.BGP和LDP

在许多情况下,需要将标签绑定到按照路由地址前缀来标记的fec上去。如果这里有一个标准,普遍的配置路由算法分发这些路由,将标签分发信息放在分发的路由中来实现标签的分发。

例如,bgp就可以分发这样的路由,并且,如果一个bgp的路由器需要分发标签给它的bgp的对等实体,使用bgp进行标签分发会有许多好处。特别的是,它允许bgp路由反射器来分发路由,因此,在bgp对等实体之间使用ldp分发标签,具有可扩展的优点。

3.29.2.RSVP分发标签

当rsvp用于为特定的流建立资源预留的时候,它可以用来标记这个流中的分组,所以,rsvp的filterspec不需要应用到每一跳。在rsvp的通道预留建立的过程中,使用rsvp分发标签,是标签分发的有效的方法。

3.29.3.显式路由lsp的标签

在一些mpls的应用中,特别是在应用流量工程的时候,需要建立一个显式路由通道。还要在这个路径上保留资源。 有两种方法可以实现这个功能:

开始使用现有的用来建立资源预留的协议,并且将它扩展为支持显式路由和标签分发。

开始使用现有的用来标签分发的协议,并且将其扩展为支持显式路由和资源预留。

前一种方案是[MPLS-RSVP-TUNNELS]协议的进化,而后一种方案是[MPLS-CR-LDP]的一种进化。

3.30.多播

未知

4.MPLS的一些应用

4.1.MPLS和逐跳路由业务

mpls的一些应用中要求携带有特定标签的分组要在和逐跳路由相同的路径上转发,用于转发应该特定的网络层地址的分组。

4.1.1.地址前缀的标签

一般的说,路由器R通过在它的路由表中查找地址前缀X,决定分组P的下一跳,在路由表中对P的目的地址进行最长匹配。也就是说,一个给定的FEC中的分组就是和R的路由表中的给定地址前缀匹配的分组。在这种情况下,一个FEC就对应一个地址前缀。

注意,一个分组P可以指定给一个等价类F,等价类F可以被指定给一个地址前缀X。可是就是在这一连串的指定中,分组P的目的地址是可以不和地址前缀X匹配的。

4.1.2.为地址前缀分发标签

4.1.2.1.对于一个地址前缀的标签分发对等实体

对于地址前缀X来说,只有当下列条件符合的情况下,lsr R1和R2是标签分发对等实体。

1、 R1中到X的路由是通过一个IGP的实例学习到的,而R2在这个IGP

的实例中是R1的一个邻居。 2、 R1中到X的路由是通过路由算法A1学习到的,而路由算法A2同样

也学习到了这个路由,对于A2,R2是A1的邻居。 3、 R1是一个lsp通道的接收终点,R1位于另外一条lsp中,R2是那条

lsp的发送节点,R1和R2使用同一个IGP,并且位于这个IGP的同一个域中,R1中到X的路由是从这个igp的实例中学习到的,或者是这个igp实例同样学习到这个路由表中已经存在的路由。 4、 R1的到X的路由是通过bgp学习到的,并且R2是R1的bgp的一个

对等实体。 一般的说,这些规则保证了如果到达一个特定地址前缀的路由是通过igp发布的,那么这个地址前缀的标签分发对等实体就是这个igp的邻居。如果这个路由是通过bgp发布的,标签分发对等实体就是这个bgp的对等实体。在其他的情况下,例如lsp的隧道,隧道的端点就是标签分发对等实体。

4.1.2.2.分发标签

为了使用mpls根据任意的地址前缀,按照逐跳路由转发分组,每个lsr必须:

将一个或者多个标签绑定到每个地址表中的地址前缀上去。

对于每个这样的地址前缀X,使用一个标签分发协议来分发标签到X的绑定给它的和X相关的标签分发对等实体。

如果R1使用bgp来分发到X的路由,另外的R2作为BGP的到X的下一跳,并且如果R1知道R2已经为X分配了一个标签L,那么R1必须分发在L和X之间绑定的标签给所有BGP的对等实体。

这些规则可以保证当bgp的路由要被分发给igp的时候,和bgp路由中的地址前缀对应的标签被分发给igp的邻居。另外,绑定到bgp路由的标签被分发给另外的bgp的speaker。

这些规则用于指示一个给定的lsr哪些标签绑定必须被分发给其他的lsr。

4.1.3.使用逐跳路由路径作为lsp

5.逐跳ldp

这里讨论的是在逐跳路由路径上的标签绑定。也就是说标签是对应到一个路由表中的地址前缀的。

5.1.标签的通知和使用的过程

在标签绑定的分发过程中,会有以下几个处理步骤。本别在上游或者下游lsr节点上进行。

下游lsr节点必须执行:

• 分发处理, • 回收处理。 上游lsr节点必须执行:

• 请求处理, • 不激活处理, • 释放处理, • 标签使用处理。

对于每个处理过程,mpls体系结构都支持了一些参数。

然而,mpls体系结构不支持所有的可能的参数的组合,而只支持其中的一部分。支持的参数的组合在5.2中进行描述,并且我们会在那里讨论不同的组合之间的互操作性。

5.1.1.下游lsr:分发过程

一个下游节点,当它需要为一个特定的地址前缀分发一个标签绑定信息给它的标签分发对等实体的时候,使用这个分发过程。体系结构支持四种不同的分发分发处理。

不考虑特殊的处理,如果一个特定地址前缀的标签绑定被一个下游lsr节点Rd分发给一个上游lsr节点Ru,并且不管什么时候这个绑定的属性发生了变化,Rd必须通知Ru这个新的属性。

如果一个lsr维护多个路由,都是到同一个特定的地址前缀的话,这个lsr是否需要为这个地址前缀绑定并且分发多个标签是属于这个lsr的内政问题。

5.1.1.1.无条件入栈(PushUnconditional)

Rd是一个lsr,我们假设:1、X是Rd的路由表中的一个地址前缀;2、Ru是Rd关于X的一个标签分发对等实体。

不管什么时候,当上述的两个条件满足的时候,Rd必须为X绑定一个标签,并且将这个绑定分发给Ru。同时,Rd有责任跟踪这个已经分发给Ru的绑定,并且要保持这个绑定的有效性。

那些在lsp控制模式中,主动提供下游标签分配的lsr节点们需要使用这种处理过程。

5.1.1.2.有条件入栈(PushConditional)

Rd是一个lsr,我们假设:1、X是Rd路由表中的一个地址前缀;2、Ru是Rd关于X的一个标签分发对等实体;3、Rd要么是一个lsp的出口,要么是一个lsp的代理出口,要么Rd中,X的L3下一跳是Rn,并且Rn不等于Ru,Rn还必须已经为X绑定了一个标签并且已经分发给Rd。

那么,一旦这些条件满足,Rd应该为X绑定一个标签并且分发给Ru。 无条件入栈处理会导致路由表中的所有地址前缀都被绑定标签并且分发,而有条件入栈处理只会使路由表中的部分的地址前缀被绑定并且分发,这部分地址前缀是已经从这个lsp中的下一跳收到标签绑定的那部分地址前缀,是那些L3下一跳不能再进行mpls处理的地址前缀。

那些在有序的lsp控制模式中,进行主动下游标签分配的节点的节点需要使用这样的处理。

5.1.1.3.无条件出栈(PulledUnconditional)

Rd是一个lsr,我们假设:1、X是Rd路由表中的一个地址前缀;2、Ru是Rd关于X的一个标签分发对等实体;3、Ru已经显式的请求Rd为X绑定一个标签并且分发给Ru。

那么,Rd应该绑定一个标签到X,并且分发这个绑定到Ru。注意,如果X在Rd的路由表中找不到的话,或者如果Rd对于X来说,不是Ru的标签分发对等实体的话,Rd一定要通知Ru它不能提供这个绑定信息。

如果Rd已经将X的绑定分发给了Ru,并且Rd从Ru那里又收到了一个关于地址前缀X的绑定请求,它将绑定第二个标签并且分发这个新的绑定给Ru。第一个标签绑定仍然有效。

在lsp控制模式下,进行下游按需标签分发的节点要进行这样的处理过程。

5.1.1.4.有条件出栈(PulledConditional)

Rd是一个lsr,我们假设:1、X是Rd路由表中的一个地址前缀;2、Ru是Rd关于X的一个标签分发对等实体;3、Ru已经显式的请求Rd为X绑定一个标签并且分发给Ru;4、Rd要么是一个lsp的出口,要么是一个lsp的代理出口,要么Rd中,X的L3下一跳是Rn,并且Rn不等于Ru,Rn还必须已经为X绑定了一个标签并且已经分发给Rd。

一旦这些条件都满足,Rd应该为X绑定一个标签并且分发给Ru。注意,如果X不在Rd的路由表中并且X的绑定不能从Rd的X相关的下一跳得到,或者如果Rd对于X来说不是Ru的一个标签分发对等实体,那么,Rd必须通知Ru,它不能提供这个绑定。

然而,如果只有一个条件不满足,这个条件是Rn没有提供一个并且给Rd的话,Rd必须延期响应Ru,直到它从Rn那里收到关于X的绑定。 如果Rd已经分发了一个和地址前缀X相关的并且绑定给Ru,并且在其后的一段时间内,这个标签绑定的任何属性发生改变,Rd都必须重新分发这个标签绑定给Ru,当然要携带新的属性。Rd必须这样做,即使Ru并没有发出新的请求。

在有效lsp控制模式下,执行下游按需标签分发的节点都要这样做。 在5.2中,我们将讨论如何选择特定的处理步骤以及确保在选择了不同的处理过程的lsr之间的互操作性。

5.1.2.上游lsr:请求过程

上游节点上游这个请求处理过程来决定什么时候为一个地址前缀向它的下游节点显式的请求这个前缀的绑定并且分发这个绑定。这里有三种可能的处理过程。

5.1.2.1.从不请求(RequestNever)

要紧牙关,绝对不要低三下四的请求什么标签!如果下游节点使用有条件的入栈处理(也就是有序的主动分发方式)的时候,或者使用无条件入栈(也就是的主动分发方式)的时候,这是十分有用的。但是,如果下游节点是使用有条件或者无条件的出栈方式(也就是下游按需标签分发方式)的时候,不能这样干。

当使用下游主动标签分发方式和自由标签保持模式的时候,节点使用这样的处理过程。

5.1.2.2.按需请求(RequestWhenNeed)

只要这个地址前缀的L3下一跳发生改变的时候,就发送一个请求。或者当学习到一个新的地址前缀的时候,或者对于一个给定的地址前缀,这个节点还没有从下一跳获得到一个标签绑定。

只要保守的标签保持模式使用的时候,节点使用这样的处理过程。

5.1.2.3.收到请求再请求(RequestOnRequest)

除了像5.1.2.2.中描述的那样按需发送请求之外,只要收到一个请求,就发送一个请求。如果Ru不是一个lsp的入口,它只需要在收到它的上游节点的请求的时候再发送请求。

如果Rd从Ru收到一个请求,请求地址前缀X的绑定,Rd已经分发给Ru一个标签,那么,Rd应该分配一个新的标签绑定到X,并且分发这个绑定。(Rd是否可以立即分发这个绑定给Ru取决于节点使用的分发处理过程。) 那些进行下游按需标签分发,但是不进行标签合并的节点使用这样的处理过程,例如一个ATM的节点,它不能执行VC的合并。

5.1.3.上游lsr:不激活处理

如果Ru和Rd对于地址前缀X,分别是上游和下游标签分发对等实体。并且,Rd是Ru对于X的L3下一跳,并且Ru向Rd请求一个关于X的绑定,但是Rd回应说它不能提供这个绑定,因为它对于X没有下一跳信息,那么不激活处理过程决定了Ru如何响应。这里有两种可能的处理过程控制Ru的行为:

5.1.3.1.请求重试(RequestRetry)

Ru应该在稍后的一段时间再次发送请求。也就是说,请求者有责任重试来获取所需的绑定。在下游按需标签分发的模式下,使用这个处理过程。

5.1.3.2.请求不重试(RequestNoRetry)

在5.1.3.Ru不会再发送请求,取而代之的做法是Ru会假设Rd将在这个绑定有效的时候自动的将绑定信息发送给它。如果Rd使用无条件入栈或者有条件入栈(也就是下游主动标签分发模式)的时候,这样的处理过程将会用到。

注意,如果Rd说它无法提供一个绑定信息给Ru,是因为在Rd上的一些错误的条件,而不是Rd没有下一跳信息,Ru应该进行的处理是受ldp的错误恢复条件支配的,而不能再按照不激活的处理过程进行处理。(没看懂啊!tnnd)

5.1.4.上游lsr:释放过程

假设Rd绑定了一个到地址前缀X的标签,并且已经分发给Ru。如果Rd对于地址前缀X而言,在Ru的L3路由表中不是Ru的下一跳,或者说不再是Ru的L3下一跳,那么,Ru将不再使用这个标签。这里我们所讨论的释放处理过程就是用来决定Ru在这种情况下如何操作。这里有两种可能的处理方式。

5.1.4.1.发生改变的时候释放(ReleaseOnChange)

Ru应该释放这个绑定,并且通知Rd它已经释放了。当我们使用保守的标签保持模式的时候应该这样做。

5.1.4.2.发生改变的时候不释放(NoReleaseOnChange)

Ru继续维护这个绑定信息,当Rd以后成为Ru的L3下一跳的时候,Ru就可以立即再次使用这个绑定信息。当我们实现自由的标签保持模式的时候我们就可以这样处理。

5.1.5.上游lsr:标签使用过程

假设Ru从Rd那里收到了关于地址前缀X的标签绑定L,并且Ru对于X来说是Rd的上游,并且事实上Rd也是RuL3路由表中的下一跳。 如果Rd就是Ru的路由表中的下一跳,Ru就会使用这个绑定信息。如果当Ru收到绑定信息的时候,对于地址前缀X,Rd还不是Ru的L3下一跳,Ru这个时候不会使用这个绑定信息。如果对于地址前缀X,Rd后来成为了Ru的L3下一跳,那么Ru才可以开始使用这个绑定信息。 标签使用处理过程决定了Ru怎么使用Rd的绑定信息。

5.1.5.1.立即使用(UseImmediate)

不管在什么时候,一旦Ru从Rd那里收到了一个X的绑定信息,并且Rd就是Ru的L3下一跳,对于地址前缀X,Rd将成为Ru的LSP的下一跳,Ru立即使用这个绑定信息。在我们不使用环回检测的时候,我们使用这样的这个处理过程。

5.1.5.2.在没有检测到环回的情况下使用(UseIfNoLoopDetected)

这个过程和上面的那种差不多,除非Ru检测到在lsp中存在一个环回。如果检测出有一个环回存在,Ru将停止使用标签L来向Rd转发分组。 当使用环回检测的时候,需要这样做。

停止转发的操作将会持续到X的下一跳发生变化,或者不再检测到环回。

5.1.6.下游lsr:回收处理

回收处理不想上面的那些过程一样都有多种变化,这里只有一种处理过程。

当Rd决定终止标签L到地址前缀X的绑定的时候,这个解除绑定的信息必须分发给所有的收到这个绑定信息的节点。

我们要求,在Rd将标签L绑定到一个新的其他的不同于X的地址前缀Y,并且分发这个新的绑定信息给Ru之前,Rd必须将L和X的解除绑定信息分发给Ru。如果Ru在获知L和X的解除绑定信息之前,得知这个L到Y的新的绑定信息,那么,在一段时间内,Ru对于匹配地址前缀X和Y的分组都会使用L标签。

标签绑定的分发和回收都是通过一个ldp来实现。所有的ldp都必须在两个标签分发对等实体(除了隐含的对等实体)建立一个标签分发邻接关系。如果R1到R2有一个标签分发邻接关系,并且通过这个邻接关系从R2收到了标签绑定信息,那么,如果这个邻接关系被它的对等实体关闭(可能

是链路失效或者是手工的操作),所有在这个邻接关系上收到的绑定信息,都被认为是已经被回收。

只要这种标签分发邻接关系存在,相关的标签绑定信息的回收都必须是显式的。如果对于一个地址前缀绑定了第二个标签,结果并不是意味着第一个标签的回收,而是两个标签绑定同时有效,这在需要支持多路径路由的情况下是必须的。如果第二个地址前缀被绑定到同一个标签,结果同样也不是意味着回收第一个地址前缀到这个标签的绑定,而是对这个两个地址前缀都使用这个标签。

5.2.mpls方案:对上述处理过程的组合的支持

考虑两个lsr,Ru和Rd,他们对于一组地址前缀是标签分发对等实体,Ru是上游节点,Rd是下游节点。

mpls中控制Ru和Rd互存在的设计可以用一个上述处理过程的五元组来表示:<分发过程,请求过程,不激活过程,释放过程,标签使用过程>。(由于实际上这里只有一种回收过程,实际上不用描述它。)如果在这个五元组的某个位置上出现“×”,则表示这里可以使用任何一种上述的处理;如果是“N/A”则表示对于这个五元组中的元素,不需要进行任何处理。 mpls体系结构只支持下面规定的这些方案。其他的方案可能会在将来的某个时候按照相应的需求进行添加。

5.2.1.支持标签合并的方案

如果Ru和Rd是标签分发对等实体,并且都支持标签合并,必须使用下面的某个方案:

1.

解释成体系结构中规定的模式,我们可以理解为:主动的下游标签分发,lsp的控制,自由的标签保持模式,不支持环回检测。 2.

解释成体系结构中规定的模式,我们可以理解为:主动的下游标签分发,lsp的控制,自由的标签保持模式,支持环回检测。

3.

解释成体系结构中规定的模式,我们可以理解为:主动的下游标签分发,lsp的有序控制(从出口开始),保守的标签保持模式,环回检测可选。 4.

解释成体系结构中规定的模式,我们可以理解为:主动的下游标签分发,lsp的有序控制(从出口开始),自由的标签保持模式,环回检测可选。 5.

解释成体系结构中规定的模式,我们可以理解为:下游按需标签分发,lsp的有序控制(入口初始化),保守的标签保持模式,环回检测可选。 6.

解释成体系结构中规定的模式,我们可以理解为:下游按需标签分发,lsp的控制,保守的标签保持模式,不支持环回检测。

7.

解释成体系结构中规定的模式,我们可以理解为:下游按需标签分发,lsp的控制,保守的标签保持模式,支持环回检测。

5.2.2.不支持标签合并的方案

假设R1,R2,R3和R4是atm交换机,他们不支持标签合并功能,当他们作为lsr的时候,假定对于地址前缀X,L3的逐跳路由为,并且,匹配X的分组可能从网络中的这四个节点中任意一个进入网络。由于atm没有多点到点的能力,lsp必须通过点到点的VC来实现,这就意味着对于地址前缀X,必须有三条VC通道:

因此,如果R1和R2是mpls对等实体,并且他们使用传统的atm交换硬件结构(不支持信元的interleave suppression),或者由于其他的原因不能支持标签合并,在R1和R2之间使用的mpls方案必须是以下几种方案之一: 1. 解释成体系结构中规定的模式,我们可以理解为:下游按需标签分发,lsp的有序控制(在入口初始化),保守的标签保持模式,环回检测可选。 使用RequestOnRequest处理过程将导致R4分发三个个X相关的标签给R3,R3分发两个给R2,R2分发一个给R1。

2.

解释成体系结构中规定的模式,我们可以理解为:下游按需标签分发,lsp的控制,保守的标签保持模式,不支持环回检测。

3.

解释成体系结构中规定的模式,我们可以理解为:下游按需标签分发,lsp的控制,保守的标签保持模式,支持环回检测。

5.2.3.关于互操作性的考虑

不难看出,一些五元组不能产生可行的mpls方案,例如:

RequestNever, *, *, *> 在这些mpls方案中,下游节点Rd只有在收到上游节

点Ru的请求时才会分发标签绑定,但是Ru有不会产生任何请求。显然,这些方案是不可行的,因为他们不能产生正确的标签分发。 - <*, RequestNever, *, ReleaseOnChange, *>

在这些方案中,Ru会释放掉那些它不再使用的绑定信息, 但是却不会再次请求这些绑定信息,即使过会儿又会用到这些信息。这些方案都不能保证标签分发的正确性。

本节我们规定一些原则,来防止标签分发对等实体采用不可行的mpls方案。这些原则对标签分发对等实体之间在标签分发邻接关系初始化的过程中的信息交换以及其他的超出本文档讨论范围之外的方式获取的信息都有要求。

1、每个标签分发对等实体都必须声名自己是否支持标签合并。

2、如果Rd不支持标签合并,Rd必须选择“无条件出栈”或者“有条件出栈”处理,也就是下游按需标签分发。如果Rd选择“有条件出栈”,Ru必须强制使用RequestRetry处理。

这就是说如果下游节点不支持标签合并,在选择mpls方案的时候,它的参数选择具有较高的优先级。

3、如果Ru不支持标签合并,但是Rd是支持的,Ru必须选择RequestRetry或者RequestNoRetry处理。这将迫使Rd分别使用PulledConditional或者PulledUnConditional处理。

这就是说,如果只有一个节点不支持标签合并,它的参数选择在mpls方案选择的时候就具有较高的优先级。

4、如果Ru的Rd都支持标签合并,那么,是选择自由还是保守的标签保持模式就由Ru决定。这就是说,Ru应该来选择是采用RequestWhenNeeded或者ReleaseOnChange(表示保守标签保持模式),还是选择使用

RequestNever或者NoReleaseOnChange(表示自由标签保持模式)。然而,对于push还是pulled,conditional还是unconditional,就交给Rd来选择。如果Ru选择自由标签保持模式,Rd可以选择PushUnconditional或者

PushConditional(也就是下游主动标签分发)。如果Ru选择保守标签保持模式,Rd可以选择PushConditional,PulledConditional或者PulledUnconditional。

这些选择合起来就决定了mpls方案的选择。

6.基于安全的考虑

一些路由器可能会实现安全的处理,这取决于网络层首部相对于链路层首部是位于一个固定的位置。mpls的普通的封装是在链路层首部和网络层首部之间插入一个垫片。这会导致这样的安全处理失败。

对于所有的lsr,可以认为它们对于一个mpls的标签来说,都是假定一个lsr作为标签的写者将标签压入标签栈,并且另外一些lsr作为读者来解释这个标签。如果一个标签分组是从一个无法信任的源头收到的,或者是一个特

殊的输入标签,而这个标签还没有被分发出去的话,分组的转发可能是有问题的。

因篇幅问题不能全部显示,请点此查看更多更全内容