在文件[1]中描述了多协议标签交换MPLS(Multiprotocol Label Switching )协议的结构。作为标签交换路由器能用于帧中继交换。帧中继交换运行网络层的路由算法(如OSPF,IS-IS)和在这些路由算法基础上向前传送数据。
作者:zdnet安全频道 来源:论坛整理 2008年10月27日
关键字: 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