全面详细的介绍MPLS&MPLS - VPN

更新时间:2023-03-08 09:33:13 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MPLS / MPLS_VPN

目录 MPLS

非IP包头交换过程 帧中继 PVC 交换方式 非IP数字包头交换方式 交换方式总结

MPLS(多协议标签交换) MPLS优势 MPLS中的BGP 思科MPLS历史 MPLS标签 MPLS标签栈 MPLS设备类型 LSR操作过程 标签交换路径LSP 转发等价类(FEC) MPLS标签交换过程 打标签 标签分发方式

在现有的路由协议中分发 标签分发协议 标签分发协议LDP 标签分发模式 标签分发模式 标签保存模式 LSP控制模式 MPLS负载均衡 MPLS未知标签 MPLS保留标签 MPLS TTL行为 MPLS MTU

MPLS最大接收单元(MRU) MTU路径发现 标签分发 LDP运行

配置MPLS

查看和修改标签范围 查看和修改MTU 全局开启CEF 配置LDP

查看LDP简单信息 查看LDP邻居相关信息 查看标签交换相关信息 查看标签交换过程 查看数据包交换数量 路由条目的标签限制 LDP邻居认证 LDP会话保护 配置会话保护 查看会话保护效果 手工配置远程会话 IGP和LDP同步

配置IGP和LDP的同步 查看配置 配置Holddown 查看同步的效果 MPLS_VPN

RD(路由区分符) VRF(虚拟路由表) RT(路由对象) MP-BGP MP-BGP规则 PE-CE路由协议 协议配置方法 静态路由 RIPv2 OSPF EIGRP EBGP 配置MPLS_VPN 配置MPLS 配置普通BGP 在PE上创建VRF

在PE上将连CE的接口划入VRF 在PE上查看VRF的路由表情况

创建MP-BGP

查看MP-BGP的VRF路由 为MP-BGP创建VRF 配置RT控制VRF路由信息 配置PE-CE的路由协议 在PE上查看VRF路由 将路由重分布进MP-BGP 查看MP-BGP路由 查看VRF路由 查看CE路由 测试用户之间通信 PE到CE的通信 OSPF Sham-Link 外部通信

在PE为LAN上创建VRF 配置PE-CE路由协议 配置EIGRP重分布进BGP 查看MP-BGP中的VRF路由表 配置RT允许双方VRF进入 查看双方VRF路由表 测试两个LAN的连通性 CE接入英特网 配置VRF静态路由 在PE-CE间配置Tunnel 更多PE-CE路由协议 静态写VRF路由 PE-CE之间运行EBGP Multi-VRF CE / VRF-Lite 将MPLS区域网络配通 配置MP-BGP

在CE上为不同部门创建不同VRF 将相应部门的接口划入相应VRF 配置PE-CE间的OSPF 在PE上创建VRF 在PE上启动OSPF

在MP-BGP和OSPF间重分布 查看CE各自VRF的路由 测试连通性

MPLS

非IP包头交换过程

1.帧中继 PVC交换方 式

在我们现有的网络当中,IP数据包网络占绝大部分,这样的IP数据包网络,在网络设备传递数据包时,是根据数据包的IP包头信息进行交换的,也就是网络设 备根据包头中的目标IP地址,来决定从哪个接口转发出去。所以在数据包当中,指导设备正确转发数据包的就是IP地址信息,而IP地址只是数据包的一个标识而已。既然数据包的包头信息能够指导设备正确转发,那数据包的包头只要能够被设备正确接受,就能够做出正确的转发决策,正因为如此,网络就产生了其它不同于IP数据包交换方式,比如我们应当熟悉的帧中继网络(Frame Relay)。在帧中继网络中,很明显,帧中继设备(帧中继交换机)在决定数据包该从哪个接口被发出去时,查看的就是包头PVC号码,而不是IP地址,这 个PVC号码,对于帧中继设备来说,就关系到这个数据包应该从哪个接口被转发出去。如上图所示,在帧中继交换机中,只关系数据包的PVC号码是多少,只要看到这个号码,就知道该从哪个接口出去,等数据包到了下一台交换机之后,下一台交换机也做同样的操作,即查看数

据包的PVC号码后就从相应接口发出去,但是不同数据包的PVC号码肯定应该是不一样的,因为同一个PVC号码,对于交换机来说,都应该从同一个接口出去。所以说一台交换机上的每个接口相关联的 PVC号码都是不一样的。但是,这台交换机用过的PVC号码,到了下一台交换机之后,还是可以使用的,因为前面一台交换机根据某个PVC号码对数据包转发之后,自己再根据数据包的PVC进行转发,与前面是不冲突的,因为是各自关联好的。从这里也可以想象出,一个数据包经过一台帧中继交换机之后,到了下面一 台,数据包的PVC是应该被设备进行重新改写才交换的,因为不可能一个PVC经过N台交换机还是一样的。所以可以得出一个理论就是,帧中继数据包的包头信息(即PVC号码)仅一跳有效,也就是本地有效,不同交换机之间,包头信息可重复,在这里用过的PVC号码,在别的交换机上也可能出现一样的,只要保证在单台交换机唯一就可以了,所以每次经过一个交换机之后,需要重新改写包头信息。

2.非IP数字包头交换方式

下面来看一下既不是IP数据包交换,也不是帧中继交换的网络,那么这样的网络给数据包写上什么样的包头来指导设备正确转发呢?就写一个号码而已,我们暂且称它为非IP数字包头交换。在这样的网络中,设备看到包头中的这个数字,就知道该从哪个接口转发出去,每台都是一样的。这种网络跟帧中继交换相同的是设备 也是查看一个号码,而不同的是,一个数据包写上一个号码之后,永远都不会被任何设备改写,直接传到目的地为止,可想而知,网络中任意两台主机之间,他们的 号码必须是唯一的,因为每台交换机都要根据这个号码来做出转发,如果两个数据

包的号码相同,那么所有的交换机都做同样的转发,结果就导致这些数据包被发到 同一台设备。这样的数字网络,全球中,每两点之间仅有一个号码表示,第一个点的数据包头写上此号码,必定是发到第二个点,不可能发送到第三个点,因为第一 个点和第三个点,会使用另外一个号码,所以此号码为两点唯一,网络设备中有每两点(即每个号码)的出口信息,收到任何一个包,都能不看IP地址而根据此号码选择从相应接口发出去,每台设备执行相同的过程,即可完成任意两点间的传输。此交换方式其实并没有在计算机网络中应用,但是我们使用的电话网络,就是这种交换方式,即任何两台电话之间打电话,号码唯一,不可能有相同号码,如果你拨打电话,别人也拨一个电话号码,你们拨的号码如果是一样的,那肯定就打到同一个人那里去了。所以要实现此交换方式,网络中所有设备需要计算出任意两个点之间的号码,每一个号码都是唯一的,不可重复,与到目的地的相应出口作对应, 生成转发表。但是如果全球计算机网络使用这样的方式,那就是任何一台设备为任何一台主机计算路径时,都要所有全球的设备共同参与,如果不全部都参与,就可能和没参与的计算出重复号码,可想而知工作量之庞大。 3.交换方式总结

以上两种交换方式,都是在不看IP地址(IP包头),只看号码的情况下,做出的交换选择。

可以仔细想一下,在使用帧中继交换时,因为一个PVC号码只要保证单台设备不重复就可以了,这个号码跟接口是关联着的,也就是说一个数据包写上的PVC号码,这个PVC号码的范围只要比交换机的接口多就行,比如范围是1024,所以帧中继交换的包头,号码不是很庞大,也就是说包头并不是很长。而非IP包交换的网络中,因为每两点之间都要有独立的号码,所以如果网络中有10亿个点,那么这个号码的范围就应该比10亿还要大,所以非IP包交换,数据包头肯定要比帧中继的包头大。

但是从结论中,我们能不能说哪个好,哪个不好呢?当然不能,因为帧中继的包头虽然比非IP的包头要小,但是每经过一台设备都要重新改写,也就是说帧中继网络中,设备都在不停地为每个数据包改写PVC号码,这也是巨大的工作量啊。而非IP包头虽然要大一些,但是这个号码写好之后,就永远不会再变了,只要中间的设备看到号码直接转发就行,不用改写了。

4.MPLS(多协议标签交换)

在使用IP包交换网络的时候,人们总是认为设备要根据IP地址查路由表做出转发决定,觉得这样很耗时,总想着寻找一种新的交换技术来代替IP包交换。最初 就考虑使用数字号码的方式来代替IP地址,从上面介绍的交换方式中,由于第二种非IP包交换技术,需要在网络中对任意两点计算出一个全球唯一的号码,因为一个号码即代表了两个点之间的传输,如果其它的点之间的号码和别人出现重复,那么数据的走向也就会发生错误。当前没有研发出协议敢保证计算出任意两点的号码一定是唯一的。

在帧中继的交换中,只要保证每个网段(每台交换机)之间的PVC号码唯一即可,因为经过每个网段(每个交换机)号码都会重新修改。此交换方式也可避免设备检查数据包的IP地址来作做转发决定。(但也不要忘记,这种交换方式的弊端,在似乎节省了时间的同时,其实也浪费了许多时间。)

而当前人们认为效率比较高的MPLS(多协议标签交换)方式,它的数据交换思想则倾向帧中继的交换方式,即认为设备在查看IP地址之后做出转发决定,会比 较慢,会耗更多时间,则给数据包写上了额外的号码,根据此号码而不看IP地址,便能找出相应出口从而转发出去,这正是标签交换,而MPLS称此额外的号码为标签。在此可以看出,MPLS的交换号码(标签)并不是全球唯一,只是每个网段唯一,或者说是每跳唯一,所以,经过一跳之后,此号码对下一跳设备毫无意义,经过一跳之后,此号码要修改成对下一跳有意义的号码,让其根据号码做出转发决定。由此可见,MPLS的标签交换,是每跳都会改写标签,因为根据标签,便能够做出转发决定,所以省略了查看IP地址的过程,被人们认为比IP交换要快。 而MPLS根据自己的标签交换,需要给数据包先写上自己的标签,然后设备才能查看标签之后就转发,此标签是需要在原有的数据包的基础上加进去的,并没有将以前的包头删除,MPLS的标签加在了第二层帧的帧头之后,但又在第三层数据包的包头之前,而MPLS不管是什么协议的数据包,不管以前的包头是什么,都能够在包中加入对自己有利的标签,所以称MPLS交换为多协议标签交换。

MPLS优势:

1.(不正确的理由):因为IP在路由当中,总是根据目的地址在路由表中查找目标网段,并且逐条匹配最优路径,速度慢。

2.MPLS只根据数据包顶部标签来查找并转发,速度快。

结论:由于现在设备采用ASIC(专用集成电路)交换,所以速度并不慢,而MPLS

借签了帧中继交换方式,在数据包每经过一台设备时,都要重新封装,所以MPLS在速度上,并不是优势。

但MPLS可以给数据包加上标签,以做流量控制,这是优势。MPLS还可以承载各种协议,如IPv4,IPv6, 以太网,HDLC,PPP,以及其它第二层帧。

注:MPLS在骨干网中传输任意第二层帧的特征被称为MPLS的任意传输(AToM)。

MPLS中的BGP

BGP在决定一个数据包该如何被转发出去,是通过查找IP地址在路由表中的下一跳,有时不能避免这下一跳不是跟自己直连的,但是BGP只要知道如何到达那 个下一跳即可,所以BGP路由的下一跳,也许自己不清楚,但是只要IGP的路由能帮助自己到达下一跳就行。在大型的核心网络中,我们完全可以设计出网络这边的BGP路由器,它的下一跳在网络那边,那么如何到达网络那边的下一跳,中间就可以使用IGP去完成,只要中间的设备能够帮助BGP到达最终下一跳地址就足够了,所以这样的网络,需要BGP协议的只是网络的边缘路由器,而中间的路由器,只要做一件事,那就是帮BGP找下一跳,就不用启用BGP了,这就大大节省了系统资源。而MPLS的标签交换,就可以用在这样的网络中,来为BGP寻找下一跳,也就是MPLS只要为BGP路由的下一跳打上标签,能够帮助 BGP找到下一跳,那

么其它的问题,都不是问题,其它的路由,BGP就能够自己完成。

略:MPLS流量工程,路径是由首端路由器指定的,所以又称为基于源的路由。

思科MPLS历史

最初Cisco在IP报文顶部加入标签时,称其为标记交换(tag switching),而标记,现在改叫标签了,为每个路由条目分配好标记并写进去,所以这就需要一张表来指导标记交换,称为转发信息库(TFIB),每一台标记交换路由器查看数据包入站的标记,并转为出站标记后发出去。

注:思科第一个支持标记交换的IOS就支持流量工程,就是资源预留协议(RSVP)

MPLS标签

一个标签由32个bit组成

前20为标签值,范围从0到2的20次方减一,即1048575。

其中前16bit不能随便定义,有特定含义,从21到23bit共3位试验用 (EXP),用于QOS。

第24比特是栈底Bos位,值为0,如果是栈底,就为1,标签栈中,标签数量没有限 制。

从25到32共8个bit是TTL

MPLS标签栈

MPLS路由器对数据包可能添加一个标签,也可能添加多个标签,这些标签集合起来叫做标签栈,第一个为顶部标签,最后一个为底部标签,中间数量可以无限, 底部标签BOS总是1,否则就是0。而在数据包传输过程中,设备只根据第一个顶部标签来决定怎么转发。

有些情况是需要两个标签的,两个典型是MPLS VPN和AToM。MPLS VPN要用两个标签,是因为在骨干中传输时,用一个,等出了骨干,再用另外一个。 那么设备收到一个MPLS标签数据包时,又怎么知道这个数据包是要查IP路由表来决定转发呢,还是查标签表做出转发呢?那是因为标签是在第二层帧和第三层数据包之间,第二层会在数据链路层的协议字段写上新的值,以说明后面是一个带有MPLS标签的报文,所以设备能够做出正确的转发决策。

MPLS设备类型

能够理解MPLS标签并根据标签转发数据包的路由器称为LSR 共有以下3种LSR:

入站LSR:接收没有标签的数据包,打上标签并发出

出站LSR:接收带有标签的数据包,移除标签,并发出,出站和入站LSR都是边缘

LSR,所以它们同时连接了 IP网络和MPLS网络。

链路中LSR:接收到带标签的数据包,对其进行操作,然后按正确的接口交换出去,

所以链路中的LSR只进行标签转发。

LSR操作过程

LSR可以执行三种操作:提取,添加和交换

提取,即从标签栈的顶部移除一个或多个标签,移除全部标签是出站LSR必须做

的。

添加,向报文添加标签,如果没有标签,就加新的,入站LSR必须做的。 交换,收到一个有标签的报文,用新的标签交换到顶部,再发出,是链路中的LSR

做的。

注:在MPLS VPN中,入站和出站LSR就是提供商边缘PE,链路中LSR就是P,

术语PE和P在没有运行MPLS VPN时,也可使用。

标签交换路径LSP

LSP指的就是一个源到最终目的需要经过的路径,而在路径中,是要被修改

多次标签,比如一个源到目的要分别被改为20,50,35,68,那么也可以简单认为这两个点之间的LSP是20-50-35-68。LSP是LSR在MPLS网络中转发标签数据后产生的,是标签报文穿越MPLS网络的路径。LSP不需要记住,只需要知道是什么。LSP中第一台LSR就是入站LSR,最后一台就是出 站LSR,之间的就是链路中LSR。

转发等价类(FEC)

FEC可以认为是同一条路由,或者说是到达目标主机的路径是相同的,或者说是相同转发路径的数据流。同一个FEC,所有标签都相同,并不是拥有相同标签的 报文都是同一个FEC,可能EXP值不同。报文属于哪个FEC,由入站LSR决定。FEC和LSP一样只需要知道是什么,不用记住。

注:一条FEC可以包含多个流,但不是一个流一个FEC,比如一台主机在看新浪的

网页,这是一个流,又在看新浪的视频,这又是一个流,这两个流在新浪发给远程主机时,走的路径应该是相同的,所以一个FEC有多个流,但是每个流并没有属于单独的FEC。

MPLS标签交换过程

虽然一条路由可以打了多标签,但是中间的LSR只根据最顶部的标签便可以做出转发。但是,每台LSR的转发表里都会为一条路由显示两个标签,一个是本地标 签,一个是远程标签,要显示两个标签,是因为一台LSR收到数据包之后,就查看它的顶部标签,如果这个标签是某一条相应的本地标签,那么就从相应的接口发出去,同时在发出去的时候,就将数据包的顶部标签改为与这个本地标签对应的远程标签,这是每台LSR在传输时都必须改的,因为改了相应的远程标签,对下一台LSR做出正确转发是有帮助的。所以LSR自己对于某一条路由,别人要给数据打上什么标签,它才能够正确转发,它是要明确告诉邻居的,最后结果就是每一台LSR都会将这个能指导自己做过正确转发的标签发给邻居,邻居就认定这个发来的标签是远程标签,那么邻居在发出去数据包之前,都会改成这个远程标签,最后就能按正确路径转发了。

上图中,比如R4要看到数据包中有标签24,就能够正确往R6(目的地)的方向发,那么这个标签24对于R4来说就是本地标签,那么别人LSR把数据包发给R4之前,就得为它打上标签24才发出来,所以R4就把这个标签24告诉给它的邻居R3,邻居LSR收到标签之后,就认为是远程标签,所以R3认为远程标签是24,而自己要拿到一个数据后,是什么标签自己就会改成24发给R4呢,自己也会产生一个本地标签,可以看到,R3产生的本地标签是23,数据包中只要顶部标签是23,就能够让R3把标签改成24后发给R4,所以R3也把这个标签23发给了邻居R2,邻居R2也同样为路由产生一个本地标签,是22, 也就是说R2收到数据包标签为22的,就改成23,然后传给下一跳R3,最后R2也把对自己有利的标签22发给了R1,那么R1就知道发给R2之前,要把标签改成22,要不然R2就会转发出错的。

而因为R1是入站LSR,所以从外面发给它的数据包都是IP包,是不会有标签的,所以它是第一个向数据包加标签的LSR,可以看出只要它一开始往数据包里加上标签22后发给R2,最后就能一跳一跳地被发到R6,因为中间LSR的标签大家都是协商好的。在数据包到达R4时,R4就会将标签全部移除后发给 R6,因为是进入IP网络,没有必要再打标签发出去。要说明的是,该为一个路由条目产生什么样的本地标签,是LSR自己计算的,没有规则可言,从前面的传输过程可以看出,在MPLS网络中,LSR每次收到数据包,都要将标签改成对下一跳有利的标签才转发出去,这个对下一跳有利的标签就是自己看到的远程标签,也称为出口标签,这个标签就是邻居告诉自己的,因为看到什么标签才能正确转发,邻居是知道的,所以告诉给其它邻居之后,才能保证最终路径的正确。

打标签

所有LSR,根据路由表,将数据包打上标签,发出去,打的这个标签不能乱打,是有意义的,因为下一跳路由器要根据这个标签做出自己的决策,收到的路由器将 顶部标签(上一跳路由器加的标签)去除,再加入出站标签,然后再下一跳路由器重复之前的动作,所以每一台路由器都需要对路由条目的标签达成共识,要不然这 台路由器为数据包打上标签,给下一跳路由器,却不是按设想的接口发出去的,就不能到达目标网络。因此,每一台LSR必须明确哪个出站标签来交换哪个入站标 签,标签对于邻接LSR来说是本地有效,没有全局意义,这和帧中继的PVC是一个道理。所以,基于这些,需要有一种标签分发协议来为所有的LSR分发一个正确的标签,只有这样,LSR才能根据标签将数据包正确地发到目标网络。

标签分发方式

标签分发有两种方式:

1.在已存在的IP路由协议中分发标签。 2.使用一种独立的协议来分发标签。 1.在现有的路由协议中分发

距离矢量路由协议,比如EIGRP很好做,直接绑在前缀上,因为这样的路由协议可以随意修改路由条目的内容。

链路状态路由协议,比如OSPF和ISIS就比较难,因为是发链路状态,而链路状态必须毫无更改地发给邻居,更改链路状态数据包是违背原理。

所以也就没有IGP做标签分发的工作,但是BGP却可以同时发前缀和标签(注:BGP发标签是有条件限制的)。 2.标签分发协议

最终建议使用独立的分发协议,不影响路由协议,但需要在LSR上额外运行协议。

以下是可以分发标签的协议 标记分发协议(TDP) 标签分发协议(LDP) 资源预留协议(RSVP)

TDP是思科专有的标记分发协议,已经被LDP所取代。

LDP是IETF开发,功能广泛,所以只涉及LDP,因为TDP已不用了。 RSVP只用在MPLS TE中。

标签分发协议LDP

对于IP路由表中每一条IGP前缀,每台LSR都会进行本地捆绑,也就是为路由条目加上一个标签,这个标签称为本地标签,到时收到一个数据包后,看到顶部 标签如果是自己所拥有的本地标签,那么就根据这个标签从相应接口转发出去,所以邻居把数据包发给自己时,必须在数据包上写好自己对自己有利的标签,那么要 怎样才能让邻居写上一个能让自己看了就正确转发的标签呢,这就得自己把这个标签告诉邻居,自己把本地标签发给邻居后,这个标签对于邻居来说就称为远程标 签,每当邻居要发送数据包给自己的时候,就先把数据包的顶部标签改成远程标签,也就是改成之前发给邻居的标签,邻居改好标签后,把数据包发给我们,我们就能够做出正确转发了,那么邻居也会像我们一样,把自己的本地标签再发给它们的邻居,因为他要把数据正确发给我们,也是由它的邻居在数据包上写好标签告诉它 的。所以在邻居和邻居之后,是要大家协商好每条路由该写上什么标签后发给邻居。LSR把自己生成的本地标签,和邻居发过来的远程标签,不管是用的着的还是用不着的,统统都保存在一张标签表里,这个表称为LIB表(标签信息库)。LDP就是用来发送标签的协议。

已经介绍过,MPLS的标签,就像帧中继的PVC号码一样,只是每台设备唯一的,但是MPLS的标签,在设备上保持唯一还分两种,基于设备唯一和基于接口唯一。

如果基于设备,就是一条路由在一台设备上只有一个唯一的标签。

如果基于接口,就是一条路由在一台设备上,是每个接口都有一个唯一的标签。也就是说标签只要能保证在每个接口上是唯一的即可,在整台设备上可以重复多次。

但LSR可能有多个远程标签,因为可能有多个邻居LSR。

路由协议EIGRP会将所有邻居发给自己的路由条目存放在拓朴表里,再从拓朴表里选中最优最好的放到路由表也供自己使用,当路由表中的条目失效后,再从拓 朴表中拿出次优的使用。而MPLS标签交换的LSR也像EIGRP那样,会把所有邻居发来的标签都存放在LIB表里(就像EIGRP的拓朴表),然后会从路由条目的多个标签中选择一个最优的使用,这个选择方法可以通过IGP路由表,选到的下一跳是谁,那就用谁发来的标签,被选中的正在使用的标签,全部都是存放在LFIB(标签转发信息库)表里的,就像EIGRP的路由表。

注:IOS中,LDP不会为BGP的IPv4前缀捆绑标签。

标签的选择都是根据IGP最优路径。

标签也可以不是LDP分发,比如TE中,由RSVP分发,在MPLS VPN中,由BGP分发。

因为MPLS的标签是加在数据包的二层帧头之上,三层包头之下,三层包头,被认为是上层协议,也就是有效负载,中间的LSR并不知道上层协议类型,因为标签不会写,但它也不需要知道,自己只会根据标签来做出转发决定;但是出站LSR需要知道,所以会为FEC分配一个本地标签,以用作报文的入站标签,这样就可以了解有效负载了。

LSR在查看标签时,是要看基于接口还是设备,如果是基于接口,不能单看标签,还要看接口,如果是基于设备的那就只看标签。

注:在IOS中,所有的标签交换控制的ATM(LC-ATM)接口都采用基于接口的模式,

其它通通基于设备,也就是说CCIE R&S的考生,只需要关心基于设备的标签即可。

标签分发模式

LSR在向邻居分发标签的时候,有三个需要注意的地方,这三个地方分为: 1.标签分发模式 2.标签保持模式 3.LSP控制模式

1.标签分发模式:

是用来定义标签该什么时候发给邻居,分为两种方式: (1)下游被动DOD模式 (2)下游主动UD模式

(1)在DOD,即被动模式中,是LSR请求下游(路由表的下一跳)为某条路由分发标签,也就是说一台LSR并不知道某些路由自己该写上什么标签后发给下一跳,所以这时就去问邻居要,要来的自己就作为该路由的远程标签存放。

(2)在UD,即主动模式中,LSR不需要为路由请邻居请求标签,标签是邻居会主

动发过来的,不用请求,所以在UD模式中,LSR发现一条路由,就马上将自己的本地标签发送给邻居作为远程标签。

在此可以得出一个结论,在DOD中,LSR会向路由条目的下一跳请求标签,所以LIB 只显示一个远程标签。在UD中,因为可能有多个邻居发送标签过来,所以一条路由可以看到多个标签。

注:IOS除了LC-ATM,全部使用UD模式,也就是说有多个标签从邻居发来。

2.标签保存模式

用来定义LSR在将标签保存时,该保存多久,分两种方式: (1)自由的标签保持模式(LLR) (2)保守的标签保持模式(CLR)

(1)在LLR中,LSR将所有的标签存放在LIB中,然后使用的放到LFIB中,不使用的也保存在LIB中,当路由变化时,马上从LIB中找到新的。

(2)在CLR中,LSR将用到的标签放入LFIB之后,不会在LIB中保存任何标 签。 注:IOS 中,除了LC-ATM接口,其它所有都使用LLR,也就是能在LIB中看到标签。

3.LSP控制模式

用来定义LSR什么时候应该为一条路由创建标签,创建出的这个标签就是自己的本地标签,发给邻居之后,邻居就称其为远程标签。分两种创建方式: (1)独立于LSP的控制模式 (2)非独立于LSP的控制模式

(1)LSR可以独立于其它LSR创建本地标签,称为独立模式,路由器在路由表中发现一个路由,就马上为该路由创建一个标签。

(2)在非独立模式时,LSR只有意识到它是某FEC的出站LSR时,或者从下一跳收到某路由的标签时,才会为路由条目创建本地标签,然后发给邻居作为远程标签,

邻居收到后,然后又会再创建了发给它的邻居。

由上可以看出,独立于LSP的模式在LSP中还没有让所有的LSR完成标签,有些LSR就开始标签转发,所有这些数据包有可能不能被正确转发,有可能被丢 弃。而非独立的模式,只有从邻居收到标签了,开始自己的标签,所以自己使用标签转发后,下一跳邻居肯定是能接受的,不可能因为下一跳不认识标签而被丢弃 。

注:IOS使用独立的LSP控制模式,也就是说发现一条FEC,就马上创建标签,ATM

