文章目录

MPLS(多协议标签交换)设计初衷当前路由器转发机制FEC

前言MPLS1.1 标签值LDP/TDP研究:TDPLDPMPLS 环路检测MPLS TTL环路检测LDP环路检测LDP最大跳数法

LDP的长距离扩展邻居LDP发现机制

MPLS VPNMPLS跨域>MPLS OptionA:背靠背VRFMPLS OptionBMPLS OptionC1MPLS OptionC2

删除---过程讲解1.MPLS2.MPLS VPN2.1 Option A交互过程2.2 Option B交互过程2.3 Option C1交互过程PE间建立邻居RR间建立邻居

2.4 Option C2交互过程PE间建立邻居RR间建立邻居

配置过程(仅配置)3.1 MPLS 基础配置3.2 MPLS VPN正常跨域配置3.3 MPLS OptionA方案配置3.4 MPLS OptionB方案配置3.5 MPLS OptionC1方案配置3.6 MPLS OptionC2方案配置

MPLS(多协议标签交换)

设计初衷

多协议指的是在IPV4,IPV6,IPX等网络环境中都可以使用,并且它不对底层物理介质,数据链路层介质,以及上层所使用的协议栈有要求。

MPLS是工作在数据层面的交换技术,也可以理解为是一种转发技术。

MPLS是多协议标签交换,所以重点是标签Label中。就它是怎么样转换的?

交换机的转发效率高,延迟低。路由器转发效率低,延迟高。也就是说交换机处理数据快,路由器处理数据慢。为什么导致这种情况?它们处理数据的方式不同。所使用的资源也就不同。

其一:它们二则对于数据处理方式不同

交换机收到数据查询IP路由表,路由表是被CPU调用的,是软件转发。软件转发十分吃CPU和内存资源,而硬件是不怎么消耗这两种资源的。

其二:它们二则对于数据匹配机制不同

交换机收到帧时,查询DMAC,它能够精确匹配每一个条目。路由器因为有着很多条目网段,去往的都是一个又一个广播域的。

例如DIP是192.168.1.10,而路由表项是192.168.1.0/24 这样不是192.168.1.10 并不是精确的匹配到主机位,只能是模糊的去匹配

**注:**我好像忘记说匹配机制所带来的影响了,模糊匹配的机制很复杂,步骤很多。而精确匹配只需要对照你的表中数值即可。

而采用MPLS的话,就能够在网络中启用MPLS,当网络边界路由器收到MPLS,在发送域前,会给数据加一个封装(4Byte)。标签中是阿拉伯数字,这个数字能够描述报文的一些属性:报文来自那里,要去那里 诸如此类。当后续路由器收到了带有标签的数据之后,直接查看标签即可,也就不需要去查看三层报头了。而查询的是标签,找的表也就不是路由表,而是LFIB(标签转发信息库),这就相当于是IP地址的路由表了。而且由于查询的是LFIB表,它能够采用精确匹配(数字之间匹配,简单多了)并且标签匹配仅有4字节大小,而交换机MAC地址匹配时,需要匹配MAC地址,MAC地址有6字节大小。而且LFIB表是ASIC芯片驱动,也是硬件处理方式。通过优化三层转发机制,从而使端到端延迟变小。也就是MPLS的初衷。

但是由于网络在不断变更,路由器的内部也在慢慢添加了交换机的属性,硬件也越来越牛逼了。导致了MPLS的优势正在慢慢丧失。MPLS以至于现在还没有被淘汰,取决于它的两个衍生功能:MPLS VPN和MPLS TE。

MPLS VPN可以做到比专线还好,因为专线需要拉线去部署,这有大量的人工成本所在,而MPLS部署不需要公司内网再进行类似部署了。

MPLS TE能够做到在运营商内部部署多条链路后,通过TE,做到最大程度的路径负载均衡,也可以指定某些园区之间流量,通过某一条路径,可能该表项去往目的地并不是这样走的,但可以强行要求路由器收到这股流量后,根据要求转发。这差不多就是大规模PBR,才能达到的效果。而PBR部署需要每台路由器。TE只需要源目路由器部署即可。这样做的最大好处就是,能够最大化利用运营商内网的每一根链路带宽,来给客户提供转发帮助。

当前路由器转发机制

1、进程交换

2、快速交换

3、CEF(Cisco Express Forwarding)

思科称为思科急速转发,CEF。华为和华三都有对应的标准。不过都是统一码数

1、进程交换

十分原始,指的是路由器通过ARP来获取封装信息,当你收到一个数据之后,你是不分流的,你要基于收到的每一个数据包,来做路由表的查询。通过路由表查询,你要确定这个转发数据的出接口。路由器查表需要去掉二层帧头帧尾的,要变成一个数据包,而这个数据包是不能够直接被发走的,为了发送这个数据,把数据调度到出接口后,还需要再经过二层表项查询,来确定封装信息之后,来把这个 重新封装成帧,这个帧能,才能最终的被发送走。

进程交换制,指的是路由器要对它收到的每一个数据包,都进行三层表项和二层表项的查询,其中三层表项查询,是为了确定出接口下一跳,而这个二层表项查询,是为了二层的重新封装。由于这两个表项的查询都是基于CPU的,也就是软件转发,效率低下。进程交换体现出了,以前网络时期的短板所在。

2、快速交换

快速交换相比进程交换是一个里程碑的升级,快速交换又称网流式交换,路由器不再基于单包转发,而是基于数据流转发,当然默认情况下呢,网络设备都有归纳数据流的能力,对这个数据流的归纳方式为:基于流量的七元组(相同的入接口, 源目IP,源目端口,协议号,TOS字段)这些加在一起所形成的的,就是一股数据流了。把满足相同条件的数据包,组合在一起,那就是一股流,对于这股流,在做转发时,就提取这股流的第一个数据包,对于第一个数据包,来查询三层表,确定出接口,查询三层表,来确定封装信息,紧接着,我把转发这第一个包所使用的出接口以及封装信息,做一个资源整合,形成了换一个缓冲Cache,然后把这个Cache,缓存在ASIC芯片中,紧接着,对于这一股流的后续数据包,就不再查询三层表,直接查这个Cache就能确定转发的一切信息了,而Cache是直接被ASIC芯片调用的,所以可以理解为对于一股流,除了第一个包,需要使用资源来做软路由,对于所有后续报文,都能直接ASIC来硬处理。所以说了,对于网流式交换,也称为一次路由,多次交换,也称为一次查表,多次转发。

数据层面路由器收到数据包是怎么查表的?

我要使用这个数据包的目的IP地址,在路由表中匹配每一条路由条目,而路由条目越多,所匹配的时间越长,并且匹配过程对于CPU消耗也就越厉害,在快速交换环境中,把大量的数据包整合成一股流,只需要查一次表,那对于CPU消耗呢,就没有那么大了。并且端到端的转发能力,基于这个快速交换,相比快速交换,是高的多得多的。但是还有第三种。

草稿开始

CEF

启动CEF之后没有任何的报文触发,只需要启用了CEF,路由器就会立即形成两张表,第一张是FIB,Forwarding Information Base 转发信息库 三层

Adjacency Tablb 邻接关系表(二层)

两张表都是被ASIC芯片调用,FIB里面装的是 经过优化的路由条目

AT 供数据封装的,优化后的二层信息,

FIB里面的条目是通过下载得到了,只需要启用了CEF,路由器h会把路由表里面所有条目,做一个整合,放到FIB里去。优化指的是什么?就是下一跳,

通过各种各样的方式,获悉了各种各样的路由之后,这些路由都会有下一跳地址。这些下一跳,有的是跟我们直连的,有的是跟我们非直连的。

这个FIB中的路由条目虽然是通过路由表下载得到的,但是当我把这个路由表的路由条目下载过来之前,我会经过一个下一跳整合,把这些非直连的下一跳,都慢慢的变成一个直连的下一跳。所以说了,FIB中的路由条目,看似和路由表中的条目一样,但是在使用这些路由转发数据的时候,是不会存在递归表查询的。

递归表查询:

由于FIB条目是来自路由表的,网络发生改变时,路由条目发生变更时,FIB表也能够自适应的去改变。

当使用FIB表 来转发数据时,没有递归表查询了,他是基于ASIC芯片调用的,所以对于一股流的任何一个数据包,它都不需要进行路由了,完完全全经过交换的方式来查表转发,当确定了出接口之后,FIB还有一个资源,是用来联动邻接关系表的某一个表项的,通过邻接关系表的表项,能够清晰的告诉邻接路由器,在转发这个数据的时候,我封装的二层报头里所有字段,应该填什么值。相比较以往的查表方式,查询ARP表,在查找邻接关系表的表项时,它直接告诉你了,它二层封装的每一个字段,并且这张表也是基于ASIC芯片调用的,所以它近乎没有什么延迟,所以CEF是什么,当你启用完这个之后,不需要任何数据包的触发,就能够针对整个路由表和整个二层表项,形成一个超级大的Cache,这个Cache里面能够包含,我能够转发的去往任何目的地的路径信息,然后基于这个Cache,在转发任何数据时,就直接查找Cache就能够完成转发,0次查表,全部转发。

CEF和MPLS的缺点还是有的,MPLS是基于LFIB的,能够做到精确匹配,但是CEF还是模糊匹配,会稍慢一些,

FEC

FEC(FORWARDING EQUIVALENCE CLASS)转发等价类–给具有相同特性的一类报文配标签。

问题MPLS是基于标签来进行转换的,那么标签是如何产生的呢?

​ 标签肯定是由路由器产生的,那么路由器产生标签,

MPLS是数据层面机制,所谓数据层面机制,指的是:当你路由器收到了带有标签封装的数据包之后,你该如何查表转发。

创造标签是控制层面机制,在MPLS中,有一系列控制层面机制:TDP/LDP

RSVP,MP-BGP 也能够产生标签。

MPLS本身是数据层面,是无法产生标记的,需要通过控制层面协议(例如:TDP/LDP,RSVP,MP-BGP等来产生。

MPLS第一个原则:同一个FEC数据包打上同一个标签。

FEC收到数据包之后也要像CEF来做一个流量整合,这个流量整合按照FEC来整合。每一个FEC对应一个标签,属于同一个FEC的数据包,打上标签。

打好标签之后,后续路由器收到带有标签的报文,就知道收到的报文是属于那个FEC的,相同FEC,那么就可以使用相同的转发机制,来做精确转发。

一个FEC就是数据包的集合,属于相同FEC的数据包属于相同属性。

FEC归类原则:

拥有相同3层VPN目的地

二层电路

路由器同一个接口被发走

相同QOS标记

相同源地址

整合FEC的方式。

目的了解相同FEC地址即可。

相同目的地址的这么一组数据包,只要你一组数据包,去往相同目的网络,能够被路由器的同一条路由条目转发,那么就称你们属于同一个FEC,

路由整合FEC的默认机制:基于数据包的目的IP地址。

属于FEC之后,就打上同一个标签,然后发往MPLS域,MPLS域只要收到带有标签封装的数据,就会知道你们是去往同一个目的地,这个时候就会做相应的数据层面转发。

前言

MPLS以前出生的原因就是因为当时路由器的路由处理速度是基于软件,而不是基于ASIC硬件芯片的,当然现在的路由器,也采用了ASIC芯片来储蓄路由表,路由处理速度也就快了很多。MPLS就像IP一样,只不过路由之间走的是标签Label,而不是IP。MPLS还不至于被淘汰的原因就是MPLS VPN和MPLS TE。

当一个数据包进入PE后,它是要查询路由表(FIB)还是查询

传统的路由转发,是当一个数据包进入PE后,通过查询路由表(FIB)和通过ARP协议,来让这个数据从相应的接口发出的。而标签转发,是通过查询标签表(LFIB),再进行对应的处理。

具体查哪个表,主要取决于该数据的二层封装,例如二层封装是以太网数据帧,则查看"类型/长度"字段的值即可

Type:0x8847(单播)上层承载的是MPLS,查找LFIB Type:0x8848(组播)上层承载的是MPLS,查找LFIB Type:0x0800上层承载的是IPv4报文,查找FIB

路由器如何知道一个报文是普通报文还是一个标签包呢?MPLS报文会在二层头和三层包间插入一个MPLS标签头。同时

MPLS

1.1 标签值

两种模式:Frame mode和ATM mode,主要研究前者 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9zSaEVHl-1682930589101)(./Images/MPLS-01.png)]

标签描述 标签头部一共32位,如下: 1)Label:20bit标签值,范围(0-1048575)(标签值前16bit不能随便定义,有特定含义) 2)EXP:3bit长度,用于QOS。 3)BoS:栈底位,值为0。如果是栈底,则为1。当处理到这层时,上层数据包为普通数据包。 4)TTL:8bit最大255,通常在加标签的时候,将普通IP报文的TTL复制过来 标签栈 MPLS路由器对于数据包添加的标签可能是一个或多个。这些标签集和起来叫做标签栈,第一个为顶部标签,最后一个为底部标签。中间可以无限,设备只根据第一个顶部标签来决定如何转发。 MPLS VPN和AToM中需要两个标签。 MPLS TE 一般使用三层标签 标签的位置 因为MPLS报文会在二层头和三层包之间插入一个MPLS标签头。同时二层帧头会做相应标识。所以路由器通过二层(如以太网)的字段来指示上层数据是否是MPLS标签帧。(有关于以太网帧头Type类型对应上层数据报文,请看前言的) 路由器如何知道一个报文是普通报文还是一个标签包呢?MPLS 报文会在二层头于三层包之间,插入一个MPLS标签头。同时二层帧头 设备角色. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kEib8YAF-1682930589102)(./Images/MPLS-02.png)] 能够理解MPLS标签并根据标签转发数据包的路由器称为LSR

三种LSR功能入站LSR接收没有标签的数据包,打上标签并发出出站LSR接收带有标签的数据包,移除标签,并发出。出入站LSR都是边缘LSR,它们同时连接了IP和MPLS网络。链路中LSR接收带标签的数据包,对其操作,然后按正确的接口交换发出总结:入站和出站LSR属于MPLS网络的边缘,分别是打标签进入MPLS网络和移除标签,发出给IP网络。链路中LSR仅进行标签转发。 LSR操作 LSR可执行三种操作:提取,添加和交换

操作过程相关动作提取(Insert)即从标签栈顶移除一个或多个标签(出站LSR必须移除全部标签)添加(Swap)向报文中添加标签,如果没有标签就加新的(入站LSR必须做)交换(Remove)收到一个有标签的报文,用新的标签交换到栈顶,再发出(链路LSR必须做的)**注:**在MPLS VPN中,入和出站LSR就是提供商边缘PE,链路中LSR就是P,术语PE和P在没有运行MPLS VPN时,也可使用。 标签交换路径LSP LSP指的是一个源到最终目的所需要经过的路径,LSP中第一台和最后一台LSP分别是入站和出站LSR。例如:一个源到目的要分别被修改为20,30,25,60。那么也可以简单认为这两点之间的LSP是20-30-25-60,其中第一台LSR20是入站LSR,60是出站LSR **注:**LSP是LSR在MPLS网络中转发标签数据后产生的,是标签报文穿越MPLS网络的路径。LSP只需要知道是什么,不用记住。 转发等价类FEC FEC可以认为是同一条路由,或者说是到达目标主机的路径是相同的,或者说是相同转发路径的数据流。同一个FEC,所有标签都相同,并不是拥有相同标签的报文都是同一个FEC,可能EXP值不同。报文属于哪个FEC,由入站LSR决定。FEC和LSP一样只需要知道是什么,不用记住。 **注:**一条FEC可以包含多个流,但不是一个流一个FEC,比如一台主机在看新浪的网页,这是一个流,又在看新浪的视频,这又是一个流,这两个流在新浪发给远程主机时,走的路径应该是相同的,所以一个FEC有多个流,但是每个流并没有属于单独的FEC。 MPLS标签交换过程 F F

LDP IEFT标准(TCP/UDP端口号646) TDP 思科私有(TCP/UDP端口号711)

因为TDP是私有制,并且用的不多,所以就讲LDP

1、标签的表现形式

2、标签的环路机制(基于IGP协议,也就是IGP不会环路,这个标签就不会)

3、IGP和LDP同步和LDP邻居认证?

概念解析:

CEF表和FIB表的关系

CEF表就是FIB表也就是路由表,CEF只是对路由表作优化,解决递归查找。

MPLS的LDP分标签时,时对路由条目分标签,之后形成LFIB表,

数据转发时是看起封装的是标签还是纯IP数据,如果是纯IP输则查CEF,如果是标签就查询LFIB表,控制层面和数据层面区分开。

