Technorati 标签: MPLS TE, 流量工程

什么样的前提下可以用MPLS 流量工程for CISCO ?或者说MPLS TE的配置逻辑关系:

■支持MPLS流量工程的CISCO IOS 软件版本.

■网络中需要启动CEF.

■作为IGP使用的链路状态协议OSPF或是IS-IS.只有这两个协议能支持TE.(OSPF会提供第十类LSA来传播相关TE信息).

■路由器全局已经启用了流量工程.

■一个环回接口,用作MPLS 流量工程的路由器ID.

■基本的TE 隧道配置。

关于TE隧道,一定是单向的。

所以如果在两边的PE都要走TE流量工程的隧道的话,需要在两端一起进行配置。

拓扑图依然引用以前的:

p_w_picpath

一个典型的TE的配置如下:(可以参考拓扑图中R2)

ip cef

!

ip vrf maipu

rd 1:1

route-target export 1:1

route-target import 1:1

!

!

mpls traffic-eng tunnels

mpls label protocol ldp

!

interface Loopback0

ip address 10.1.1.1 255.255.255.255

!//这个是作为LDP,ospfBGProuter-ID,方便管理.

interface Tunnel0

ip unnumbered Loopback0

tunnel mode mpls traffic-eng

tunnel destination 10.1.1.2

tunnel mpls traffic-eng autoroute announce

tunnel mpls traffic-eng priority 7 7

tunnel mpls traffic-eng bandwidth 1024

tunnel mpls traffic-eng path-option 1 dynamic

no routing dynamic

!

!

interface GigabitEthernet1/0

ip vrf forwarding maipu

ip address 1.1.1.2 255.255.255.0

negotiation auto

!

interface GigabitEthernet2/0

mtu 1520

ip address 2.1.1.1 255.255.255.0

ip mtu 1500

negotiation auto

mpls mtu 1516

mpls traffic-eng tunnels

mpls label protocol ldp

mpls ip

ip rsvp bandwidth 2048

!

router ospf 1

mpls traffic-eng router-id Loopback0

mpls traffic-eng area 0

router-id 10.1.1.1

network 0.0.0.0 255.255.255.255 area 0

!

router bgp 65500

bgp router-id 10.1.1.1

bgp log-neighbor-changes

neighbor 10.1.1.2 remote-as 65500

neighbor 10.1.1.2 update-source Loopback0

neighbor 10.1.1.2 next-hop-self

!

address-family ***v4

neighbor 10.1.1.2 activate

neighbor 10.1.1.2 send-community extended

exit-address-family

!

address-family ipv4 vrf maipu

redistribute connected

redistribute static

exit-address-family

!

ip forward-protocol nd

no ip http server

no ip http secure-server

!

mpls ldp router-id Loopback0 force

 

从这里可以看出,配置并不多,很多都是MPLS ×××的配置,TE只是在MPLS的基础上再启用RSVP而已。

当你认为配置完成的时候,可以用命令show mpls traffic-eng tunnels summary来确认一下,是否配置已经完成:

clip_p_w_picpath004

这里如果没有显示running,running和enable的话,说明配置有问题,需要重新检查配置。

p_w_picpath

最后可以看出,在R2上面进行自动选路,选出的路径是:

clip_p_w_picpath006

实际上是图中的最短路径,path2,紫色的那条路径,当然这只是一个初步的。我们可以根据TE的三个属性:

attribute-flag,administrative-weight,还有bandwidth来进行调整让最后选的路径是上面的path1.是很简单的调整。

好了,现在根据配置来说明一下TE隧道的一些原理。

可用的带宽信息.

R2-PE-1(config-if)#ip rsvp bandwidth 1024 ?

<1-10000000> Largest Reservable Flow (kbps)

这里有两个参数,第一个是在接口上可保留的带宽总值。单位是Kbit/s.第二个是接口上可以为每条流保留的最大带宽。

PS:

最常见的问题,如果在接口下面忘记打这个命令了,那么IOS默认的预留带宽是0.这个时候自然隧道也就是不通的,因为没有可用的带宽啊。所以上面的配置实例里面,在接口下面是预留了带宽的。

interface GigabitEthernet2/0

mtu 1520

ip address 2.1.1.1 255.255.255.0

ip mtu 1500

negotiation auto

mpls mtu 1516

mpls traffic-eng tunnels

mpls label protocol ldp

mpls ip

ip rsvp bandwidth 2048

end

我做了一个实验,如果在接口下面删除这个命令,又或者是把物理接口下面的预留带宽修改得小于interface tunnel的rsvp bandwidth,那么隧道马上就会down下去,原因很简单:

隧道预留带宽为0,隧道不能up。

逻辑隧道的预留必须小于最多等于物理接口的带宽。否则还是down.

当然,你可以不用在物理接口下面去指定有多大的带宽,用命令:

R2-PE-1(config-if)#ip rsvp bandwidth

R2-PE-1(config-if)#exit

只用前面的命令,这个时候分配给物理接口的带宽是接口的75%.

clip_p_w_picpath008

如果我指定为2M.请见下图:

clip_p_w_picpath010

所以方法这里都有,具体主要还是看我们想怎么用。

用命令show mpls traffic-eng tunnels可以查看隧道的详细情况。

p_w_picpath

■隧道的优先级

产生的背景:

有些隧道比其他的隧道更为重要,所以无论出于什么目的,都需要让一些隧道优于其他隧道.

MPLS TE是可以实现这样的机制的。每一个隧道都有它的优先级,重要的隧道优先级会更高.次重要的隧道会退出现有路径,然后重新计算路径,而把资源让给更加重要的隧道(优先级更高的隧道).

隧道的优先级是0-7.数值越小,优先级越高。