除外。

在标签转发中,LSR查看标签前20bit,并在LFIB中查找相应的值。 在IP转发中,查看IP地址,在CEF表中做出转发。

路由器可以查看第二层头部的协议字段,就知道是标签报文,然后查找LFIB,则带标签出去,所以查CEF就等于是查IP,则不带标签出去。

路由器要为路由条目打上标签,就必须有功能支持改写数据包包头,CEF是唯一一种可以用于标签报文转发模式的,CEF是可以改写数据包包头的,所以启用 MPLS时,必须在路由器上开CEF,否则无标签。 比如查看路由10.1.1.0在CEF中的操作,可以使用命令 show ip cef 10.1.1.0 查看这条路由的过程

MPLS负载均衡

在IPv4存在多条相同metric出口时,标签的出站也会对应多个接口,出站的标签可以是相同的,也可以不同的;如果下一跳是同台设备,肯定相同,是不同设备会不同,也就独立分配。

当LSR中某条路由有多个下一跳,如果是有标签的和无标签的,无标签的不走,是考虑到MPLS VPN中数据会丢包,因为在MPLS VPN网络中,P路由器是没有两边私有网络的IP路由的,所以无法路由,最终造成丢包。

MPLS未知标签

通常LSR只接收和发送带标签的并且能理解的数据包,因为某些原因,标签没找到的话,IOS是默认采用丢弃行为,如果找不到标签也传,也不能保证别人能传不丢弃,所以就自己开始丢弃。

MPLS保留标签

MPLS 标签范围中,并不是所有的标签都是可以随便用的,有些是保留的,范围是0-15,有特殊作用,0是显式空(null),3是隐式空,1是路由器报警标签,14是OAM报警,其它还没定义。下面是某些保留标签的重要用途: 隐式空3标签

在MPLS网络中,P路由器是完全按照标签交换的,而边缘路由器PE是同时连接了MPLS网络和IP网络,因此,一个数据包在MPLS网络中传输到PE路由器的时候,PE路由器的工作是:结束标签交换过程,从而转入IP网络,而转入IP网络就要执行IP地址的查找。那么从此可以看出,一个标签数据包到达 PE路由器之后,PE路由器第一步开始根据数据包的标签去查找LFIB表,通过查找LFIB之后发现已经不再是标签交换了,第二步就马上转入查IP路由表,最终在IP路由表里查到了结果,从IP网络中发出去。很明显,PE路由器既然最后不可能使用标签交换,而要使用IP交换的,又何必去查了LFIB表才 知道结果呢。所以就考虑到一个方法,能不能让PE的上一跳路由器不要为数据包打标签,直接改成IP数据包就行了,这样上一跳路由器没有写标签,那么PE在 收到数据包之后,就能马上查IP路由表而做出转发。在这里,要让PE的上一跳路由器不要为数据打标签而直接改成IP数据包,这还得需要PE来告诉它才行。 正常情况下,PE路由器是告诉上一跳正常的标签,上一跳将这个标签变成远程标签,但现在,PE路由器就不应该告诉上一跳正常的标签,它告诉的是隐式空(标签号为3)标签,所以收到标签为3的LSR,就不会在数据包发给下一跳时打上标签。这种终点使用隐式空标签来告诉上一跳不要打标签的行为叫倒数第二跳移除 (PHP)行为,所以一台收到隐式空标签的LSR,相应出口就不再是一个远程标签,而应该在outgoing显示为pop。这种上一跳标签移除称为标签弹出。

注:在 IOS中,PHP这种行为是默认的,但只会为直连路由和聚合路由通告隐式空3,但3不会明写。 显示空标签

显示空的功能是在隐式空的基础上的,IPv4标签号为0,IPv6为2。

因为标签中EXP用于QOS,前一跳移除后,这些信息也没了,可能希望保留,

所以是上一跳将标签变为0,来告诉终点不用为0查找LFIB,只看EXP,所以只关心QOS效果,这样也省事。

路由器报警标签1,只是需要特别注意,并且软件转发。

未保留的都可以用,20个bit,是16-1048575,IOS默认是16-100000,IGP够了,但BGP可能不够,可以查看和修改标签范围。

MPLS TTL行为

在正常情况下,当数据包的TTL值减到0时,路由器会向源发ICMP类型11和代码0(时间超时)的数据包,来告诉源主机目标超时不可达。所以TTL无论对于IP网络还是MPLS网络都是非常重要的。

在数据包从IP网络进入MPLS网络时,IP刚进来,以前的TTL是多少,PE减1后,写到标签的TTL位,在出MPLS网络时,PE再看标签中的TTL 是多少,肯定比IP原来的TTL值小,减1后写回去,如果TTL值比IP原来的TTL值还大,就不正常,就不写了。

标签到标签,添加和交换等操作,也是减1后再复制,中间P路由器只修改顶部标签中的TTL,顶部以下的标签是不动的。

如果遇见一个数据包TTL值为0,普通的MPLS网络就是沿原来的LSP回去,只有是IPv4和IPv6才会,其它的丢弃。

MPLS VPN中TTL没有后,是由终点PE或CE发回的,因为P没有源主机的路由,所以无法发送超时ICMP。

MPLS MTU

OSI第三层网络层协议的包头是在第二层帧头之上的,也就是说在封装二层帧头的时候,是将数据内容和三层包头全部作为数据封装在里面的,对于二层来说,之前的数据最大是多少,就是由MTU来决定的,所以正常情况下MTU就是第三层数据和包头的最大尺寸,这时无需分段就能传输,如果比MTU大,就得分段后传输。但是MPLS的标签是在二层帧头之后的,所以二层帧头将标签的大小和三层包的内容累加到一起作为数据封装的,因为三层包的所有内容正好和MTU一样大,在此基础上加上MPLS标签的话,就肯定比额定的MTU要大,所以这时MPLS的

标签数据是会被分段后传输的,如果不想被分段,就得更新MTU的大小。(一般MPLS数据包加最多两个标签,一个标签4字节,所以只要改成比正常MTU多8字节即可。)而改MTU还必须在MPLS网络中所有设备上进行更 改,除非允许分段。

MPLS最大接收单元(MRU)

此内容无须配置

查看: sh mpls forwarding-table 1.1.1.1 detail

MPLS默认超过MTU的数据包是和IP数据包一样要分段传输的,分段就是LSR移除标签,对IP数据分好相应大小后,再将原来的标签加到每个包,如果 IP包头设置了不分段(DF),LSR就丢掉报文,然后返回一个需要分段的ICMP(不分段位设置为类型3,代码4),然后沿来的LSP发回去。

MTU路径发现(自动执行)

查看从源到目的的最小MTU,就是类似窗口的机制,数据包试着发出去,如果被丢了,就减小后再发,如果再丢就再减再发,直到能正常发到目的地为止。有时这个不太好用,因为ICMP不能返回,可能是防火墙挡住了。

标签分发

要让IGP全部都支持标签分发并且相互协同工作,不现实,所以新分发协议要独立于所有路由协议,那么就使用LDP,但是BGP可以广泛使用,范围大,最后 BGP就自己发标签。LDP不为BGP的IPv4路由发送标签。

LDP运行

LDP运行时有四大功能: (1)运行LDP的LSR发现

(2)会话的建立和维护 (3)标签映射通告 (4)使用通知来进行管理

LDP是需要像OSPF那样建邻居的,使用hello包发现和维护邻居关系,LDP会在启用了的接口上发送hello来找邻居,发送hello用UDP 646,目的地为224.0.0.2,hello时间和保持时间分别是5秒15秒。这个hello包是不能跨网段传递的,而这个hello包被称为LDP Link Hello。

LDP在LSR之间除了建立邻居关系之外,还要建立LDP会话,建LDP会话就是用来交换标签的,使用的是TCP连接。而这个会话也只能和直连邻居建立,这样会话被称为LDP sessions。LDP会话的hello和超时分别是60秒和180秒。如果LDP邻居关系丢失,那么LDP会话也会断开。

配置MPLS

说明:

以上图为拓朴,配置MPLS,MPLS网络区域的范围是R1、R2、R3、R4,而R1和R4同时连接MPLS区域和IP网络,最终数据包在MPLS区域内传递时,我们将看到标签交换的效果。在开始配置之前,需要申明的是,每台路由器上都已配置looback0,地址分别为X.X.X.X/32,其中X表 示设备号码,比如R2的loopback0地址为2.2.2.2/32,R5的loopback0地址为5.5.5.5/32;在所有设备中,已经启用 OSPF协议,除了每台设备的接口loopback0没有放进OSPF进程以外,其它所有接口均在OSPF进程里通告。

1.查看和修改标签范围(可选配置) (1)看默认标签数量: R1#sh mpls label range

Downstream Generic label region: Min/Max label: 16/100000 R1#

说明:默认标签范围是16到100000 (2)改标签范围:

R1(config)#mpls label range 16 1010000 R1#sh mpls label range

Downstream Generic label region: Min/Max label: 16/1010000 R1#

说明:已 将标签范围改成:16到1010000 2.查看和修改MTU(可选配置) (1)查看路由器接口MTU: R1#show mpls int s1/1 detail (2)修改路由器接口MTU:

R1(config)#int s1/1

R1 (config-if)#mpls mtu 1508 或

R1 (config)#int s1/1 R1 (config-if)#mtu 2000

注:某些IOS下的接口不能设置MTU,只能分段传输。

(3)修改交换机支持小巨型帧: sw(config)#system jumbomtu 2000 sw(config)#system mtu 2000 3.全局开启CEF(必须配置)

注:某些IOS版本已默认开启的,可跳过此步,请以自身IOS为准。

r1(config)#ip cef

4.配置LDP (必须配置) (1) 全局启用LDP:

说明:如果全局启用LDP,就将在此路由器的所有接口都开启LDP,但也可以选择

只在某接口开启。

r1(config)#mpls label protocol ldp (2) 接口启用LDP:

说明:如果路由器并非全部接口都需要开启LDP,则只在相应接口开启。

r1(config)#int s1/1

r1(config-if)# mpls label protocol ldp (3)在接口下开启发hello包找邻居:

r1(config)#int s1/1 r1(config-if)#mpls ip

说明:接口上配置mpls ip 就算打开了

IOS有时还在使用tag-switching来代替mpls ip,但功能是一样的,这两个命令相等。

注:请按上述配置LDP的方法,在MPLS区域内的所有路由器所有相关接口开启

LDP并发出hello 包,以方便LDP邻居的建立。

附:按以上拓朴,总结出需要的配置为:

R1:

r1(config)#int s1/1

r1(config-if)# mpls label protocol ldp r1(config-if)#mpls ip R2:

R2(config)#mpls label protocol ldp R2(config)#int s1/0 R2(config-if)#mpls ip R2(config-if)#exit R2(config)#int s1/1 R2(config-if)#mpls ip R3:

R3(config)#mpls label protocol ldp R3(config)#int s1/0 R3(config-if)#mpls ip

R3(config-if)#exit R3(config)#int s1/1 R3(config-if)#mpls ip R4:

R4(config)#int s1/1

R4(config-if)#mpls label protocol ldp R4(config-if)#mpls ip

5.查看LDP简单信息

(1)可以查看哪些接口开启了mpls: r1#sh mpls interfaces

Interface IP Tunnel Operational Serial1/1 Yes (ldp) No Yes r1#

说明:可以看出,R1相关接口S1/1已经运行在LDP下。(其它设备接口状态略过!) (2)查看看LDP详情,包括包含hello时间,会话时间: r1#sh mpls ldp parameters Protocol version: 1

Downstream label generic region: min label: 16; max label: 100000 Session hold time: 180 sec; keep alive interval: 60 sec Discovery hello: holdtime: 15 sec; interval: 5 sec Discovery targeted hello: holdtime: 90 sec; interval: 10 sec

Downstream on Demand max hop count: 255 Downstream on Demand Path Vector Limit: 255 LDP for targeted sessions

LDP initial/maximum backoff: 15/120 sec LDP loop detection: off r1#

说明:可以看到,默认hello和hold分别是5s和15s,会话时间hello和hold分别是60s和180s。

(3)修改时间机制(并不建议修改):

注:两边保持时间不一样,选用小的一端,改了多个,也是用小的而不是最新的。 改hello:

r1(config)#mpls ldp discovery hello interval 3 r1(config)#exi

r1#sh mpls ldp parameters Protocol version: 1

Downstream label generic region: min label: 16; max label: 100000 Session hold time: 180 sec; keep alive interval: 60 sec Discovery hello: holdtime: 15 sec; interval: 3 sec Discovery targeted hello: holdtime: 90 sec; interval: 10 sec Downstream on Demand max hop count: 255 Downstream on Demand Path Vector Limit: 255 LDP for targeted sessions

LDP initial/maximum backoff: 15/120 sec LDP loop detection: off

说明:可以看到hello时间被改成了3s r1#sh mpls ldp discovery detail Local LDP Identifier: 12.1.1.1:0 Discovery Sources: Interfaces:

Serial1/1 (ldp): xmit/recv Enabled: Interface config

Hello interval: 3000 ms; Transport IP addr: 12.1.1.1 LDP Id: 2.2.2.2:0; no host route to transport addr Src IP addr: 12.1.1.2; Transport IP addr: 12.1.1.2 Hold time: 15 sec; Proposed local/peer: 15/15 sec Reachable via 12.1.1.0/24 r1#

说明:也 可以看到hello时间被改成了3s 再改:

r1(config)#mpls ldp discovery hello interval 8 r1#sh mpls ldp parameters Protocol version: 1

