马光星
摘 要 本文定义了在帧中继网上的MPLS模型和普通机理。对于帧中继网,还扩展和阐述了在文件[1]中描述的MPLS结构和在文件[2]中描述的标签分配协议。MPLS像标签交换路由器一样能有效的用于帧中继交换。
关键词 MPLS 帧中继 标签交换路由器 帧中继交换
1 引 言
在文件[1]中描述了多协议标签交换MPLS(Multiprotocol Label Switching )协议的结构。作为标签交换路由器能用于帧中继交换。帧中继交换运行网络层的路由算法(如OSPF,IS-IS)和在这些路由算法基础上向前传送数据。不需要特定的帧中继选路。
帧中继交换适用于标签交换时,在帧的帧中继数据链路层的首部DLCI(Data Link Connection Identifier)字段中承载顶层(当前)标签。帧中继交换不处理与顶层标签一起承载的附加信息,如果有多个标签的包,附加信息与其他标签一起在文件[3]定义的MPLS普通封装中承载。
能够配置帧中继永久的虚电路(PVCs)承载标签交换基本业务。当MPLS标签和帧中继交换都适合帧中继交换路由器时应该用DLCIs,根据本规范应该封装MPLS业务和在网络层路由信息基础上向前传送。
2 帧中继交换的特性
标签交换的结构允许在LSR(Label Switching Router)执行中有相当大的灵活性,而(可能预先存在的)硬件有能力约束FR-LSR,多协议互联利用的帧格式和帧中继标准一样。由于这样的约束,FR-LSRs需要一些特殊过程。
影响它的性能(如LSRs )的帧中继交换的一些主要特点是:
*在帧的帧中继数据链路首部中DLCI字段上实现标签交换功能;这规定了在包中标签的长度和位置。DLCI字段的长度可能是10(缺省)或23比特和在首部中它能够扩展到2或4个字节。
*当在路由器中IP首部上执行时,一般不能实现“TTL(Time To Live)-减少”功能。
*在建立的电路上传递参数的每个节点执行阻塞控制。可以在帧的首部中设定标记作为阻塞结果或超过约定的电路参数。
*虽然在标准交换中,可以配置多个输入DLCIs对一个输出DLCI,在多点对一点电路中得到,一般不完全支持多点对多点VCs。
3 标签封装和堆栈
3.1 标签封装
在缺省状态,应该用普通的标签封装发送全部带标签的包,使用帧中继空封装机理:
“n”是Q.922的地址长度,可以是2或4个字节。
DLCI的Q.922[ITU]表示法(按规范的顺序,权值最小的比特存储在第一位,即在存储器中一个字节的最右边的比特)如下:
帧中继空封装的使用意味着标签隐含着编码网络协议的类型。
在文件[3]中描述了关于标签堆栈结构和返回到帧源的差错消息。
对于深层“n”的标签堆栈,普通封装包含“n”标签,在顶层堆栈条目中承载着对EXP,S和TTL字段的有意义的值,而非标签,标签更适合在按Q.922地址形式编码的帧中继数据链路首部的DLCI字段中承载。
3.2 标签堆栈
每个标签堆栈条目用4个字节表示
标签:20比特标签值;EXP:试验用3比特;S:堆栈的底部1比特;TTL:8比特。
4 帧中继标签交换处理
4.1 DLCIs的使用
用标签与路由的结合完成标签交换和用标签值向前传送包,包括确定任意更换标签的值。在FR-LSR中,顶层(当前)MPLS标签在帧的帧中继数据链路层的首部DLCI字段中承载。顶层标签载着关于网络类型的隐含信息。
对于两种连接的FR-LSRs,全双工连接时LDP(Label Distribution Protocol)一定是可用的。用配置方法分配LDP VC的DLCI值,类似于配置DLCI用在两个交换机之间运行IP路由协议。
除这个配置值以外,用DLCI值可以处理链路两个方向的MPLS,属于两个独立的空间,即,VCs可以是“半双工”,每个方向用它自己的DLCI。
DLCIs允许的范围,DLCIs长度和支持通过LDP消息传达VC合并。注意用标签的DLCIs范围取决于DLCI字段的长度。
4.2 同类LSPs
如果是一个LSP(Label Switching Path),当从LSR1发送包P到LSR2和LSR3时,LSR1,LSR2和LSR3用相同的标签堆栈编码。像一个LSP使用同类的。
4.3 不是同类LSPs
如果是一个LSP,当发送包P到LSR2时,LSR1用一个标签堆栈编码,当发送包P到LSR3时,而LSR2用不同的编码。在一般情况下,MPLS结构支持在不同的跳上有不同的标签堆栈编码的LSPs。当收到贴标签的包时,LSR必须译码确定当前标签堆栈的值,必须在标签堆栈上运行确定堆栈的新标签值和在发送贴标签的包到它的下一跳之前适当的编码新值。
运行帧中继交换的LSRs和其它LSRs结合的MPLS网络,其它LSRs用其他MPLS封装,如普通(MPLS填充首部)或ATM封装。在这样的网中,可能有些LSRs,带有帧中继接口及MPLS普通接口。这是同一LSP的不同跳上有不同标签堆栈编码LSR的一个例子。在输入接口上LSR可能不交换帧中继标签编码和在输出接口上用标签编码进入普通MPLS首部代替它。
4.4 帧中继标签交换回路的预防和控制
FR-LSRs应该在空闲FR-LSPs回路或LSP帧中继段上运行,因此FR-LSPs应该用回路检测和可用的回路预防机理。
4.4.1 FR-LSRs回路控制——MPLS TTL处理
在MPLS标签堆栈中编码的MPLS TTL用下面的机理:
(a)抑制回路;
(b)限制包的范围。
当数据包沿着LSP传播时,如果经过路由器的顺序相同,不管有没有标签交换应该显现相同的TTL值。如果数据包沿着LSPs层次传播时,在TTL值中应反映经过LSR跳的总数。
MPLS TTL的初始值从前面的TTL值加载到新推进的标签条目中,当前面的标签堆栈不存在时,来自网络层的首部或预先存在的低层标签堆栈条目。
FR-LSR同层交换贴标签的包不消耗MPLS TTL。FR-LSR的顺序是“非-TTL段”。
当数据包从“非-TTL LSP段”显现时,它跨过的LSR-跳数值,应该反映在TTL中。在“独播”情况下,传播LSP的长度或LSP帧中继段的长度到FR-LSR入口节点,在传送包进入非-TTL LSP段之前,能使入口消耗TTL值。
当入口FR-LSR消耗MPLS TTL时,在数据包到达“非-TTL LSP段”的出口前,特殊数据包的TTL将过期,FR-LSR一定不交换带标签的包,而遵守文件[2]中的规范,企图返回差错消息到包的源。
*它作为一个过期的包处理和返回一个ICMP消息到它的源。
*它作为无标签的包传送,用TTL反映IP(网络层)传送。
如果进来的TTL是1,只用第一个选项。在多播情况下,LSP长度或LSP段长度传播到FR-LSR出口节点,在包传出非-TTL LSP段之前,出口消耗TTL值。
4.4.2 执行MPLS TTL计算
用“输入TTL”计算得到“输出TTL”取决于(i)“输入封装”,(ii)“传送封装”和(iii)“输出封装”。(i),(ii)和(iii)之间的关系定义为“输入封装”(ie),“传送封装”(fe)和“输出封装”(oe)的函数“D”。用“输入TTL”计算得到“输出TTL”说明如下:
输出TTL=输入TTL-D(ie,fe,oe)
或简要符号:
输出TTL=输入TTL-d
“d”有三个可能值:“0”,“1”或“LSP段的跳数”:
“独播”传输:
当传送包时,“LSP段的跳数”值是有标签的跳数值,当为LSP分配标签时,如果LDP提供跳数值,那是有“跳数目标”的LDP消息。如果LDP不提供跳数值或提供一个“未知”值和缺省“段的跳数”值是1。
当发送标签连结上游时,跳数值与来自下游的相应连结有关,如果不同于“未知”值,必须加1和向上游发送结果作为与新的连结有关的跳数值(不改变发送的未知值)。如果新的跳数值超过“最大”值,FR-LSR不必向上游传递连结,但必须向上游发送一个错误。
多播传输:
“传送封装”用缩写:“I”对应IP(网络层),“G”对应于普通MPLS和“F”对应帧中继MPLS,如果LSR接口用缩写:“i”对应输入或输出封装是IP和非MPLS封装,“g”对应于输入或输出MPLS封装是普通MPLS,“f”对应帧中继,“a”是ATM和认为符号“iIf”,“gGf”,“fFf”,等作为LSRs输入,传送和输出封装。下面举例说明对于各种LSPs的TTL计算:
“iIf”在帧中继LSP“入口LSR”计算:
mpls_ttl=IP_TTL-跳数值=n-5
“fIi”是来自帧中继LSP的“出口LSR”计算:
IP_ttl=mpls_ttl-1=n-6
“iIg”在LSP的“入口LSR”,计算:mpls_
ttl=n-1
“gGf”是来自普通MPLS段的“出口LSR”,在帧中继段的“入口LSR”计算:mpls_ttl=n-6
“fGa”是来自帧中继段的“出口LSR”,在ATM段的“入口LSR”计算:mpls_ttl=n-9
“gGf”是来自普通MPLS段的“出口LSR”,在帧中继段的“入口LSR”计算:mpls_ttl=n-13
“fGg”是来自帧中继段的“出口LSR”,在普通MPLS段的“入口LSR”计算:mpls_ttl=n-14
“gIi”是来自LSP的“出口LSR”计算:IP_ttl=n-15
帧中继“独播”——在入口计算的TTL
帧中继多播——在出口计算的TTL
4.5 经过FR-LSRs入口的标签处理
当数据包第一次进入MPLS区域时,传送操作除输出封装至少在一个条目中包括MPLS标签堆栈外,由正常网络层传送包。帧中继空封装将承载在标签中隐含的网络层协议信息,标签必须与网络协议结合。用网络层传送后得到的网络TTL(或跳限制)填充在顶层标签堆栈条目中的TTL字段中。进一步处理FR-LSR有两种可能情况:
(a)LSP是同类——只有帧中继——和FR-LSR是入口。
(b)LSP不是同类——帧中继,PPP,以太网,ATM等,段形成LSP——和FR-LSR是进入帧中继段的入口。
“独播”数据包,帧中继LSP(同类)的“跳数”或LSP(不是同类)的帧中继段应该消耗MPLS TTL。构成LSP的LDP应该传递有用信息到关于“非-TTL段”“跳数”的FR-LSR入口。
多播数据包,MPLS TTL应该减1。构成LSP的LDP应该传递有用信息到关于“非-TTL段”的“跳数”的FR-LSR出口。
其次,封装包的MPLS向下游传递到达帧中继的数据链路,带顶层标签的驱动器作为输出DLCI。传送载着MPLS封装数据包的帧中继帧进入帧中继VC到下一LSR。
4.6 由核心FR-LSRs处理标签
在FR-LSR中,在帧的帧中继数据链路层的首部DLCI字段中承载当前(顶层)MPLS标签。正像传统的帧中继,对于到达接口的帧,在DLCI基本信息中查找帧中继数据链路首部承载的DLCI,代替有相应输出的DLCI和在输出接口上发送(传送到下一节点)。
在标签堆栈的顶层也承载当前标签信息。在顶层条目中,在帧的帧中继数据链路层的首部中承载和交换除标签信息外的所有字段,当前是有意义的。
4.7 由出口FR-LSRs 处理标签
当到达帧中继LSP的端点时,FR-LSR取出标签堆栈。如果取出的标签是最后的标签,确定承载特定的网络层协议是必需的。标签堆栈没有承载识别网络层协议的明显信息。这必须从堆栈取出的标签值推出。
如果取出的标签不是最后的标签,前面的顶层MPLS TTL传送到新的顶层标签堆栈条目。
如果FR-LSR是混合LSP的帧中继段的出口交换,帧中继段的终点不是LSP的终点,在下一跳标签传送条目中具有的信息基础上,为传送到LSP的下一段应该处理MPLS包。从NHLFE(Next Hop Label Forwarding Entry)设置输出标签值,依据输出接口类型和传输操作类型适当减少MPLS TTL值。根据MPLS规范,对于LSP的下一段特定的链路传送MPLS包。
“独播”的数据包,如果输出接口是普通的或有LSP(不是同类)的下一ATM段的“跳数”,如果输出接口是ATM(非-TTL)接口,MPLS TTL应该减1。
多播数据包,MPLS
TTL应该减少离开FR段的跳数值。关于FR“非-TTL”的“跳数”,构成LSP的LDP应该传递有意义的信息到出口FR-LSR。
5 帧中继标签交换控制
支持标签交换的帧中继交换必须实现标签交换的控制,标签交换的控制主要由标签分配和维护程序组成。可以用几种机理传送标签连结信息,其中之一是标签分配协议(LDP)。
标签交换控制使用直接来自网络层路由协议的信息,这意味着交换必须在这些协议中同等分享(如,OSPF,IS-IS)。
在某些情况下,LSRs可以用其它协议(如RSVP,PIM,BGP)分配标签连结。在这些情况中,帧中继LSR应该在这些协议中分享。
在经过LDP或RSVP或其它(不包括传统帧中继机理)建立帧中继电路的情况下,假定建立信息的电路,如输入/输出最大帧长度,进/出的请求/同意的通过量,进/出的接收通过量,进/出的突发长度,进/出的帧速率,在发送中使用的和可以传递阻塞控制到FR-LSRs至RSVP或能够静态配置。还假设阻塞控制和帧的首部带标记作为阻塞结果,应该由FR-LSRs用类似于传统帧中继电路的方式完成。仿真最有效路由器的目标作为缺省值,缺省VC参数,在缺少LDP时,RSVP或其它机理参与设置这样的参数,应该是0 CIR,因此输入管理将在输入的帧中,设置DE(Discard Eligibility)比特,但不丢弃数据帧。
在MPLS基础上,电路控制和状态信息可以经过LDP传递。
支持帧中继交换的标签交换要求只与帧、比特填充、首部和FCS一致。对于PVCs或SVCs,不需要Q.933信令。在相同接口上,对于非-MPLS(标准帧中继)PVCs或SVCs可以使用PVC或SVC信令。
在帧中继交换基础上标签交换控制成分的存在,不排除能够支持由ITU和FRF(Frame Relay Forum)在相同交换和相同接口上定义的帧中继控制成分。两个控制成分,有ITU/FRF定义的标签交换应该独立运行。
然而,只有少量的信息需要在两个控制成分之间一致,DLCI空间部分对每个成分都是可用的。
6 标签分配和维护过程
标签分配协议的机理和消息形式在文件[1]和[2]中讨论。在本节中讨论的“下游——按需”标签分配和维护机理必须由不支持VC合并的FR-LSRs使用及也可以由支持VC合并的FR-LSRs使用(注意这一机理用于hop-by-hop路由业务)。
6.1 边缘LSR的性能
考虑FR-LSR边缘集的成员。假设,作为路由计算结果,选择FR-LSR作为确定路由FEC(Forwarding Equivalence Classes)的下一跳和下一跳通过LC-FR接口是可以到达的。假设下一跳 FR-LSR是一个“LDP-peer”。边缘LSR为来自下一跳,下游LSR的标签连结发送一个LDP“请求”消息。当边缘LSR接收来自下游的,在LDP“映射”消息中LSR标签连结信息的响应时,标签存储在标签信息底部作为FEC的输出标签。映射消息可能包括跳数值,跳数值表示包通过FR-LSR域到达出口FR-LSR的跳数值,为计算TTL可以存储这个信息。一旦这样做,LSR可用MPLS在FEC中向前传送包。
当FR-LSR域的边缘集的一个成员从FEC的FR-LSR接收LDP“请求”消息时,它是出口FR-LSR。它分配一个标签,在它的标签信息底部建立一个新条目,标签放在进来标签条目中和返回(经过LDP)包含分配标签回流到原请求同等的LDP的“映射”消息。“映射”消息包含“跳数”的目标置1。
当路由计算引起边缘LSR改变路由的下一跳和前面的下一跳在FR-LSR域中时,边缘LSR应该通报前面的下一跳(经过LDP“释放”消息),标签与路由的结合不再需要。
当FR-LSR从连接到LC-FR接口上FR-PSR的同等LDP接收一些路由(FEC)的LDP“请求”消息时,FR-LSR采取下列动作:
*它分配一个标签,在它的标签信息底部建立一个新条目和标签放在进来标签条目的成分中;
*它传送“请求”,通过发送一个LDP“请求”消息到下一跳LSR,路由(FEC)的下游;
在“顺序控制”方式中,在返回“映射”上游的响应到“请求”前,FR-LSR等待来自下游的有“映射”消息的响应。在此情况下,FR-LSR增加它从下游接收的跳数值和用这个值在返回上游的“映射”中。
FR-LSR可以不等待来自下游(“独立控制”方法)的连结,返回上游连结。在此情况下,在“映射”中,它使用保留的跳数值,表示它是‘未知’的。稍后将返回正确的跳数值,说明如下。
“顺序”和“独立”控制各有优缺点,允许作为执行或配置选择。
一旦FR-LSR在来自下一跳的LDP“映射”消息中,接收标签连结的响应,标签放在LIB条目的输出标签中。
注意,FR-LSR或FR-LSR域的边缘集的成员,可以接收来自相同FR-LSR的相同路由(FEC)的多个连结请求。它必须为每个“请求”(假定有足够的资源)产生新的“映射”和保留任意现存的映射。对于接收的每个“请求”, FR-LSR应该产生新的连结“请求”传送到路由的下一跳。
当路由计算引起边缘LSR改变路由(FEC)的下一跳时,FR-LSR应该通报前面的下一跳(经过LDP“释放”消息),标签与路由的连结不再需要。
当LSR接收不再需要特定标签连结的通告时,LSR可能解除与连结有关的标签和解开连结。这种方式是“保守的标签保持方式”。在FR-LSR接收这样的通告和解开连结的情况下,应该通告不再需要标签连结的路由的下一跳。如果LSR不解开连结(在“自由保持方式中”配置的FR-LSP),只要接收的请求与已建立的引起连结的请求有相同的跳数值和相同路由,它可以再用这个连结。
当路由改变时,从前面的路由在路由分叉点重建标签连结。那个点上LSRs的上游(有一个例外,注意下边)忘记了改变。在任何时间LSR改变它的特定路由的下一跳,如果新的下一跳是FR-LSR或经过LC-LSR接口可达到的边缘集的成员,则在与路由LSR有关的LIB中的每个条目应从新的下一跳请求(经LDP)连结。
当FR-LSR从下游邻居接收标签连结时,可能已经为这个路径到上游邻居提供了相应的标签连结,由于正使用“独立控制”或由于来自下游的新连结是路由改变的结果。在此情况下,应该从新的连结中提取的跳数值加1。如果新的跳数值不同于前面传到上游邻居的跳数值(包括上游邻居给定的‘未知’值),FR-LSR必须通告改变的上游邻居。每个FR-LSR依次增加跳数值和传递到上游直到到达入口边缘LSR。
在任何时间FR-LSR产生到下一跳LSR的标签连结请求,作为从另一个(上游)LSR接收标签连结请求的结果和不满意到下一跳的请求,对于接收的请求FR-LSR应该解开在响应中建立的连结和通告请求器(经过LDP“撤销”消息)。
当LSR确定丢失它的LDP与另一个LSR会话时,采用下列动作:
*必须丢弃经过这个连接得到的连结信息;
*对于建立的任意标签连结作为从同级接收的标签连结请求,LSR可以解开这些连结(和再分配与这些连结有关的标签)。
6.2 标签空间的有效应用-合并FR-LSRs
上面的讨论假设,在FR-LSR域中,边缘LSR将为每一个在路由表中有下一跳的前缀请求一个标签。可以有效地减少边缘LSR请求需要的标签数,几个路由改为一个标签。在路由和同级传送用的标签之间多个对一个映射的使用提供保持标签数的机理。
注意,在业务需要帧中继分段情况下,可能限制保持标签空间(VC合并)。问题是必须按顺序发送帧中继分段,一定不能交叉明显的帧分段,明显的分段一定不能交叉存取。如果分段的FR-PSR确保所有分段按顺序传输,没有与其他的帧交叉,则能够实行标签保持(VC合并)。
当使用标签保持,FR-LSR接收来自某些FEC上游LSR的连结请求时和它已经有FEC的输出标签连结,它不需要发送下游连结请求。它可以分配一个进来的标签和返回到上游请求器连结的标签。从请求器接收的包,有顶层标签,用FEC的现存输出标签代替标签后向前传送。如果FR-LSR没有FEC的输出标签连结,但有一个显著的请求,不再发送另一个请求。这意味着在标签保持情况下,FR-LSR必须响应有新连结的每个上游请求,但它可能需要发送一个下游连结请求。
在保持标签情况下,如果改变路由表引起FR-LSR选择FECs新的下一跳,它可能释放以前下一跳的路由连结。如果新的下一跳已经没有相应的连结,它必须请求一个连结(注意选择取决于标签保持方式)。
如果得到新的连结,包含的跳数值不同于旧的连结,FR-LSR必须处理新的跳数值:如果不同于“未知”值,加1和通报有新数值FEC的标签连结的上游邻居。如果新的跳数值超出“最大”值,要保证将要检测的回路,FEC的标签值一定是来自所有上游邻居到前面发送的连结。
6.3 到达帧中继的特殊LDP消息
在两个帧中继“LDP-peer”LSRs之间交换的标签分配协议消息可以包含帧中继特殊信息:
帧中继标签范围:
有下列字段:
保留 保留这个字段。在传送时必须设为0和在接收时忽略。
Len 这个字段规定了DLCI的比特数。支持下列值:
Len DLCI 比特
0 10
2 23
Len 值的1和3保留将来用。
最小DLCI
23比特字段是发起FR-LSR支持的DLCIs的数据块下限的2进制的值。最小DLCI应该在这个字段的右边和前面的比特应该置0。
最大DLCI
23比特字段是发起FR-LSR支持的DLCIs的数据块上限的2进制的值。最大DLCI应该在这个字段的右边和前面的比特应该置0。
帧中继合并:
有下列字段:
M(合并) 1比特字段规定FR-LSR的合并能力:
数值 意思
0 不支持合并
1 支持合并
支持VC合并的FR-LSR必须保证来自输入DLCI的分段的帧,在输出DLCI上不交叉。
保留 保留这个字段。在发送中设置为0和在接收端忽略。
帧中继标签:
有下列字段:
保留 保留这个字段。在发送中设置为0和在接收端忽略。
Len 这个字段规定了DLCI的比特数。支持下列值:
Len DLCI 比特
0 10
2 23
Len值的1和3保留将来用。
DLCI
帧中继标签的二进制值。标签值的有意义的比特数(10或23)编码进入帧中继数据链路首部的数据链路连接标识符(DLCI)字段。
参 考 文 献
[1] Rosen, E., Callon, R. and A. Vishwanathan, "Multi-Protocol Label Switching Architecture", RFC 3031, January 2001.
[2] Andersson, L., Doolan, P., Feldman, N., Fredette, A. and R. Thomas, "Label Distribution Protocol", RFC 3036, January 2001.
[3] Rosen, E., Rehter, Y., Tappan, D., Farinacci, D., Fedorkow, G., Li, T. and A. Conta, "MPLS Label Stack Encoding", RFC 3032, January 2001.
马光星,原信息产业部数据通信技术研究所高级工程师,退休后在北京恒光科技发展公司工作。