既然有了优先级这个概念,那么一定会涉及到隧道抢占这个东西。既然有隧道的优先级比当前隧道优先级高,那么重要的隧道在想保留带宽的时候,就可以随意把其他的隧道挤出他们的路径,这样的机制就叫隧道抢占.tunnel preemption.

这里来做2个实验来验证隧道优先级这个概念。

p_w_picpath

这里在R2上面,建立两个隧道。

clip_p_w_picpath016

这里有两个隧道,tunnel 0和tunnel 1.

但是两个隧道的优先级是完全不同的。tunnel 0,优先级是7.后面的保持优先级先不管。然后tunel1的优先级是5.

前提情况是:

R2的接口2/0 ,设置的ip rsvp bw是默认的750M.是大于两个隧道的rsvp bw总和的。

在R3上面,interface G3/0.

配置为:

clip_p_w_picpath018

实际上带宽为2049.那么只能让一个隧道走这条路径,隧道0和隧道1,优先级分别是7和5.所以tunnel 1应该是走绿色的路径,tunnel 0 走红色的路径,因为隧道优先级的不同在这里。

我们也可以在路由器R2-PE-1上面看看:

clip_p_w_picpath020

clip_p_w_picpath022

现在在R3上面:

clip_p_w_picpath024

总结:所以,当总的链路承诺带宽小于所有隧道总和带宽需求的时候,那么这个时候优先级高的隧道就会优先选路。

关于优先级,还有一个概念,优先级第一个参数是建立优先级,第二个参数是保持优先级。

clip_p_w_picpath026

为什么会有两个优先级?

其实就是RFC2751中的抢占和防守优先级为原型的。

目的是,当一条隧道开始建立的时候,使用他得建立优先级来决定是否承认这条隧道,当另外一个隧道要和先前建立的隧道竞争链路的时候,就用新隧道的建立优先级和第一条隧道的保持优先级进行比较。

如果根据原则进行比较会产生一个问题,如果建立优先级比保持优先级小的话,会造成程序的死循环。

假设现在有两个tunnel,0和1.而两个tunnel的建立优先级都为1,两个隧道的保持优先级都是7.当tunnel0 up的时候,建立tunnel 1,那么tunnel1 会用建立优先级1去比较tunnel 0 的保持优先级7,结果tunnel1,抢占成功。

tunnel1 up,tunnel 0被挤出预留带宽。

然后tunnel 0这个时候又用相同的方法和tunnel1进行比较,结果tunnel1又up起来,

剩下的事情就是反复的循环,造成接口震荡.

clip_p_w_picpath028

为了解决这个问题,cisco IOS不允许建立优先级比保持优先级小。

在配置的时候也进行了规定,如果硬要配是配置不进去的。

clip_p_w_picpath030

最后资料的建议是:保持优先级和建立优先级通常都是设置为相同的数值。除非你有特别的理由。

亲和/掩码/属性标识:

■属性标识:

在之前已经解释过简单的属性标示。就是路由器上面的attribute-flags.属性标示是一个32位的位映射.每一位都可以单独标示链路的一个属性.

我的个人理解,对于一条路径上面的所有接口的标示属性都必须相同,否则如果有不匹配的attribute-flags,那么这条隧道是不能建立的。attribute-flags 默认在路由器上的属性为0x0.

对于属性标示没有过多的解释,下面用一个小例子再复习一下这个概念:

p_w_picpath

在这个拓扑图中,R2,PE-1上面建立了一条单向的TE隧道。

从R2到目的PE-2-R6的10.1.1.2.

当隧道正常建立的时候,R2到R6走的路径是R2-&gt;R3-&gt;R5-&gt;R6.

R2的路径信息如下:

clip_p_w_picpath034

如果,在R3的G3/0接口上面,配置attribute-flags为0x1的话,那么R2的 tunnel0会自动切换到其他路径,当前路径不可用。

下面是在R3的接口Giga 3/0上面做的修改:

clip_p_w_picpath036

我们再来看看R2到R6的路径,现在应该动切换到R2-&gt;R3-&gt;R4-&gt;R5-&gt;R6.

下面是在R2上面重新查看隧道的路径情况show mpls traffic-eng tunnels tunnel 0:

clip_p_w_picpath038

这里明显已经切换了路径走上面了。

这就是属性标示。

总结:属性标示,就是比较每条链路上面的attribute-flags是否一致,一致认为是可用,否则的话该链路不可用。

下面再说一下亲和和掩码:

关于亲和和掩码这两个属性只能在tunnel下面进行配置。

具体命令是:tunnel mpls traffic-eng affinity 0x1 mask 0x1.

比如这里有三个属性标示:

0x1 0000 0001

0x81 1000 0001

0x80 1000 0000

如果我只想选择其中0x1和0x81这两个属性作为有效属性,那么掩码应该设置为最后一位为1,表示最后一位必须为1才是有效路径。

所以最后的命令可以为:

tunnel mpls traffic-eng affinity 0x1 mask 0x1 或者

tunnel mpls traffic-eng affinity 0x9 mask 0x1等等。

下面用一个实例来说明亲和/掩码/属性标示的概念.

p_w_picpath

在图中,R2到R6有两条路径。红色的和橙色的。

在图中的每个接口都进行了属性标示的标注.

这里再说明一下:

0x1 0001

0x9 1001

掩码0x1 0001

这里实际上最对最后一位,0x1和0x9最后一位都是1,属性匹配,所以都是有效路径。

所以正常通讯时,应该走红色的路径。(因为都是有效路径,那么比较的是后面要提到的administative-weight).

然后当interface g3/0 shutdown的时候,那么久会走上面橙色的路径。

已经试验过了。没有问题。

关于管理权重,信息发布,后续会慢慢学习。