Downstream label generic region: min label: 16; max label: 100000 Session hold time: 180 sec; keep alive interval: 60 sec Discovery hello: holdtime: 15 sec; interval: 8 sec Discovery targeted hello: holdtime: 90 sec; interval: 10 sec Downstream on Demand max hop count: 255 Downstream on Demand Path Vector Limit: 255 LDP for targeted sessions

LDP initial/maximum backoff: 15/120 sec LDP loop detection: off r1#

说明:可 以看到hello时间被改成了8s r1#sh mpls ldp discovery detail Local LDP Identifier: 12.1.1.1:0 Discovery Sources: Interfaces:

Serial1/1 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 12.1.1.1 LDP Id: 2.2.2.2:0; no host route to transport addr Src IP addr: 12.1.1.2; Transport IP addr: 12.1.1.2 Hold time: 15 sec; Proposed local/peer: 15/15 sec

Reachable via 12.1.1.0/24 r1#

说明:在 这可以看到hello时间还是选默认5s,因为这个小。 改会话时间(不建议): r1(config)#mpls ldp holdtime 150 r1#sh adjacency detail

*Mar 1 01:32:03.063: %SYS-5-CONFIG_I: Configured from console by console r1#sh mpls ldp parameters Protocol version: 1

Downstream label generic region: min label: 16; max label: 100000 Session hold time: 150 sec; keep alive interval: 50 sec Discovery hello: holdtime: 15 sec; interval: 8 sec Discovery targeted hello: holdtime: 90 sec; interval: 10 sec Downstream on Demand max hop count: 255 Downstream on Demand Path Vector Limit: 255 LDP for targeted sessions

LDP initial/maximum backoff: 15/120 sec LDP loop detection: off r1#

说明可以看到hold时间被改成了150s。

6.查看LDP邻居相关信息

(1)在R1上查看LDP discovery情况: r1#sh mpls ldp discovery detail Local LDP Identifier: 1.1.1.1:0

Discovery Sources: Interfaces:

Serial1/1 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 1.1.1.1 LDP Id: 2.2.2.2:0; no route to transport addr Src IP addr: 12.1.1.2; Transport IP addr: 2.2.2.2 Hold time: 15 sec; Proposed local/peer: 15/15 sec r1#

说明:Local LDP Identifier 是每台LSR都必须有的,这个ID用6个字节表示,前4个节字称为Rotuer-ID,先选loopback地址最大的,然后是物理接口,它的选举方法和OSPF Rotuer-ID相同,后面2个字节是表示标签空间的,也就是标签是基于设备还是基于接口,如果是基于设备,就是0,可以从上面看 出,1.1.1.1:0中,1.1.1.1表示R1的Rotuer-ID,而0表示标签是基于设备的。再看后面还有个Transport IP ,而这个IP默认是选用Rotuer-ID的地址,这个地址在建邻居时非常重要,是会话的源地址,如果这个地址对方没有路由可达,那么就不可能建起邻居。 所以一定要保证双方Transport IP 是路由相通的。从上面结果中还可以看出,R1已经收到了对方R2的hello,对方Transport IP是2.2.2.2,也就是对方的loopback0地址,而因为这个地址不在OSPF进程里,所以R1不能到达,也就不能建邻居,后面提示为“no route to transport addr”。

(2)在R2上查看LDP discovery情况: r2#sh mpls ldp discovery detail

Local LDP Identifier: 2.2.2.2:0

Discovery Sources: Interfaces:

Serial1/0 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 2.2.2.2 LDP Id: 3.3.3.3:0; no route to transport addr Src IP addr: 23.1.1.3; Transport IP addr: 3.3.3.3 Hold time: 15 sec; Proposed local/peer: 15/15 sec Serial1/1 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 2.2.2.2 LDP Id: 1.1.1.1:0; no route to transport addr Src IP addr: 12.1.1.1; Transport IP addr: 1.1.1.1 Hold time: 15 sec; Proposed local/peer: 15/15 sec r2#

说明:可 以看出,R2的Rotuer-ID是2.2.2.2,这个地址也就是Transport IP,而R1的Transport IP是1.1.1.1,从上面也看出这两个地址是路由上互不相通的,所以不可能建立LDP邻居。 (3)解决邻居建立问题:

说明:要 解决邻居建立问题,就要让双方的Transport IP能够相通,而Transport IP就是选用Rotuer-ID的IP地址,可以修改Rotuer-ID为可路由的接口,即可解决Transport IP互通。

改R1Router-Id为S1/1接口地址

r1(config)#mpls ldp router-id serial 1/1 force force说明立即生效 r1(config)#exi 查看结果:

r1#sh mpls ldp discovery detail Local LDP Identifier: 12.1.1.1:0 Discovery Sources: Interfaces:

Serial1/1 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 12.1.1.1 LDP Id: 2.2.2.2:0; no route to transport addr Src IP addr: 12.1.1.2; Transport IP addr: 2.2.2.2 Hold time: 15 sec; Proposed local/peer: 15/15 sec r1#

说明:可 以看到Rotuer-ID已经改成接口S1/1的地址12.1.1.1,Transport IP也随即变成了12.1.1.1。

R1的Transport IP对R2来说已经可达了,可是R2的Transport IP还是自己的loopback口地址,R1不能到达,所以还是不能建邻居。Transport IP默认选用Rotuer-ID的地址,但我们可以明确指定Transport IP为某个接口的地址,这次我们直接改R2的Transport IP地址为S1/1的接口地址,Rotuer-ID不变: 先看没改之前:

r2#sh mpls ldp discovery detail

Local LDP Identifier: 2.2.2.2:0

Discovery Sources: Interfaces:

Serial1/0 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 2.2.2.2 LDP Id: 3.3.3.3:0; no route to transport addr Src IP addr: 23.1.1.3; Transport IP addr: 3.3.3.3 Hold time: 15 sec; Proposed local/peer: 15/15 sec Serial1/1 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 2.2.2.2 LDP Id: 12.1.1.1:0; no host route to transport addr Src IP addr: 12.1.1.1; Transport IP addr: 12.1.1.1 Hold time: 15 sec; Proposed local/peer: 15/15 sec Reachable via 12.1.1.0/24 r2#conf t 现在修改: r2(config)#int s1/1

r2(config-if)#mpls ldp discovery transport-address interface r2(config-if)#exi

再看:

r2#sh mpls ldp discovery detail Local LDP Identifier: 2.2.2.2:0

Discovery Sources: Interfaces:

Serial1/0 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 2.2.2.2 LDP Id: 3.3.3.3:0; no route to transport addr Src IP addr: 23.1.1.3; Transport IP addr: 3.3.3.3 Hold time: 15 sec; Proposed local/peer: 15/15 sec Serial1/1 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 12.1.1.2 LDP Id: 12.1.1.1:0; no host route to transport addr Src IP addr: 12.1.1.1; Transport IP addr: 12.1.1.1 Hold time: 15 sec; Proposed local/peer: 15/15 sec Reachable via 12.1.1.0/24 r2#

