以前介绍静态LSP在小规模的场景下能够进行手动配置,当网络规模变大时,静态LSP的配置就变得复杂,他须要为每个FEC建立label,手工配置的静态LSP就不符合当前场景。 相似于IGP的ospf,rip等协议的路由表,MPLS在控制面也须要一个协议来构建标签表,此处用到的协议就是ldp(label distribute protocol)。当控制面的标签表构建完成后,在实际转发时路由器看的是标签转发表(lfib),这点跟igp的fib表概念很类似。 网络
本次实验拓扑以下图所示:
在上图中,端口的IP地址为xx.0.0.x/24(x为路由器编号),如R1上g0/0/0接口地址为12.0.0.1/24,每一个路由器的使用x.x.x.x/32(x为路由器编号)做为: ide
相似于BGP协议,LDP协议也须要一个地址做为通讯地址,这个地址默认是lsr-id的公网地址,若是是私网地址则为接口的主IP地址,因此本例中ldp的通讯地址默认为x.x.x.x/32,为了让通讯地址可以正常通讯,在MPLS下层须要借助IGP协议,本例采用ospf协议 oop
接口IP地址这些设置省略,本次仅演示R1上的配置,其他路由器上配置相似,再也不赘述: 优化
# 先打通底层IGP,为后续MPLS作准备 [R1]ospf 1 router-id 1.1.1.1 [R1-ospf-1]area 0 [R1-ospf-1-area-0.0.0.0]network 12.0.0.1 0.0.0.0 [R1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0 # 全局使能MPLS,lsr-id不会自动选举,必须手动设置 [R1]mpls lsr-id 1.1.1.1 [R1]mpls [R1]mpls ldp # 在对应接口上启用mpls功能 [R1]interface g0/0/0 [R1-GigabitEthernet0/0/0]mpls [R1-GigabitEthernet0/0/0]mpls ldp
至此,配置完成,能够经过tracert来查看1.1.1.1/32去往5.5.5.5/32确实是经过标签转发进行,而没有经过IGP走IP报文 3d
<R1>tracert -v -a 1.1.1.1 5.5.5.5 traceroute to 5.5.5.5(5.5.5.5), max hops: 30 ,packet length: 40,press CTRL_C t o break 1 12.0.0.2[MPLS Label=1026 Exp=0 S=1 TTL=1] 30 ms 30 ms 20 ms 2 24.0.0.4[MPLS Label=1025 Exp=0 S=1 TTL=1] 30 ms 20 ms 30 ms #注意:此处是倒数第二跳一弹出标签,后续会详细介绍 3 45.0.0.5 40 ms 30 ms 30 ms
当路由器的物理接口激活LDP协议后,该接口会向224.0.0.2组播发送数据报文用于发现邻居
数据报文中会携带用于LDP通讯的地址,默认状况下通讯地址是lsr-id的公网地址,若是lsr-id不是公网地址,则会用接口的主地址做为通讯地址,,后期等LDP邻居创建后,邻居之间的keepalive报文也是经过该地址通讯
通讯地址也能够手动指定 code
[R1-GigabitEthernet0/0/0]mpls ldp transport-address ? Ethernet Ethernet interface GigabitEthernet GigabitEthernet interface LoopBack LoopBack interface NULL NULL interface interface Specify Transport Address As One Of Interface
当接口相互之间交互过通讯地址后,由地址大的一方主动发起TCP会话请求,通过三次握手后最终创建链接,至此LDP邻居关系创建完成 router
LDP协议默认会给每个32位的FEC分配一格标签,且在MPLS中,这些标签虽然是无序分发的,但有下面3种策略 blog
[R2-GigabitEthernet0/0/1]mpls ldp advertisement ? dod Downstream On Demand Advertisement Mode du Downstream Unsolicited Advertisement Mode
自由/保守
自由:因为低层IGP互通,对于一个FEC可能会有多个路由器为他分配标签,但它只会选择路由表中下一跳路由器分配的标签做为LSP路径,对于其余路由器为这个FEC分配的标签自由策略是保留(默认)
保守:保守策略就是不保留除下一跳路由器以外,其余路由器为这个FEC分配的标签 接口
相似RIP协议同样,LDP协议也有水平分割,即从一个接口接收到了FEC标签,不会把本地为这个FEC分配的标签从这个接口再发出去。但水平分割这个策略默认是关闭的,同一时刻就可能有如下这种状况
R2与R3都在向对方发送相同FEC的标签,此时LSP之因此可以不成为环路的缘由就是他会选择IGP中下一跳地址通告的FEC标签做为LSP路径 ip
不一样于静态MPLS最后一跳弹出标签,启用LDP后它的POP动做发生在倒数第二跳
从下面能够看出,R4再将数据报文交给R5的时候,就已经变成了纯IP报文,这么作的缘由是为了减轻MPLS域边界路由器的负担,同时提高转发效率。若是弹出标签的动做发生在边界路由器上,他则要先再转发表中找到相应的隧道信息拆掉标签,再一次查询转发表进行IP报文转发。
<R1>tracert -v -a 1.1.1.1 5.5.5.5 traceroute to 5.5.5.5(5.5.5.5), max hops: 30 ,packet length: 40,press CTRL_C t o break 1 12.0.0.2[MPLS Label=1026 Exp=0 S=1 TTL=1] 30 ms 30 ms 20 ms 2 24.0.0.4[MPLS Label=1025 Exp=0 S=1 TTL=1] 30 ms 20 ms 30 ms 3 45.0.0.5 40 ms 30 ms 30 ms
那么他是如何判断哪一个交换机是倒数第二个从而触发POP动做的呢?MPLS的LDP标签是从1024开始分发,他有0~15共16个保留标签,路由器默认会给本地起源的FEC标签分配为3
当上游路由器发现下游FEC标签为3时,就触发POP动做,会弹出标签将IP报文送给边界路由器
[R4]dis tunnel-info tunnel-id 0x1 Tunnel ID: 0x1 Tunnel Token: 1 Type: lsp Destination: 5.5.5.5 Out Slot: 0 Instance ID: 0 Out Interface: GigabitEthernet0/0/1 Out Label: 3 Next Hop: 45.0.0.5 Lsp Index: 4097
这么作虽然减轻了边界路由器的负担提高了转发效率,可是也带来了一个新的问题:标签中EXP用于优化的信息丢失,一般一个优化是要求端到端的,这样就不知足端到端的要求,解决办法是用标签0代替标签3,他会保留除label外的其余字段
这样最后边界路由器看到label 0时直接进行IP报文转发,而优先级等字段也得以保留
经过上述内容,咱们能够将动态LDP总结为如下几点: