摘要:为了解决目前Inte.net为主的IP主干网络所面临的问题, IETF提出了多协议标签交换(MPLS)。 MPLS能在主干网上大大提高IP转发性能, 并提供业务分类(CoS)以及业务质量保证(QoS)。 MPLS可以用在现有的相当一部分主干ATM网上, 在这些网络上实现高性能的IP业务。
虽然MPLS不能解决目前Internet所存在的所有问题, 但人们仍然对它寄予厚望。
关键词:多协议标签交换, 标签, 标签栈, ATM,信元, 虚连接, VCID, 标签分配协议。
IETF提出的多协议标签交换(MPLS)[1]与标记交换(Tag Switching)相似, 它给数据包加上标签, 通过定长短标签与转发方向的映射关系来进行数据包的转发。 与传统IP转发不同,MPLS不需要对数据包头中的目的地址进行最长匹配, 只需要用较为简单的算法对标签进行匹配检索, 从而可以提高转发效率, 这种标签的匹配运算(包括出标签替换入标签) 也可以使用具有类似功能的交换硬件来完成, 如ATM交换网络。 MPLS用于ATM网络时, 可以实现高效的IP转发, 并不需要传统IPOA的地址解析过程, 属于IP和ATM融合的集成模型。
IETF的MPLS构架中讨论了以ATM交换机作为标签交换路由器的应用。 这些ATM交换机运行网络层的路由选择协议(如OSPF, IS-IS等), 而其数据转发就根据这些路由协议的路由选择结果, 不需要ATM专用的路由选择或寻址方式。 这类ATM交换机称为ATM-LSR(ATM标签交换路由器)。 通常, ATM-LSR使用下游按需标签分配方式, 特别是对于不支持VC合并的ATM交换机。
一、ATM和标签交换
由标签交换控制部件(Label Switching Control Component) 控制的ATM接口称为LC-ATM (标签交换控制的ATM)接口。 在这类接口上传输的包为加上标签的包, 其标签栈顶部的标签在VPI/VCI域中。 ATM-LSR之间通过标签分配协议(LDP) 来协商决定标签使用部分还是全部VPI/VCI域。
一个ATM-LSR通常具有若干个LC-ATM接口, 这些接口之间以标签方式传输数据包, 而标签分配过程则通过ATM-LSR之间的非标签接口进行。 当然ATM-LSR为了和其它标签路由器或非标签路由器连接, 也可以具有一般的非标签或标签传输接口 (如一般的ATM接口或基于帧的标签接口)。 通常LC-ATM接口同时支持直接的和基于帧的标签接口相连。
ATM-LSR的特性
MPLS构架的规定相当灵活, 但由于硬件和ATM标准的约束, ATM-LSR具有一定的特殊性, 在于:
1.由于标签互换(Label Swapping) 过程基于信元头中特定的域(VCI或VCI/VPI), 所以标签的位置和长度就受到了限制。
2.一般的ATM-LSR 不支持多点到点或点到多点(树形) 的VC连接, 即大多数ATM-LSR 不支持上面提到的VC合并。
3.由于受到 ATM信元格式的限制, ATM-LSR通常不支持通常 IP路由器对IP包头所进行的 TTL递减操作功能。
ATM的标签交换控制
ATM交换机通过标签控制部件支持标签交换, 标签控制包括标签分配、 发布、 以及维护过程。 标签绑定信息可以通过多种方式传递, 主要是LDP。 标签控制部件只使用从网络层路由选择协议(如OSPF,IS-IS等) 直接得到的信息。 在某些情况下, 标签绑定信息可能通过其它协议发布, 如RSVP、 BGP等(此时ATM交换机应该支持这些协议)。
而ATM-LSR中的标签控制部件并不排斥ITU和ATM论坛所定义的ATM控制部件, 也就是说在一个LC-ATM接口上可以同时支持标签控制和标准的ATM控制方式。 这两部分可以相互独立地工作, 其间只需要交流少部分信息, 如两个部分各自使用的VCI/VPI空间等。
VPI/VCI的使用
标签交换是通过将标签值与转发等效类(FEC)相关联, 从而使用标签及其互换实现数据包的转发。 在ATM-LSR应用中, 标签值携带在VPI/VCI域或VCI域中, 后者通过VP连接两个LSR。 ATM-LSR之间还需要一个连接来传送非标签的IP包, 用于传送LDP或路由协议包, 这个非MPLS连接上使用RFC1483所规定的LLC/SNAP封装。
LC-ATM接口可以通过配置使用标签值范围以外的VPI/VCI 来传送控制信息或其它非标签包, 用于这个目的的VCI值为0~32。 这里可以使用 RFC1483中规定的空(null)封装或LLC/SNAP封装。
两个直接相连的ATM-LSR(即通过LC-ATM接口相连而中间没有别的LSR) 一起控制其间接口上的VPI/VCI值的分配及使用。 其间非MPLS连接的缺省VPI值为0, VCI值为32。 并且只要双方约定好了, 也可以使用别的VPI/VCI值。 由此可知ATM-LSR之间使用的标签值的 VCI部分的值不能编码在0~32。 连接的两个方向上的标签空间是相互独立的。
两个LSR不直接相连时, 如果它们是通过ATM虚通路(VP) 连接的, 也可以将其看作是具有相邻关系的。 这时VPI用于VP连接, 标签只编码在VCI域中。 这种情况下, ATM-LSR之间的非MPLS连接的缺省VCI为32, VPI的值随VP连接而不同。 并且0~32之间的VCI值也保留用于非标签运用。 两个LSR通过LDP 相互协商决定在允许范围内的可用标签空间, 其间不同VP上的 VCI标签空间可以不同(分别协商)。
有时需要将两个实际上通过 LC-ATM接口不直接相连的LSR看作具有邻接性。 由于对应于各个虚连接(VC) 的VPI/VCI在沿途的交换机会被重写, 因此标签值(VPI/VCI)不能用来标识该"邻接"VC, 为了识别端到端的虚连接(VC), 这时就需要给每个这样VC指定一个VCID值, LDP被用于将FEC与VCID绑定起来。 所收到的包的最上层标签指的是包到达的虚电路。 这种情况下不定义非MPLS连接的缺省VPI/VCI。
标签分配和维护过程
在ATM-LSR一般使用下游按需标签分配方式, 特别是对于不支持VC合并的交换机。 而对于ATM-LSR域的边缘路由器和内部路由器来说, 这种过程有一些小的区别。
1·边缘LSR(ELSR)
对于处于ATM-LSR域边界上的LSR来说, 它们本身并不是纯的ATM-LSR, 还具有与ATM-LSR域外路由器的连接能力, 域内路由器是否支持 VC合并不影响这些边缘路由器的行为。
假设某个ELSR根据路由选择运算的结果选定一个ATM-LSR 作为某FEC的下一跳, 并且通过LC-ATM接口到达该下一跳LSR。 那么ELSR将使用LDP向下一跳请求一个标签绑定, 请求消息中的跳数(Hop Count) 域置为1。 一旦ELSR收到了回应的标签绑定信息, 它就能用MPLS转发过程来处理该FEC的包, 把收到的标签作为它们的出标签。 在使用VCID时则把对应于特定VCID 的VPI/VCI作为出标签。
ELSR收到的标签绑定可能含有一个跳数域, 其中的跳数值表示了使用这个标签的包穿过本ATM-LSR域要经过多少跳。 ELSR在转发包之前对数据包的TTL作相应处理, 减去这个跳数值, 由此判断通过这个ATM-LSR域是否会耗尽其生命, 若是则不向下一跳转发该包。
如果ELSR收到一个来自某ATM-LSR的标签请求消息, 它就分配一个标签, 并通过LDP将该绑定信息回送到发出请求的LDP对等节点。 此时, ELSR将回送绑定信息的LDP消息中的跳数值置为1, 它将是某个正在建立的LSP的出节点。
当ELSR的路由选择功能发现某FEC 的下一跳发生了变化, 而以前的下一跳在ATM-LSR域内, 它就通知原来的下一跳不再需要先前为该FEC指定的标签绑定了。
2·域内的ATM-LSR
对于域内的ATM-LSR, 要看它是否支持 VC合并来讨论其不同的标签分配和维护过程。
(1)一般的ATM-LSR(不支持VC合并)
对于不支持VC合并的一般的ATM-LSR, 当它收到通过LC-ATM接口相连的对等节点对于某FEC的标签请求消息时, 将分配一个标签, 然后向该FEC的下一跳请求一个标签绑定, 接着向发出请求的上游对等节点返回本节点分配的标签绑定。 ATM-LSR在收到下游的标签绑定信息后就可以开始使用这个标签。
在这个过程中, 定义了最大跳数(MAXHOP), 其缺省值为255, 也可通过配置指定别的值。 LSR取出所收到的标签请求消息中的跳数值, 加1后放在发向下游的标签请求消息的跳数域中, 但如果收到的跳数加1后大于MAXHOP, 则不向下游发出请求, 并通知上游邻节点本LSR无法满足它的标签请求。
ATM-LSR可以在等待下游回应的标签绑定消息到达后再向上游发出本地分配的标签绑定, 这称为顺序控制方式, 这里特指入节点发起的顺序控制方式。 这种情况下, LSR收到下游的标签绑定信息后将取出其中的跳数值, 如果跳数值介于0和MAXHOP之间, 就将其加1后置于发往上游的标签绑定消息中; 如果跳数值超出了MAXHOP, 则不向上游发出标签绑定消息, 并应该通知上游无法满足其标签请求。 如果从下游收到的标签绑定消息中的跳数值为0, 则表示实际的跳数是未知的, 这时向上游发出的标签绑定消息的跳数值也应该为0。
同样ATM-LSR也可以在收到下游标签绑定信息之前就将本地分配的标签绑定发布给上游对等节点, 这称为独立控制方式。 此时绑定信息中携带的跳数值都置为0, 表示真实的跳数未知, 确切的跳数值将另外传递。 如果标签分配失败, 超出MAXHOP或下游无法满足标签请求, LSR应该告知上游, 并向上游请求回收标签。
不支持VC合并的ATM-LSR必须为某个LSR针对同一个FEC 的多次标签请求分别作出响应, 为每个请求产生一个标签绑定, 并且向其下游发出标签请求, 同时保留原有的该FEC的标签绑定, 即