说明:可 以看到,s1/1上Transport IP已经不再是Router-ID的地址,已经被改成本接口地址了。但是接口S1/0还是使用原来Router-ID的地址。

但是邻居还是不会有,因为R2上直接改接口为Transport IP,是要重启进程才

能生效的:

r2#cle mpls ldp neighbor * r2#

再查看邻居: r2#sh mpls ldp neighbor

Peer LDP Ident: 12.1.1.1:0; Local LDP Ident 2.2.2.2:0 TCP connection: 12.1.1.1.646 - 12.1.1.2.11155 State: Oper; Msgs sent/rcvd: 9/9; Downstream Up time: 00:00:43 LDP discovery sources: Serial1/1, Src IP addr: 12.1.1.1 Addresses bound to peer LDP Ident:

15.1.1.1 12.1.1.1 1.1.1.1 r2#

说明:可以看到,邻居已经有了,并且可以看出端口号是646。 (4)再来关心R2和R3的邻居:

说明:因为R2现在连R3的接口S1/0的Transport IP还是使用Router-ID的地址2.2.2.2,而R3也到不了2.2.2.2,所以R2和R3之间的LDP邻居关系是建不起来的,我们还是像R2 和R1建邻居那样,把S1/0接口的Transport IP改成使用本接口的地址。 r2(config)#int s1/0

r2(config-if)#mpls ldp discovery transport-address interface r2(config-if)#exi

而R3的Transport IP还是使用自己的Router-ID地址3.3.3.3,这个地址R2也是无法到达的,在R3上也可以通过将该地址放进OSPF进程来使R2能够 ping通,从

而建立LDP邻居。 r3(config)#router ospf 2

r3(config-router)#network 3.3.3.3 0.0.0.0 area 0 r3(config-router)#exi

在R2上查看建LDP邻居的源地址: r2#sh mpls ldp discovery detail Local LDP Identifier: 2.2.2.2:0

Discovery Sources: Interfaces:

Serial1/0 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 23.1.1.2 LDP Id: 3.3.3.3:0

Src IP addr: 23.1.1.3; Transport IP addr: 3.3.3.3 Hold time: 15 sec; Proposed local/peer: 15/15 sec Reachable via 3.3.3.3/32 Serial1/1 (ldp): xmit/recv Enabled: Interface config

Hello interval: 5000 ms; Transport IP addr: 12.1.1.2 LDP Id: 12.1.1.1:0; no host route to transport addr Src IP addr: 12.1.1.1; Transport IP addr: 12.1.1.1

Hold time: 15 sec; Proposed local/peer: 15/15 sec Reachable via 12.1.1.0/24 r2#

说明:可 以看到,R2连R3的接口S1/0的Transport IP 已经成功改成了23.1.1.2。

但是R2还是不会有R3的邻居,所以按以前方法重置LDP进程,再看就会有了:

来查看重置后的邻居状态: r2#sh mpls ldp neighbor

Peer LDP Ident: 3.3.3.3:0; Local LDP Ident 2.2.2.2:0 TCP connection: 3.3.3.3.646 - 23.1.1.2.61206 State: Oper; Msgs sent/rcvd: 10/9; Downstream Up time: 00:00:09 LDP discovery sources: Serial1/0, Src IP addr: 23.1.1.3 Addresses bound to peer LDP Ident:

23.1.1.3 34.1.1.3 3.3.3.3 Peer LDP Ident: 12.1.1.1:0; Local LDP Ident 2.2.2.2:0 TCP connection: 12.1.1.1.646 - 12.1.1.2.44954 State: Oper; Msgs sent/rcvd: 10/10; Downstream Up time: 00:00:03 LDP discovery sources: Serial1/1, Src IP addr: 12.1.1.1 Addresses bound to peer LDP Ident:

15.1.1.1 12.1.1.1 1.1.1.1 r2#

说明:在 R2上可以看见和R3的LDP邻居关系已经建立。 (5)R3跟R4的邻居关系:

说明:R3的Router-ID已经通告进OSPF进程,所以R4也能到达了,那么R4也选择将Loopback0地址放进OSPF进程来完成和R3的LDP邻居关系建立。 说明:最终保证所有LDP邻居建立(R1和R2的邻居,R2和R3的邻居,R3和R4的邻居全部都有)。

7.查看标签交换相关信息

说明:先以R4的loopback0地址4.4.4.4/32这条路由为例,来看别的路由器对这条路由的标签状况。

(1)在R4上查看LFIB,看路由 4.4.4.4的情况: r4#sh mpls forwarding-table

Local Outgoing Prefix Bytes tag Outgoing Next Hop tag tag or VC or Tunnel Id switched interface 16 Pop tag 23.1.1.0/24 0 Se1/1 34.1.1.3 17 16 12.1.1.0/24 0 Se1/1 34.1.1.3 18 18 15.1.1.0/24 0 Se1/1 34.1.1.3 19 Pop tag 3.3.3.3/32 0 Se1/1 34.1.1.3 r4#

说明:可以看出,R4上对自己直连接口的标签并没有出现在LFIB表中,因此该路由不需要进行标签交换,属正常。

(2)查看R4上CEF对4.4.4.4的处理情况:

注:所有路由的处理,即使是打标签,都要由CEF来处理。 r4#sh ip cef 4.4.4.4

4.4.4.4/32, version 15, epoch 0, connected, receive tag information set local tag: implicit-null r4#

说明:可以看出,R4的CEF对4.4.4.4这条路由打的本地标签是implicit-null(隐式空标签,对于隐式空标签的解释,请参见MPLS正文内容),本地路由发给邻居之后,就成为了邻居的远程标签,所以邻居到达4.4.4.4的路由标签都应该是隐式空标签。 (3)查看R3的CEF对4.4.4.4的处理 情况: r3#sh ip cef 4.4.4.4

4.4.4.4/32, version 19, epoch 0, cached adjacency 34.1.1.4 0 packets, 0 bytes tag information set local tag: 19

via 34.1.1.4, Serial1/1, 0 dependencies next hop 34.1.1.4, Serial1/1 valid cached adjacency

tag rewrite with Se1/1, 34.1.1.4, tags imposed: {} r3#

说明:很明显,4.4.4.4在R4上的本地标签(implicit-null)发给R3之后,就成为了R3的远程标签,可以看到,因为R4发来时是隐式空,所以 R3就不能为4.4.4.4打任何标签,所以最终结果的空的。而R3对于4.4.4.4这条路由是要生成自己的本地标签的,因为自己要对这条路由使用标签交换,可以看到R3自己给4.4.4.4打的本地标签是19,那么这个标签发给别的邻居之后,就该变成远程标签19。

本文来源:https://www.bwwdw.com/article/28n3.html

Top