在MPLS域内,不能做路由汇总和聚合,当MPLS域内采用IGP协议OSPF来解决通信时,还需要考虑到回环口的掩码问题。

为什么?因为OSPF通告环回口,无论回环口掩码,都以/32主机通告形式发出,这会造成FEC的连接问题

在思科的网络设备中想要启用MPLS,就必须启用CEF功能

为什么?因为:只要启用了MPLS功能,就必须在v4的路由表中,进行标签插入。

而路由表并没有设计这么一个字段,也就无法插入标签,但是FIB是支持的,而由于FIB是基于CEF的,所以必须启用了CEF功能,FIB才有,FIB有了,MPLS才能在FIB中插入标签。

FEC的致命缺陷:

对于一条FEC来说,沿途所有设备都必须具有相同的路由(前缀和掩码必须完全相同)才可以建成一条LSP。

使用MPLS转发的所有沿途设备上,对于要使用标签转发的路由,都不能做路由汇聚操作。

标签弹出:最外层的标签移除

标签移除:标签栈所有标签都移除

LFIB:标签转发信息库 基于标签的路由表,当路由收到带标签的报文

LIB:标签信息库

FIB:转发信息库

FIB就是启用CEF之后,能够被硬件调用的IPv4路由表

只要路由器接收接口启用了MPLS,那么必须要查找LFIB表来做转发。

LFIB:带有什么样的标签报文收到之后,该把标签交换成一个什么样的值

并且把报文通过那个接口发走,发给那个下一跳地址。

LIB就类似于是一个拓扑表,记录着一条路由条目(或FEC)

本地产生的标签是什么,邻居产生的标签是什么。

标签只具有本地意义。一台路由器收到带有标签的报文,这个标签必须只能是本地分发(如果收到的不是本地分发的,则丢弃。)

我通过邻居收到了一个带有标签封装的数据,这个标签的值必须是本地关于某条路由条目所产生的。如果不是?那就丢包!

入标签:我接收到的报文,所携带的标签。

这个标签为了能够让我识别,他必须是我本地产生的标签。

出标签:

当我把报文发送给邻居时,所携带的标签。

(这个标签值必须是下一跳邻居所产生的。)

当收到一个入标签的报文之后,再发送给邻居之前,必须要知道邻居关于这条路由,分发的标签是什么,知道了之后,就做标签转发(交换),然后把报文发送出去。

自己处理标签的方式是知道的,但是邻居处理标签的方式是默认不知道的,这也对应了所说的:标签仅本地有效。

有了LIB后,在这个表里,关于一个FEC(路由),本地的标签,邻居的标签,都是写上去的。邻居标签是多少,会通过更新发送,自己就会知道了

邻居发送的更新中,会告诉我,它的某一个FEC对应的标签。

第一步:运行IGP协议,获悉路由

第二部:启用TDP/LDP,来针对路由表中路由,进行标签分发

三种能够分发标签的控制层面协议:

1、LDP

2、BGP

3、RSVP

LDP

​ LDP无需多言,但是LDP仅能根据路由表中的部分路由,进行标签分发。部分路由的范畴就是,直连、静态路由或IGP路由。换言之:LDP无法为BGP路由提供标签

BGP

​ BGP路由的标签,是由BGP自身分发的。BGP仅会给VPNv4、VPNv6路由添加标签。

RSVP

​ QOS中的集成服务模型,在MPLS-TE环境中,将会通过RSVP,分发基于qos的标签。通过该标签,能够完成基于qos功能的路径调整或路径选择。

LDP/TDP研究:

​ Q:为什么T/L DP是基于TCP又基于UDP的?

​ A:因为T/L DP这种协议十分优质,只有这类优质的协议才能同时支持两个传输层封装协议

TCP

优点:可靠性

缺点:仅支持单播,不可自动建立邻居(参考BGP)

UDP

优先:灵活自动建立邻居

缺点:不可靠

当在一个接口启用MPLS之后,这个接口默认启用T/L DP,在开启之后,该接口会

周期性的自动发送hello包(基于UDP发送HELLO),T/L DP,前者用广播发送,后者用组播发送。在发送hello之后,其他路由器就能够知道我的路由器RID地址。

T/L DP要求使用RID地址建立邻居,why?因为这个地址就是报文发送地址的源地址,

这个地址就是默认报文发送时的源地址,只要有去往你的路由,那么就可以开始连接了

这个时候只要有去往你的路由(因为采用RID建立邻居,对方知道的也是你的RID地址,而不是你的物理口地址),就可以开始建立连接了;建立连接的过程中,就开始采用TCP了,通过TCP来完成三次握手,建立好连接之后,后续的hello,更新等报文都是通过TCP来发送

这样做最大的好处是:也能够自动建立邻居,并且不需要再协议中设计额外的确认机制,设计额外的重传机制,就能保证这个协议可靠的运作了。

MPLS域内不要做的事情:

1、不要让OSPF通告环回口路由采用/32位通告

2、不做路由汇总

只要FEC MPLS域内设备都有,那么关于这条FEC,标签就是连续的。

只要是连续的,这条路由那么就没有任何问题,数据层面也就不会有任何问题。

为什么标签不是连续的,就会有问题?

MPLS黑洞

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDNR9n0l-1682930589102)(./Images/MPLS-03.png)]

上图拓扑图中,R4连接的X网络是环回口,掩码/24。网络环境如此

R4将本地192.168.1.0/24通告出去的过程(R3同理)

R4本地对于192.168.1.0/24这条路由,分发了一个本地标签,分发了之后想要通告给自己的邻居R2。R2收到这条标签之后发现,自己本地并没有192.168.1.1/24,他们的FEC也就不相同,只有192.168.1.1/32,所以不会将该标签保存。

R2将路由192.168.1.0/32通告出去的过程(R3同理)

R2因为OSPF获悉192.168.1.0/32路由,将其分配标签后发给R4,R4收到该标签后发现,自己本地并没有192.168.1.0/32路由,所以不会保存该标签。

由于2-4,3-4之间,路由掩码不一致。就已经不是相同路由了,标签的连接性也就断了,而R2和R3发送给R4关于192.168.1.1/32的路由时候,由于FEC不一致,无法保存标签,就会拿掉所有标签,这就会产生MPLS黑洞。

想要网络中没有MPLS黑洞,那么就要保证FEC的连续性,FEC其实就是路由,所以网络中路由都相同,不去做路由汇聚,路由以/32通告,那么就没有问题了。

TDP

​ TDP是思科私有协议,现已淘汰。采用端口号Port:TCP/UDP 711

LDP

​ LDP是IETF共有协议,采用端口号Port:TCP/UDP 646

PHP 倒数第二跳标签弹出/次末跳标签弹出

边界路由器,由于连接的是MPLS+IP环境,所以当由外到内(MPLS域内)的报文时,要查询两次表向,路由表和LFIB表。

华为从外到内,查询两次表。思科中仅一次

从内到外,只要执行了PHP,那么只要执行一次钱。

在发送数据时,每台路由器都会判断对于这条路由,自己是不是倒数第二条,是不是倒数第二条,是由最后一跳来告诉的,最后一跳路由器告诉你,你是倒数第二条,那么在把报文发送给最后一跳路由器时,就可以直接将标签去掉,最后一跳LSR收到这个之后,就已经是没有标签的了,就直接是一个纯粹的IPV4报文,也就直接查询FIB表了。(上述案例中,R2最后能够访问R4,因为R2是次末跳,但如果是其他多路环境,那么就因为是没有标签的FEC,所以会出现黑洞)

TCP可靠是优势,缺陷是仅支持单播。

并且采用TCP封装之后,并不能自动封装邻居(参考BGP)

UDP的好处是灵活,可以自动建邻居

MPLS不分环境,局域网链路,广域网链路都行。

MPLS就像GRE,无论你多层标签,只查看最外层标签,只会对最外层标签进行处理

上游&下游 Up&Down

上游下游是根据数据层面的

谁离发送数据的源越近,那么谁就是上游

谁离连接网络的路由器进,谁就是下游

下游路由器

MPLS 环路检测

帧模式的MPLS中使用TTL

TTL有什么用,在运营商内网出现网络环路,TTL能够防止,报文不会永无止境的发送下去。

信元模式的MPLS中无TTL(所以也不用信元了)

MPLS TTL环路检测

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lqj9HioV-1682930589103)(./Images/MPLS-05.png)]

第一种:

IP报文进入MPLS域内,第一台LSR,将IP报文中的TTL值,减一后复制到标签的TTL位,因为PHP次末跳的原因,在倒数第二跳时,就将标签移除后交给下一跳LSR,TTL值也一起填充到IP报文的TTL位中,倒数第一跳LSR,将其发出。

这样的好处是,运营商内部的MPLS,对外的透明的,别人trace的时候,会知道MPLS域内的存在

在MPLS域内,减少的TTL值是Label TTL值,首台LSR会将IP TTL减一,次末跳LSR,再将其标签移除后发送给倒数第一跳LSR,倒数第一跳LSR将其发出后,IP TTL减一。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y07SswyP-1682930589104)(./Images/MPLS-04.png)]

第二种:

IP报文进入MPLS域内,给其添加的报头,无视其三层包头TTL值,一律填写255

这样部署的好处是,对外隐藏MPLS域,不管这个报文在MPLS域内发送了几跳,对于tracert而言,只能看到A,只能看到D(A和D分别是首跳/末跳,并且都会对IP TTL处理)

第一种相比较第二种,好处就是因为TTL是继承于IP TTL的,当域内出现环路时,能够更快被丢弃,能够减轻环路时,链路带宽的消耗。但第二种的好处就是隐蔽性,对外隐藏了MPLS域的存在

思科/华为默认采用第一种方式,当使用了如下命令修改TTL值为255之后,将隐藏域

华为命令:undo ttl propagate public

LDP环路检测

​ 默认情况下,域内启用LDP,LDP是不防环的,如果意向放缓,那么可以。

1、LDP路径向量法

2、LDP最大跳数法

这两种方式都涉及TLV(长度类型值)

路径向量发

​ 会在LDP的标签请求和标签通告报文中,携带两种TLV,一个叫路径矢量TLV,一个叫跳数限制TLV,都是用来检测环路的。

限制最大传输跳数

LSP最多有多少跳,在发送标签通告的时候,标签通告最多能够发几跳,比如设置max最大值=10,那么如果超过十跳将丢弃

通过检查路径向量TLV中是否包含自身RID,来确定

会记录每一台路由通告者RouterID,标签通告,会在路径向量中设置自身的RID,如果真的有环路产生了,一台LDP收到了标签请求或者标签通告,会检查这个TLV中,是否有包含自身的RID,如果没有就代表这个LDP请求或通告,没有到达过本地。那么就继续发送,如果有,就丢弃。

LDP最大跳数法

在计数TLV中,如果超过了设定的TLV,那么就将LDP通告或请求丢弃。

LDP通告标签,是依据IGP路由来产生的,所以IGP路由没有环路的,那么LDP就不会有环路了

LDP环路检测配置(华为)

[SWC]mpls ldp

[SWC-mpls-ldp]loop-detect

[SWC-mpls-ldp]hop-scont <1-32>

设置最大跳数

[SWC-mpls-ldp]path-voctors <1-32>

设置路径向量参数

华为配置这个功能,需要先启用该功能,然后再接口启用该功能。

LDP协议原理

1、产生标签 关联路由条目 标签分发 2、通告标签给邻居路由器 标签通告 3、通过邻居收到标签通告后,保存 标签保持

思科和华为区别性。

思科开启LDP,会针对除了BGP以外的任何路由进行标签分发。

华为开启LDP,会针对除了BG以外的任何路由进行标签分发,默认只会针对主机路由(/32),进行标签分发。如果希望针对其他路由分发,那么需要激活对于功能

LDP运行

思科

在接口启用MPLS数据层面机制,那么LDP,默认算是被宣告了

周期性发送LDP Hello,双方收到LDP HELLO之后,就知道对方的传输地址(Transport Address传输地址),LDP,当选出了RID地址后,任何接口发送HELLO时,传输地址都是以路由器ID地址,而不是发送报文的接口。

LDP建立邻居过程

首先通过UDP来发送组播/广播 报文,再通过TCP建立三次握手,完成邻接关系建立。

谁的传输地址大,谁就主动发送三次握手。

L/T DP 发送时,目的端口是646/711,源端口随机,这个时候当两台LDP建立好了邻居,传输地址大的端口,就是源随机端口,对端就是646。

建立邻居:1、直连建立,2、非直连建立。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LidDN5hx-1682930589104)(./Images/MPLS-06.png)]

A能够和C建立,也能够和D建立 邻居。

因为LDP是基于TCP的,只要TTL值没有限制,那么想和谁建立都是可以的

LDP的长距离扩展邻居

因为LDP是基于TCP的,只要TTL值没有限制,那么想和谁建立邻居都是可以的,SWA能够和SWC建立LDP邻居,也能够和SWD建立LDP邻居,这就是LDP的长距离扩展邻居

注:扩展邻居对正常MPLS VPN没有帮助,所以了解作用即可。

LDP报文

发现消息,用于通告自身存在,通告这个报文能够自动建立邻居

Discovery message:宣告和维护网络中一个LSR的存在。

通过这个报文,建立TCP连接,协商参数。或者拆除连接

Session Message:建立、维护和终止LDP Peers之间的LDP Seeion。

请求/通告/删除 标签,都是发送他

Advertisement Message:生成、改变和删除FEC的标签映射

Notification Message:宣告告警和错误信息。

四大类。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLtSmbPM-1682930589104)(./Images/MPLS-07.png)]

LDP Identifiter

前4字节由路由器ID,后2字节,标识是路由器空间还是接口空间。

LDP现在的版本就是版本1

U位通常置零

Type类型:用于表示你是那种报文(Hello,蛮多的)

Messaged 消息长度

消息ID,类似LSA的链路ID

信息组成:

IDP中的传输ID,是6B,而IPV4地址是4字节,所以多的2Byte

是标签空间,有路由器空间和接口空间。默认路由器空间

路由器空间

关于一条路由,只会形成一个标签,通过任何接口通过该标签时,只要是关于同一条路由的,那么通告的标签值是一样的。

接口空间

同一条路由,关于每一个接口所形成的标签是不一样的。

通过每个接口,对于同一条路由的标签的时候,标签值是不一样的。

例子:如果有一千条路由,那么路由器空间将会形成一千条标签。

但是接口空间将会形成(路由数量*接口数量)的标签。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PoVW3kws-1682930589105)(./Images/MPLS-08.png)]

Hello是 5秒发送一次,15秒保持时间。发送给组播224.0.0.2地址。源地址是传输地址。

TCP三次握手完成后,就是发送Initialization初始化报文,来协商参数的。

类似于是BGP的OPEN。Inti中有很多参数,邻居间要完成一个协商,Keep就是来

做协商的确认。

KeepAlive是周期性发送的。

Address 是通告接口地址,无论这个地址是否启用LDP

Address Withdarw

将FEC通告给邻居,就是Label Mapping

Label request,请求标签映射的时候,LDP的防环,就是在Label Mapping和request中添加TLV,用来防止环路。

Label Abort Request 发送了一个请求,可是迟迟得不到更新,那么不想请求了,就说撤销信息。

Label Withdraw 之前通告了一个标签映射,但是现在该路由不可用了,那么告诉你,要你删除掉这个映射。

通过邻居得到的标签,但是不想要了, 那么就是发送Label Release,告诉邻居,之前发送的标签,我已经删除了。

Notification,用来报错的。

LDP发现机制

1、LDP基本发现机制 发现直接连接在同一链路上的LSR邻居。

2、LDP拓展发现机制 发现非直连的LSR邻居。

基本发现机制,就是两两之间,建立邻居

拓展发现机制就是,非直连之间,建立邻居。

非直连建立邻居,就像是BGP指邻居,要采用neighbor来指向邻居,并且是单播报文

因为组播无法跨越路由器发送。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xiGySvm1-1682930589105)(./Images/MPLS-09.png)]

LDP建立邻居,建立方向是传输地址大的,向传输地址小的一方去建立。

在建立好邻居之后,就是发送Initialization Messages

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iKoWjEU9-1682930589105)(./Images/MPLS-10.png)]

Inti还是由传输ID大的先发。

路由器ID大的称为主动方,小的称为被动方。

SWB先发送一个Inti报文,SW1觉得没问题了,发送Ini再发送keep,SWB

收到keep后,觉得没问题了,再发送一个keep。

这四个报文完成交互后,邻居也就建立好了。

如果出现了问题,那么在我发送Initi之后,对方回复的将是

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2uF9BnlS-1682930589105)(./Images/MPLS-11.png)]

参数不匹配,那么也是发送Notifatication,TCP连接也就随之断开了。

华为配置LDP

[SWA]mpls lsr-id 1.1.1.1#指定传输(路由器)ID

[SWA]mpls#全局启用MPLS

[SWA-mpls]mpls ldp#启用LDP作为控制层面标签交换协议

[SWA]interface vlan1

[SWA-Vlanif1]mpls #激活接口的数据层面

[SWA-Vlanif1]mpls ldp#激活接口的控制层面

[SWA-vlanif1]mpls ldp transport-address v1

#修改传输地址为该接口地址

SHOW

[SWA]display mpls ldp session vcrbose 查看标签信息

思科配置

R1(config)# interface e0/0

R1(config)# mpls ip

非直连邻居的配置

[SWA]mpls ldp remote-peer test

[SWA-mpls-ldp-remote-test]remote-ip 3.3.3.3

#指定远程的地址。

LDP的邻接状态机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5TIduYEK-1682930589106)(./Images/MPLS-12.png)]

一开始的邻居状态是Non existent不存在,当三次握手建立好TCP之后

就是下面的INITIALIZED ,

2.1LDP标签空间Label Space

路由器空间

标签节约不浪费,LIB,LFIB表项想比较少,浪费的内存资源较小。

接口空间

好处:安全,

采用基于平台的标签空间,只能做到基于控制层面的不通告标签映射。

但是数据层面可以通信

基于接口的标签空间情况下,每个接口对于同一条路由,所形成的标签是不一样的,

所以他想要从我这里去X网络,但是关于X网络的标签他都不知道,所以就根本去不了了

2.2LDP标签分发

Du & Dod(按需通告和自由通告)

标签发布方式含义下游自主方式(Downstream Unsolicited)对于一个特定的FEC,LSR无需从上游获取标签请求信息即可进行标签分配与分发。下游按需方式(Downstream On Demand)对于一个特定的FEC,LSR获得标签请求消息后才可进行标签分配与分发

Du(自由通告)

路由器运行LDP之后,会为本地路由形成标签,形成完标签对于FEC的映射之后,就会将其通告给自身邻居,Du所指的就是,不管是否收到邻居发来的标签请求(或者说不管邻居是否发送了标签请求)只要形成了标签映射段,那么就会通告给邻居。

**特点:**不需要邻居请求,主动发送通告

DoD(按需通告)

路由器运行LDP之后,会为本地路由形成标签,形成完标签对于FEC的映射之后,就会将其通告给自身邻居,DoD所指的就是,形成了标签映射段后,邻居发来了请求通告,那么根据邻居所请求的标签映射,发给它,它所请求的映射,而不是Du一样,直接通告所有映射出去。

**特点:**更为安全,邻居要先行请求,通告后,仅通告邻居需要的标签映射。

**注:**思科/华为 默认采用Du。

配置实例(华为):

[SWA]mpls

[SWA-mpls]lsp-trigger none

#这台路由器运行LDP后,针对指定路由进行标签分发,none就是不分发任何标签。

[SWB]mpls

[SWA-mpls]lsp-trigger host

#仅针对路由表中的host主机路由进行标签分发(默认)

标签值3=隐式空标签

当这台路由器是这个标签路由的最后一跳,或者是这台路由器是LER,那么也属于最后一条。所携带的标签就会是3了

采用标签值3,所代表着告知邻居,将路由转发给我时,直接做标签弹出即可。

3就是让邻居不需要将标签打上3了,直接做标签弹出即可,不需要做标签交换

标签值0=显式空标签

0就是让邻居将标签值交换成0。一台LSR收到0标签时,不需要查找LFIB,也可以立即将标签去除,查找。然后进行次末跳弹出。

区别:

0就是最后一台LSR收到标签后,自己去掉标签。3就是上一跳邻居,再将报文发给我的时候,就已经把标签去掉了。

2.3LDP标签控制Independent

标签控制指的就是,当路由器拥有IGP路由后,产生标签的过程。

Independent和Orderded

Independent

当路由器拥有IGP路由后,不管邻居有没有将关于这条路由的标签,本地通告,我都会立即的本地去形成路由条目的标签。

不管下游路由器有没有将这个标签发给我,都会主动形成标签

Orerded

收到路由后,想要形成关于这条路由的标签。

必须要通过给我通告这个路由的下游邻居,收到这个路由的标签

关于这个路由,有了出标签,才会形成入标签

倒数第二跳LSR向倒数第一跳LSR发送标签通告请求。倒数第三跳LSR向倒数第二跳LSR发送标签通告请求。这样才会本地形成入标签。

思科是Independent 华为是Orerded

配置实例(华为):

[SWA]mpls

[SWA-mpls]label-distribution independent

2.4LDP标签保持

Conservative保守的

Libral自由的标签

Conservative

在保守的标签方式中,只有当邻居是关于路由条目的下游下一跳时,发送来的标签才会保持。反之,不接收。

好处:节约LIB空间,缺陷:当下一跳邻居和自身邻居出现问题后,链路发生改变。这个时候IGP路由需要切换,切换的同时标签也需要切换,但由于这个时候没有记录其他邻居通告过来的标签,标签映射的切换就会慢一些。

Libral

只要邻居发了,那么就会记录。但到达采用那个标签,要取决于FIB路由下一跳,根据路由下一跳,找到正确的下一跳邻居,它给我通告的标签,才会放到LFIB中,作为出标签使用。

思科/华为默认采用Libral

2.5PHP Penultimate Hop Popping倒数第二跳弹出

就是因为数据包发送到了最后一跳路由器,而最后一跳路由器(最后一跳LER需要出MPLS域了),需要查找FIB表和LFIB表,要查询两次表

直连路由或者域外路由 都算是最后一跳,那么邻居就是倒数第二跳。

最后一跳路由器在通告给邻居标签时,通告的是3或0标签,用来告知邻居,他是次末跳路由器。

思科华为默认是3标签

也可以修改,但是不建议

[SWA]mpls

[SWA-mpls]label advertise explicit-null

#做次末跳通告时,通告给邻居 显示空标签(0)

[SWA-mpls]label non-null

#直接不用PHP,关闭PHP功能

PHP虽然i能优化下一跳,但是也有缺陷

执行PHP时,没办法保证运营商内网路径,端到端的QOS一致性。路由器是通过查看标签中的EXP位来确定你的标记值,但是如果执行了PHP的话,那相当于QOS到达倒数第二跳LSR就失效了,最后一跳的时候就没有报头了,没有报头,默认又不会把exp的值映射会IP报头中,所以没办法确定这是那一类QOS了。

如果希望端到端QOS有效,那么就要关闭PHP功能

当一台路由器使用BGP路由来转发,从外到内报文时,会针对这条路由的BGP下一跳地址,去查询相对因的IGP路由,根据IGP路由所对应的出标签,来封装数据。

思科配置MPLS

R1(config)#ip cef#一定要开启CEF,不过有些设备默认开启

R1(config)#mpls ip#全局开启MPLS协议

R1(config)#mpls label protocol ldp#默认LDP

R1(config)#mpls ldp router-id l0 force

#采用回环接口作为传输ID,加force是强行执行。

如果路由器之间有邻接关系,那么这个是不生效的,要生效就必须force

R1(config)#int range e0/0-1

R1(config-if-range)#mpls ip

#开启数据/控制层面的MPLS

查看LIB表:show mpls ldp bindings

查看LFIB表:show mpls forwarding-table

MPLS的TTL操控

no mpls ip propagate-ttl

如果关闭该功能,代表着收到从外到内报文,不管TTL值,直接255。(默认开启)

MPLS中千万不能存在的命令(排错有帮助)

no mpls ldp advertise-labels

#不会为任何路由分发标签

注意:如果LDP邻居没起来,请注意传输ID是否都是可达的

IPV4 BGP针对MPLS提供服务

路由器收到从外到内报文,要使用BGP路由转发时,就会根据BGP路由的下一跳地址所对应的IGP路由标签,来做出标签封装。

MPLS VPN

CE(Customer Edge)是用户边缘设备,可以是路由器,也可以是交换机或主机。 PE(Provider Edge)是服务商边缘路由器,位于骨干网络。 P(Provider):在骨干网络中,是服务提供商网络中的骨干路由器,不与CE直接相连。P设备只需要具备基本MPLS转发能力,可以将其配置为M-BGP的路由反射器,不维护VPN信息。

MPLS VPN是对等体到对等体VPN

大量配置是PE设备上

PE要为CE维护路由。所以要在PE和CE间建立某种邻接关系 可能是I/B GP的。

因为PE是公网路由器,公网路由器的公网路由表是无法存储双方要互相访问的私网地址的,并且由于运营商内网不可能就一个客户的,所以私网路由的路由存放问题,是必须要解决的

针对每一个客户,单独的创建一张独立的路由表

好处:VPN的私网路由,不会和VPN公网路由存法于一起 。客户的路由就单独一个路由表。PE创建VRF

VRF(Virtual Routing Forwarding) 虚拟路由转发

VRF名称仅本地意义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CmwDOQ2g-1682930589106)(./Images/VPN/01.png)]

由于VRF仅有本地意义,X网络部署了VRF后,Y路由

如何将VRF路由表中的路由给另外一个PE发走?

​ VRF中的路由于公网路由是不一样,IGP无法发出,只能MP-BGP邻居

MP-BGP所建立的邻居,叫做VPNv4邻居。VPNv4邻居是专门用来帮助PE路由器来发送VRF路由的工具,

PE路由器将VRF的私网路由,加入BGP的VPNv4表中去,再给邻居发走。

由于BGP的VPNv4路由表只有一张,而VRF里面所承载的路由,可能是相同地址段。

这个路由在VRF中,还是能够区分的,但当将这个路由转变成VPNv4路由呢。加入到BGP表中去后,因为BGP表是有且只有一张的,就没办法做路由器分了。

这个时候对VRF中的私网路由,进行加工,这个加工就是在VRF中,给路由加上RD

RD(Route Distinguishers) 路由区分符

每一个VRF都对应一个RD,并且对于该路由器而言,不同的VRF的RD,是绝对不能一样的,RD一共有64bits,当这台路由器和其他的VPNv4建立好邻居后,需要将VRF路由表中的路由转换成BGP的VPNv4路由,加入到表中去。VPNv4路由就是添加了RD后的IPV4路由,例如路由10.1.1.10/24 在路由前面添加RD ,X:Y 该路由就变成了10:10.10.1.0/24

就算路由相同,添加了RD后,路由也就不一样了,就可以区分了。

VPNv4路由除了携带RD参数以外(),还会携带一个参数。

Route Targets RT路由目标

BGP中的扩展团体属性,ExComm

RT也是X:Y,但是RT的作用不一样,RT的存在是让PE路由器,收到公网传递过来的VPNv4路由时,能够知道这个路由到底该加入那张VRF路由表。为了实现这个功能,RT有两种操作(在VRF中所定义的)

1、导入

2、导出

导出:当你把VRF路由加入到VPNv4的BGP表中时,要携带那些RT值。要携带的RT值呢,就通过导出的操作来配置

导入:当你收到VPNv4路由之后,将带有什么RT的路由,加入本VRF路由表,这就是所谓的导入。

带有什么样的RT值,就加入什么样的VRF表。RT具有端到端意义

例子:X网络中设置VRF导出的RT值是100:100。那么我Y网络的VRF,要配置导入RT值是100:100

因为别人设置的导出RT,就是别人将VPNv4路由发走时,要携带的100:100 RT值,而收到这个路由之后,如果没有设置导入,就加不进VRF路由表。如果加了导入后,就是告诉VRF进程,你要去接收带有100:100 RT的VPNv4路由,要将这个路由转换成IPv4形式,加入到VPN中去。

VPNv4路由:携带了RD和RT的IPV4私网路由 由BGP来传递

导出RT可以设置多个,导入RT也可以设置多个,

一条路由,未必要满足导入导入RT值才能加进去。

比如一个路由加入了10个RT值,你只导入一个RT,那么这个路由只要路由中存在,就都能导入进去

这就是VPNv4路由

传递:

BGP之间未必要建立VPNv4邻居,也可以找一台RR来做路由反射,大家都跟RR建立邻居,RR来反射路由。如果是这样设计,不要让RR参与数据层面转发,y因为控制层面消耗过大,数据层面还要转发,就会出现问题。

控制层面的路由已经传递过去了,但是数据层面还是一个问题。

​ 对BGP表项中的下一跳所对应的IGP路由做封装,

为什么MPLS VPN需要查找两层标签?

因为在运营商内网中,这段PE设备将标签发送出去了之后,最后一跳收到了这个标签,将标签弹出之后暴露的是私网路由,而私网路由,公网是不可能存在的。

所以还需要来一个标签,在到达运营商对端PE之后,来告知PE,这是要查询对应的VRF表的。

一个标签是为了让这个PE到达对端的PE

第二个标签是为了让公网路由器,知道该查询那个路由表。

这个标签是依靠BGP来分发的。

BGP能够给路由进行标签分发,但是普通BGP并不会,MP-BGP会

VPNv4进程,

BGP会对VPNv4进程进行标签分发

VPNv4就是加了RD值的路由表项。

在PE设备接收到源地址时,会将这个标签分发,然后PE将这个发出去的时,会伴随着路由,一起送到对端的PE设备。

A发送数据 到达X,X收到报文之后,由于是VRF接口,所以要查找VRF想关联路由来进行转发,这个路由一定是一条BGP路由,这个路由是Y通告给我X PE设备的。并且这个路由是VPNv4路由,本身会携带一个标签,这个时候会使用Y所通告的,A想要到达的路由,的标签(也就是说Y pe设备连接了N,A要去N,我对N进行了标签)这个时候会使用Y所通告的关于N的标签,来做第一次标签。

第一个标签是封装 Y到分部A的,但是因为这个标签从PE X到 PE Y中间是没有的(这是Y到A的)

然后再封装一个,从我这X到对端Y的 。

|下一跳地址IGP路由标签|VPNv4

内层标签是VPNv4用来标识我们这个路由的,外层标签(第二个添加的)

BGP路由对应的下一跳地址所对应的IGP路由的标签(就是说去往对端PE的IGP路由

MPLS设备,仅看TOP顶层设备,

控制层面:路由传递

数据层面:双重标签的转发

内层标签是VPNv4,这个标签是VPNv4邻居发送BGP路由时所携带的。

顶层标签是BGP路由针对IPV4下一跳地址所对应的IGP的标签。

华为特殊条件:我允许接收VPNv4路由的前提是:我路由表有你的32位主机路由,并且有对应的标签。才能够接收VPNv4路由 思科没有,思科就是,之间有路由,不管这个路由多少位的,只要有标签,VPNv4都能接收。

如果是华为,就必须要用环回口建立邻居。

配置:

R2(config)#vsf defintion A

R2(config-vrf)#rd 10:10

R2(config-vrf)#address-family ipv4

R2(config-vrf-af)#route-target both 10:10

both代表双向,即导入又导出。以VPNv4发走时,会携带10:10的RT

R2(config)#int e0/0

R2(config-if)#vrf forwarding A 关联 当敲这个命令时,接口地址会消失

R2(config-if)#ip add X.X.X.X

查找:show ip route vrf A

PING:ping vrf A X.X.X.X

RD仅本地意义

ip vrf A

rd 10:10

route-target both 10:10

int e0/1

ip vrf for A

vrf definition ChengDu-To-ZongBu

rd 20:10

R8(config-vrf)#address-family ipv4

R8(config-vrf-af)#route-target both 20:10

VRF名称仅本地意义

no bgp default ipv4-unic

发送VPNV4 下一跳自动变更为,我对他的更新源地址 思科华为一样。

就不需要敲next-self-hop了 ,没意义。

做了这个之后,是没有IPV4的邻居的,show bgp sum 没有任何东西

BGP

router bgp 1

no bgp default ipv4-unic

nei X.X.X.X remote

address-family vpnv4 unicast

nei X.X.X.X activa

nei X.X.X.X send-commui ex 华为默认项,思科要配置

查看VPNv4邻居:

show bgp vpnv4 Unicast all sum

show bgp vpnv4 unicast all summary zhy 5.1

客户端R4对R2建立时,就普通建立。R2对总部建立,就不一样了

ZongBu--R1(config)#router bgp 4

ZongBu--R1(config-router)#bgp router-id 4.4.4.4

ZongBu--R1(config-router)#network 4.4.4.0 mask 255.255.255.0

ZongBu--R1(config-router)# neighbor 24.1.1.2 remote-as 1

R2建立

R2(config)#router bgp 1

R2(config-router)#address-family ipv4 vrf A

R2(config-router-af)#neighbor 24.1.1.4 remote-as 4

R2(config-router-af)#neighbor 24.1.1.4 activate

R2查找BGP路由

show bgp vpnv4 unicast vrf A 后面加sum,就是看邻居

查看标签:

show bgp vpnv4 unicast all labels

双方通信点采用OSPF互通,相同进程是O IA 。不同进程就是 OE 1 OE2

MP BGP的设备配置OSPF

router ospf X vrf A

OSPF重分发给其他路由时,仅O和O IA路由能过得去。

如果这个路由本身是OE1或者O E2路由,那么需要添加match

OSPF重分发进BGP

router bgp X

address-family ipv4 vrf A

red ospf 1 vrf A

R3做双点双向重分发,BGP进OSPF;OSPF进BGP

标签怎么看?首先内层标签,就是R4连接的R2 R2看R4要去的对端5.5.5.0 的标签

show bgp vpnv4 unicast all label 查看R2中关于5.5.5.0的标签,这是内层

外层标签 show mpls for

在第一个看内层标签时,5.5.5.0 对应的下一跳地址,去看mpls for 就行了。

MPLS跨域>

一句话总结:

Q:为什么需要跨域?

A:就像我以前做的实验一样,两个不同的域之间起MP-BGP邻居,但是中间除了MPLS和OSPF,啥都不做,那他标签转换不过来的!中间的MPLS

Q:跨域A、B、C 简单概括

A:

跨域A就是把对方域看成是一个CE,毕竟普通的MP VPN传递给对端CE的路由 就是普通IP路由了,我把对端域看成是CE,那么对端域发出给我的私网普通路由,我再打上VRF,然后传递给我的域PE,但就是配置麻烦,因为那么多私网路由,而这些路由在两台域之间的ASBR设备传递中,发出 就是以普通的IP路由发出的,那我肯定是要一个路由 一个VRF,不然混淆了怎么办呢,但我一个路由一个VRF,那接口呢?还需要配置一个子接口来保证,所以就很麻烦。但跨域核心问题就是标签交换不过去,需要让BGP给路由添加标签,所以C方案就是让沿途设备给这个标签进行处理。

跨域B方案就是:

跨域C方案就是:

MPLS OptionA:背靠背VRF

跨域OptionA的原理并不复杂,就是在ASBR(并非OSPF的ASBR)间,双方都认为对端是自身的CE设备,这样就做到了,对端域内的客户VPNV4路由,在发出的时候,是普通的IPV4路由,然后被本域以普通的路由引入,发VPNV4路由给本域的PE,很聪明的做法。

就以A来讲,为啥要跨域?为啥要这样搞?还有没有别的办法,接入RR会怎么样

答:

首先为啥要跨域,两端PE设备处于不同的域,所以要跨域。两个AS之间的ASBR设备,那么他没有开启MPLS,他是以普通的IPV4报文发出给我本域的ASBR设备的,那么

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YvGnVVjd-1682930589106)(./Images/VPN/跨域.png)]

Q:那么OptionA如何跨域?

A:发明这些技术的人,真的挺聪明的。

AR2和AR4是AS 100的PE设备,AR2将CE路由发送给AR4之后,AR5会将AR4看成自己的CE设备,然后放到对应的VRF里面,再发送给AR7,那么AR7就会发送给自己的AR8。(AR5对AS 100处理的RT值,要和AR7对AR8配置的RT,一样哦。

OptionB方案是咋处理的呢?

方案B就是两个ASBR之间部署MP-eBGP,通过eBGP来传递路由了,这样的好处是 了,配置更少。

1、AR2和AR4之间建立MP-BGP邻居,对端同理。然后AR4和AR5之间就是做VRF的静态路由,然后引入即可。Option A就是把对端看成是CE设备即可,其他配置没什么需要注意的。

重点:子接口记得开启arp广播功能,命令:arp bro enable

A方案的重点就是两个域的ASBR设备之间 通过子接口建立,并且子接口绑定VRF(双方之间还要做VRF的IGP协议)。封装的的还是二层标签,对于AS域100而言,他只是将AS 200看成了自己的CE设备,毕竟200发出的路由,是纯IP的路由。

特点:

1、配置复杂:ASBR间都要为每一个CE私网客户 做一个VRF,做一个子接口 并且维护麻烦。

2、适用于小型 也就是不咋做VRF的场景。

因为A方案的重点是两台ASBR之间来传递私网纯IP路由,选择传递他们的协议也是一个关键。可以用IGP也可以用BGP,但要按照以下的来。

双端ASBR之间一定要做的配置:

1、子接口配置要做:[VRF绑定,子接口VLAN设置,开启arp 广播]

2、两者的路由协议选择:BGP IGP

interface GigabitEthernet0/0/1.10

dot1q termination vid 10 #子接口 和对端ASBR的子接口ID要相同哦

ip binding vpn-instance 100 #这个VRF只需要和本域的PE相同

ip address 192.168.1.1 255.255.255.252

arp broadcast enable #开启ARP广播,子接口才能发送arp请求找到下一跳。

如果是采用BGP,那么双方建立的就是MP-eBGP邻居 配置如下:

AR4:

ipv4-family vpn-instance 100

peer 192.168.1.2 as-number 200 对端相反一下 就可以了 简单吧。

如果是采用静态,那么双方的配置如下:

AR4:

ip route-static vpn-instance 100 9.9.9.9 255.255.255.255 GigabitEthernet0/0/1.10

192.168.1.2

ipv4-family vpn-instance 100

import-route static #BGP引入静态就可以了

如果是采用OSPF,那么双方的配置如下:

因为采用OSPF那么会因为MPLS VPN防环机制 所以 E DN位会值位,以防止环路的产生。

ospf 10 vpn-instance 100 OSPF实例中引入VPNV4发出的私网路由,然后宣告子接口

import-route bgp

area 0.0.0.0

network 192.168.1.0 0.0.0.3

BGP中:引入OSPF到VRF中

ipv4-family vpn-instance 100

import-route ospf 10

Type 3LAA的Down-Bit

从PE的VPN实例通告出去的Type 3 LAB,在其Option字段中存在一个down-bit位,其他PE的VPN实例收到存在Down-Bit位的type3LAB,仅将其保留在数据库中,不进行任何计算。

Type5 LAS的Domain-Tag

从PE的VPN实例通告出去的Type 5LSA,会将其TAG字段填写为本VPN实例的Domain-Tag,默认情况下Domain-Tag为该PE的AS号,如果PE的VPN实例收到五类LSA,并且其TAG值于本地BGP的AS号相等,那么仅将其保留在数据库中,并不进行任何计算。

可以通过命令:dis ospf lsdb ase查看,可以看到options的E DN比特置位了。

dis ospf lsdb 前面的Type就是类型,Router和network,可以用命令dis ospf lsdb router等

dis ospf 10 lsdb ase

OSPF Process 10 with Router ID 192.168.1.1

Link State Database

Type : External

Ls id : 9.9.9.1

Adv rtr : 192.168.1.1

Ls age : 407

Len : 36

Options : E DN

seq# : 80000002

chksum : 0x464d

Net mask : 255.255.255.255

TOS 0 Metric: 1

E type : 2

Forwarding Address : 0.0.0.0

Tag : 3489661028

Priority : Low

不难看出,DN比特值位了,那么打破环路的方式 有两种:1、ASBR发出时 不要让他设置DN比特

ospf vrf进程下

[AR4-ospf-10]dn-bit-set disable ase #让发出的时候 不要设置DN比特

[AR4-ospf-10]dn-bit-check disable ase#不做DN比特的检查了

第一个是发出时 不设置DN比特,那么对端就收到的是没有DN比特的,对端会将我这发出的路由 加入VPNV4表中去。

第二个是,我不对DN比特进行检查,那么你发过来的路由 有无DN比特,和我没有关系。

VPNV4 下一跳发生变化,就会重新分配标签

IPV4的BGP路由 下一跳变化一次,那么BGP路由标签就会重新分配一次。

MPLS OptionB

B方案也称之为单挑eBGP,因为两台ASBR之间就是eBGP邻居传递VPNV4路由,并且是直连接口单跳

B方案的工作方式就是在两台ASBR之间,A方案中是将ASBR中建立子接口链路,通过子接口链路来传输特定的VRF,而B方案则是两台ASBR之间建立MP-eBGP,传递VPNV4路由,注意是关闭了VPN-Tag过滤功能的,但这样的话就需要注意一点,就是从对端PE过来的路由,在ASBR中 并没有将RT值匹配,而是直接不匹配了,然后传递过来的,所以我本端的PE设备和对端的PE设备所配置的RT值需要一致。

MPLS OptionC1

C的方案是直接我本端PE与对端PE建立MP-eBGP邻居[多跳的邻居(因为他单挑不可达)],如果要将本端VPNV4路由发送给对端,那么首要问题就是给VPNV4路由打上标签之后发送给对端,但是根据递归查询下一跳地址(也就是对端PE地址,一般为环回口地址)就说明,第一步就是让本域内拥有去往对端PE设备环回口的路由(不然PE都不可达),路由的问题很好解决,两台ASBR之间建立普通的BGP单播邻居,来通过引入或者network方式,通告环回口路由就行了。但就是标签问题,我本域内(AS100)对于我AR2的环回口,都是有标签的,他们都是通过LDP分配的,但就是AR4设备通告了环回口路由之后。**但!**就是AR4连接AR5的现路上,以及AR200内部,该如何为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YvjpkxvX-1682930589106)(./Images/过程讲解/C方案统用讲解图.png)]

C1方案中会用到三层标签,而C2中不会。

C1方案中,采用的是直接与对端PE建立MP-eBGP Multio多跳方式,这样第一个问题就是,如何让他们的邻居建立地址通信,路由的宣告可以由ASBR设备network Or Impor引入来实现,而标签的分发,因为BGP路由不是真实的下一跳(真实的下一跳还需要再次递归查询)所以LDP并不会为BGP路由分配标签,那么AS4<---->AR5的链路上,分配标签的过程就由BGP来分配[(AR4和5之间建立普通BGP邻居)要开启BGP发送标签路由功能],AR4通告了AR2的环回口路由之后,AR5会将其通告给自己的AR7(无论AR5到AR7是不是又RR,总之AR7会收到),这个时候有一个点需要注意,就是我说的 LDP不会给BGP发标签,所以AR4-5的链路上是建立BGP邻居,BGP开启发标签功能,就会发标签,然后AR7收到了之后,他就会收到AR5分配的去往AR2环回口地址的标签,递归查询下一跳发现下一跳地址是AR5的地址,再封装一层去往AR5的地址,那么此时AR7封装的标签就是|外层去往AR5|AR5通告过来的去往AR2的|私网VPNV4标签|

C1方案中采用的是PE和PE直接建立邻居,不需要ASBR来传递VPNv4路由,也不需要维护VPNv4路由了。 双方PE直接建立邻居,那么首先是要让双方PE都学习到对方建立邻居的路由(这种一般皆为环回口地址,后续也用环回口地址来表达),双方PE学习到环回口路由这很好做,边界ASBR设备宣告PE设备环回口即可,但注意这是MPLS网络,LDP不会为BGP路由发布标签,这样的话,我学习到了对端PE的环回口路由,但是我LDP并不会给其分配标签,这样就需要利用BGP来分配标签。

C1方案带RR

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LYtXgPdc-1682930589107)(./Images/VPN/MPLS OptionC1方案(RR)].png)

我下面说的邻居,都是vpnv4邻居。

带RR的场景就是更好支持多PE的情况了,不需要很多个PE之间都建立全互联了,只需要和RR建立邻居关系,RR再和对端RR建立邻居关系,那么就OK了,你要是再给他优化(下一跳不更改)那么就和之前的一点都没差别了!

注意一点:有可能会出现AR6orAR3查看去往对端PE环回口地址结果下一跳不是本域边界(AR4或者AR5的地址)那么这个情况是因为,AR3和AR6 他们两个RR之间普通BGP邻居没有关掉,所有AR4network了之后,AR4不光传递给了AR5,AR3也收到了,AR3收到之后 AR3传递给了AR6,再路由优选,将AR3传递过来的优先选择了,那么下一跳看到的就是AR3的地址,而这个地址不是域内的边界,所以会有问题

MPLS OptionC2

思路:

C1为什么要在对端域做那么多配置,什么开启label啊,做策略if-match label啊,然后apply label啊,都是因为LDP不会为BGP分配标签,所以他BGP自己做策略分配,但我C2的思路是什么样的? 你C1是因为LDP不会为BGP分配标签是吧,那我把BGP路由引入,好了,他是IGP路由了,你给他分配标签吧,这就是C2的思路,很easy。

删除—过程讲解

该章节用来记录MPLS中的LDP邻居建立,标签交换等。

1.MPLS

2.MPLS VPN

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3iWJM4EH-1682930589107)(./Images/过程讲解/AB方案统用讲解图.png)]

2.1 Option A交互过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1TcifkxE-1682930589107)(./Images/过程讲解/AB方案统用讲解图.png)]

2.2 Option B交互过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NiUuncd2-1682930589107)(./Images/过程讲解/AB方案统用讲解图.png)]

AR2给 VRF 100的路由分配的是1026 给VRF 200分配的是1027,然后通告给了自己的MP-BGP邻居,也就是AR4 那么AR4上,就知道了,去往8.8.8.1和9.9.9.1 要去AR2,要打上AR2告诉我的标签1026和1027,然后他再告诉自己的MP-BGP邻居,但注意哦,这个时候因为是通告给eBGP邻居,所以下一跳更改了,AR4就对去往8.8.8.1和9.9.9.1的路由 打上了自己分配的标签:1030和1027,然后将其通告给了自己的MP-BGP邻居AR5,那么AR5收到了之后,他就知道了,如果要去往

Q:AR2通告9.9.9.1和8.8.8.1的标签值给AR7的过程(9.9.9.1我简称为A,8.8.8.1我简称为B)

A:

因为AR2连接的CE路由,所以他这里有了去往CE A和B网段的路由信息,他就对A和B打上标签值:1026和1027。将其通告给了自己的VPNv4邻居 AR4,AR4收到了这个标签值之后,他就明白了,如果要去往A和B网段,那么就需要打上1026或者1027,然后去AR2[因为你要打上标签,这样去到对方家(也就是AR2)的时候,对方家才知道,哦你打的是1027的标签,那你要找的肯定是我的B网段。] ,AR4和AR5之间是VPNv4邻居,因为他们之间是eBGP邻居关系,下一跳属性会更改。AR4将A和B网段的路由通告给了AR5之后[原来在AR4的时候,AR4收到A和B的标签值,那么因为是AR2通告的,所以他的下一跳地址是打上AR2的标签,外层标签就是下一跳是AR2的标签值,现在下一跳信息会更改,因为通告给eBGP的原因] 所以AR4对A和B网段,分配了一个标签值:

2.3 Option C1交互过程

PE间建立邻居

RR间建立邻居

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4lQy4Qu-1682930589108)(./Images/过程讲解/C方案统用讲解图.png)]

C1的交互过程就是

2.4 Option C2交互过程

PE间建立邻居

RR间建立邻居

配置过程(仅配置)

3.1 MPLS 基础配置

3.2 MPLS VPN正常跨域配置

3.3 MPLS OptionA方案配置

3.4 MPLS OptionB方案配置

3.5 MPLS OptionC1方案配置

开启BGP打标签功能,但是标签打了 标签谁分呢?通过策略来分

LSP中的每一跳都开启peer label功能,ASBR做策略开 分配标签功能,

C1方案有带RR场景和不带RR场景得,首先是说不带RR场景(就是双方建立邻居不采用RR建立)

带RR得场景需要注意了,RR设备如果看到去往对端得路由下一跳地址不是本区域的ASBR地址

例如AR3看到去往7.7.7.7的下一跳地址是6.6.6.6,那么要注意了,要关闭RR之间的ipv4 BGP单播邻居,(我做的过程中没遇到这个问题)

3.6 MPLS OptionC2方案配置

两个ASBR之间开启label功能,并且利用route-policy ,针对ASBR配置route-policy,分配标签

两个ASBR宣告本域的pE地址,然后MPLS开启lsp bgp功能 即可

跨域C要保证的东西:路由由BGP保证,标签 C1是BGP用策略分配,所有BGP邻居都要分配一下的,C2就是 ASBR分配,域内其他的,我ASBR做了让LDP给BGP路由分配,即可

查看原文