MPLS中LDP与IGP的同步

2018年7月6日22:33:55 发表评论 628 views
1.关于LDPIGP的同步

MPLS中LDP与IGP的同步






MPLS网络中的一个很重要的问题就是LDP和IGP的同步,所谓的
同步的是意思是,IGP和LDP都认可某条链路为待转发报文的出站链路的。例如上图中,四台路由器都运行OSPF,同时激活LDP。那么在R1上,如果其去往3.3.3.3/32的路由,在路由表中下一跳为R2(假设我们调了cost),同时又收到了R2发过来的针对3.3.3.3/32前缀捆绑的标签401,那么这时候,IGP和LDP就同步了,R1可以正常的使用R2作为下一跳来转发MPLS标签报文。

MPLS中LDP与IGP的同步






然而可能出现这样一个问题,R1、R2之间的LDP连接,由于某种原因断掉了,但是R1、R2之间的OSPF邻接没DOWN,那么R1的路由表中,关于3.3.3.3/32依然选择R2作为下一跳,这就出问题了。R1上的LFIB里,关于3.3.3.3/32的条目可能是这样的:
R1#sh mpls for 
Local

Outgoing




PrefixBytes tag

Outgoing


Next Hop




tag




tag or VC


or Tunnel Id
switched


interface


104





Untagged    3.3.3.3/32

0






Fa0/0
10.1.12.2








这样,R1发送数据去往3.3.3.3就有直接以IPv4报文的形式发送出去了,这在本拓扑中看似没什么问题,确实能够通,但是,在MPLS VPN环境中就可能出问题了。因为报文在MPLS VPN Backbone中传输往往是需要带标签的。





另一个造成IGP和LDP不同步的例子是,LSR重启的时候,IGP可以很快就建立起邻接关系,而LDP的会话建立起来可能就慢点,也就是说,在LFIB装载必须的信息来进行正确的标签交换之前,IGP的转发就已经开始了。于是报文可能就错误的转发,或者在进入MPLS网络后在某处被丢弃。





可以使用MPLS LDP-IGP同步来解决这个问题。注意,MPLS LDP-IGP 的解决方案不能用于BGP的标签分发。
2.MPLS LDP-IGP同步如何工作
 





当在一个接口上激活了
“MPLS LDP-IGP同步”之后,IGP将会通告该链路的度量值为最大,一直到同步完成或者LDP会话在该接口上成功建立。在OSPF中,
metric最大为65535。这样一来,可以保证在LDP处于断开状态的时候不会有路径会经过该接口。在LDP会话成功建立并且标签捆绑已经开始进行交换以后,IGP才会用正常的IGP度量值来通告该链路。这个时候穿越这个接口的流量就是进行标签交换的流量了。基本上说,如果LDP会话没有建立,OSPF是不会在这个链路上建立邻接关系的,压根不发HELLO(当然,这里有个基本上说的字眼,也就说,还有二般情况)。





一直到LDP会话成功建立,或者
“同步保持时间”超时,否则OSPF邻接关系是不会建立的。这里的同步表示本地标签捆绑已经通过LDP会话发送给了LDP对等体。但是如果路由器上A激活了“MPLS LDP-IGP同步“,并且A和B之间只有一条链路,而没有其他可用路径到B的话,OSPF邻接关系将永远不会建立。因为OSPF会等待LDP会话的建立,但是LDP会话根本无法建立,因为A没办法在它的路由表中学习到B的LDP routerID路由,这样就进入了一个死循环,OSPF和LDP的邻接关系将永远无法建立。对于这种情况,LDP-IGP同步会无条件激活OSPF的邻接关系,这样一来链路将通告最大的metric值,直到同步完成。





然而在某些环境中,LDP会话的这个问题可能永远无法解决,因此可能并不希望永远等待IGP邻接关系的建立。那么可以通过配置“同步保持时间”。
3.MPLS LDP-IGP同步的配置
 
MPLS LDP-IGP同步是在IGP进程中启用的,它会应用到所有运行了该IGP的接口上
router ospf 1


mpls ldp sync

可以在某个特定的接口上使用no mpls ldp igp sync 命令来关闭接口的同步功能。
默认情况下,如果同步没有完成,IGP并没有明确在建立邻接关系之前所需等待的时间,可以通过:
mpls ldp igp sync holddown msecs

这条全局命令来进行修改。在该计时器到期之后,IGP将在该链路上建立邻接关系,一旦IGP的邻接关系建立成功同时LDP会话还未同步的话,IGP将通告该链路的度量值为最大。
4.MPLS LDP-IGP同步示例

MPLS中LDP与IGP的同步






为了先保证实验环境的简洁,我先忽略R4以及R4直连链路的存在,大家当他不存在就好,等会儿丫才上场。
R1、R2、R3运行OSPF,通告直连及自己的Loopback口。并且在直连接口上都激活LDP。
现在是一个正常的情况,
(红茶三杯http://weibo.com/vinsoney版权所有,转载请注明出处)
R1#show mpls forwarding-table (这是R1的LFIB表)
Local

Outgoing




PrefixBytes tag

Outgoing


Next Hop




tag




tag or VC


or Tunnel Id
switched


interface


101




204


10.1.34.0/24
0






Fa0/0
10.1.12.2




103




Pop tag





2.2.2.2/32

0






Fa0/0
10.1.12.2




104




201


3.3.3.3/32



0






Fa0/0
10.1.12.2




105




Pop tag





10.1.23.0/24
0




Fa0/0
10.1.12.2

R1的路由表如下(直连路由忽略了):
2.0.0.0/32 is subnetted, 1 subnets

O

2.2.2.2 [110/2] via 10.1.12.2, 00:00:37, FastEthernet0/0

3.0.0.0/32 is subnetted, 1 subnets

O

3.3.3.3 [110/3] via 10.1.12.2, 00:00:37, FastEthernet0/0

O

10.1.23.0 [110/2] via 10.1.12.2, 00:00:37, FastEthernet0/0

O

10.1.34.0 [110/3] via 10.1.12.2, 00:00:39, FastEthernet0/0

现在我们将R2上,完成如下配置:
access-list 100 deny


udp any any eq 646
access-list 100 permit ip any any
然后将ACL应用在R2上,连接R1的接口上,in方向
这样,R2将忽略掉接口上收到的,来自R1的LDP hello包,然后R1-R2之间的LDP邻接过一会就DOWN了。这时候:
R1#sh mpls forwarding-table 
Local

Outgoing




PrefixBytes tag

Outgoing


Next Hop




tag




tag or VC


or Tunnel Id
switched


interface


101





Untagged    10.1.34.0/24
0




Fa0/0
10.1.12.2




103





Untagged    2.2.2.2/32        0          Fa0/0      10.1.12.2    
104





Untagged    3.3.3.3/32        0          Fa0/0      10.1.12.2    
105





Untagged    10.1.23.0/24      0          Fa0/0      10.1.12.2
    我们看到R1上,相关路由前缀的outgoing label都是untagged。而R1的路由表暂时没有任何变化。在现在这个环境中,虽然R1仍然能够ping 通3.3.3.3,但是实际上已经出问题了,因为这是直接走的IPv4包,而不是标签包。
MPLS中LDP与IGP的同步

现在我们在R1、R2上配置MPLS LDP-IGP同步:
router ospf 1


mpls ldp sync





注意,这时候,虽然R1、R2之间的LDP邻接已经断了,原则上说,LDP邻接不起来,在开启同步的情况下,OSPF邻接关系是无法建立的,但是这里R1只有一条可用路径到达R2,因此OSPF邻接无条件建立。与此同时R1及R2对外通告10.1.12.0/24这段直连链路,将以最大的metric 65535来通告。这样做的目的是,如果网络环境是冗余链路的环境,那么可以让从IGP的角度让这条链路的metric最差,从而使得LDP路径绕开这段链路。我们在R3上来瞄一眼:
R3#show ip route
1.0.0.0/32 is subnetted, 1 subnets

O

1.1.1.1

[110/65537]
via 10.1.23.2, 00:09:07, FastEthernet0/0

2.0.0.0/32 is subnetted, 1 subnets

O

2.2.2.2 [110/2] via 10.1.23.2, 00:09:07, FastEthernet0/0

10.0.0.0/24 is subnetted, 3 subnets

O

10.1.12.0

[110/65536]
via 10.1.23.2, 00:09:07, FastEthernet0/0

我们看到,由于R2更新出来的LSA中,关于10.1.12.0/24这个直连网段,metric设置成了65535,因而,在R3的路由表里,我们看到1.1.1.1/32及10.1.12.0/24的路由metric都离奇的大。再看一下R2产生的1类LSA:
R3#show ip ospf database router 2.2.2.2


OSPF Router with ID (3.3.3.3) (Process ID 1)

Router Link States (Area 0)



LS age: 705


Options: (No TOS-capability, DC)


LS Type: Router Links


Link State ID: 2.2.2.2


Advertising Router: 2.2.2.2


LS Seq Number: 8000001F


Checksum: 0x580A


Length: 60


Number of Links: 3





Link connected to: a Stub Network
(Link ID) Network/subnet number: 2.2.2.2
(Link Data) Network Mask: 255.255.255.255

Number of TOS metrics: 0



TOS 0 Metrics: 1


!! 2.2.2.2链路的metric不变






Link connected to: a Transit Network
(Link ID) Designated Router address: 10.1.23.2
(Link Data) Router Interface address: 10.1.23.2

Number of TOS metrics: 0



TOS 0 Metrics: 1


!! 10.1.23.2的也不变






Link connected to: a Transit Network
(Link ID) Designated Router address: 10.1.12.2
(Link Data) Router Interface address: 10.1.12.2

Number of TOS metrics: 0



TOS 0

Metrics: 65535






!!出问题的链路,metric被设置成了65535

R1的路由表如下:

O

2.2.2.2

[110/65536]
via 10.1.12.2, 00:00:47, FastEthernet0/0

O

3.3.3.3

[110/65537]
via 10.1.12.2, 00:00:47, FastEthernet0/0

O

10.1.23.0

[110/65536]
via 10.1.12.2, 00:00:48, FastEthernet0/0

看到没R1将直连链路10.1.12.0的cost调成了65545。
R1#sh ip os mpls ldp interface fa0/0
FastEthernet0/0


Process ID 1, Area 0


LDP is not configured through LDP autoconfig


LDP-IGP Synchronization : Required


Holddown timer is not configured


Interface is up and

sending maximum metric
现在我们将R4加进来,注意,R4在这个时候只配OSPF,先不在连接R1的接口上配置mpls ip(或者使用ACL过滤掉LDP报文),这样使得R1、R4之间的LDP邻接无法建立,我们来观察一下现象。

MPLS中LDP与IGP的同步

注意,由于R1激活了MPLS LDP-IGP同步,因此,在R1-R4之间的LDP邻接关系建立起来之前,R1上连接R4的接口是不会发送OSPF HELLO包的,也就是说R1-R4的OSPF邻接关系是永远无法建立的。当然,我们也不希望看着R1-R4这么拧巴下去,对谁都不好,是吧?卧槽哥们就是仁慈,所以在R1上来配置个:
mpls ldp igp sync holddown 5000
将同步holddown计时器设置为5S,这样一来5S超时后,R1-R4就建立起来了OSPF邻接关系。
又或者,我让R1-R4之间的LDP邻接建立起来,那么R1-R4之间的OSPF自然也就起来了。好了,我们现在让R1-R4之间的LDP邻接关系起来,那么随之OSPF邻接关系马上也会自动建立起来。

MPLS中LDP与IGP的同步

现在一来,由于R1上有MPLS LDP-IGP同步,R1将10.1.12.0/24这段链路metric调到65535(其实这时候R1-R2之间的OSPF邻接关系应该DOWN掉的,保存配置将R1重启,会发现R1-R2之间的OSPF邻接关系起不来了),使得R1优选R4作为去往3.3.3.3网络的下一跳,同时R1-R4之间又维持着LDP邻接关系,因此,R1将只采用R4关于3.3.3.3的标签映射,也就是使用标签404来发送标签包到3.3.3.3。
(红茶三杯http://weibo.com/vinsoney版权所有,转载请注明出处)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: