前面我们已经学习了LDP的基础概念,了解了LDP会话的建立、LDP的标签控制等知识,今天来整体过一遍LDP的一个工作过程,后面我们再通过实验深入学习。
一、LDP标签分发
标签分发需要基于基础的路由协议建立LDP会话,激活MPLS和LDP。以下面的拓扑进行说明:所有LSR均采用DU + Independent +Liberal方式,目的网段为R4的192.168.4.0/24。
因为采用DU的标签发布模式,因此R4会为直连路由192.168.4.0/24分配标签,这里以1041表示,并主动通过LDP协议报文将标签映射通告给LDP对等体R2和R3。
以R2为例,在其路由表中,192.168.4.0/24路由的下一跳为R4,当它从R4收到关于192.168.4.0/24的标签映射通告时,由于该通告来自下游LDP邻居,因此这将触发它自己为该路由分配标签1021,并将标签映射通告给LDP邻居(如R1)。R3同理。
R1收到LDP邻居R2及R3通告过来的关于192.168.4.0/24路由的标签映射后,将这两个标签都存储起来,但是由于在自己的路由表中,到达192.168.4.0/24的下一跳是R2,因此当前它只会使用R2所通告的标签1021。
经过上面的几个步骤,从R4向上游通告标签,后R1、R2、R3都知道了去往192.168.4.0/24网段的标签转发路径。
注:当R2发生故障时,OSPF路由将会重新收敛,此时R1的路由表中192.168.4.0/24路由的下一跳将会切换至R3,此时R1将启用R3所通告的、关于192.168.4.0/24的标签。
二、LDP标签转发
这个拓扑从R1去往R4的192.168.4.0/24,使用MPLS LDP标签转发。
R1作为Ingress LSR,需要对接收的IP报文执行Push操作压入标签,并进行标签转发。
当R1收到发往192.168.4.1的IP报文时,首先在其FIB表中查询该目的IP地址,它发现所匹配的表项的Tunnel ID为非0,因此继续在NHLFE中查询该Tunnel ID,然后意识到需要将对该IP报文压入标签并进行标签转发,出接口为GE0/0/0、下一跳为R2、出站标签为1021,于是为报文插入标签头部并转发出去。
R2作为Transit LSR,需要对接收的IP报文执行Swap操作交换标签,并进行标签转发。当R2收到携带1021标签的标签报文时,查询ILM,根据ILM对应到NHLFE中的表项。于是,R2对该标签报文通过swap操作将标签更换为1041,并从相应的接口转发出去。
R4作为Egress LSR,需要对接收的IP报文执行Pop操作交换标签,并进行IP转发。
当R4收到携带1041标签的标签报文时,查询ILM,根据ILM查询到操作为Pop。于是,R4对该标签报文通过Pop操作将最外层标签剥离,此时该报文已经变成了标准IP报文,R4将对该IP报文执行标准的IP转发流程。
在这里需要考虑PHP特性会在倒数第二跳弹出标签的现象。
三、工作过程简单总结
- LSR首先通过运行IGP协议(例如OSPF、IS-IS等)来构建路由表、FIB表;
- LDP根据相应的模式,为路由表中的路由前缀(FEC)分配标签;
- LDP根据相应的模式,将自己为路由前缀分配的标签,通过LDP标签映射报文通告给LDP邻居;
- LSR将自己为路由前缀分配的标签,以及LDP邻居为该路由前缀通告的标签存储起来,并与出接口、下一跳地址等信息形成关联(标签转发表项);
- 当LSR转发到达目的网络的标签报文时,所使用的出站标签总是下游LDP邻居所通告的标签,此处所指的下游邻居,是设备的路由表中到达该目的网络的下一跳设备。
总结:这里就大概过了一遍LDP标签的分发和转发过程,下节通过一些实验来进行模拟。