BGPMPLSIPVPN基本原理.docx
《BGPMPLSIPVPN基本原理.docx》由会员分享,可在线阅读,更多相关《BGPMPLSIPVPN基本原理.docx(24页珍藏版)》请在冰豆网上搜索。
BGPMPLSIPVPN基本原理
BGP&MPLSIPVPN基本原理
一.MP-BGP
VPN为什么使用MP-BGP
前面提过,传统的BGP-4(RFC1771)只能管理IPv4的路由信息,无法正确处理地址空间重叠的VPN的路由。
为了正确处理VPN路由,VPN使用RFC2858(MultiprotocolExtensionsforBGP-4)中规定的MP-BGP,即BGP-4的多协议扩展。
MP-BGP实现了对多种网络层协议的支持,在Update报文中,将网络层协议信息反映到NLRI(NetworkLayerReachabilityInformation)及NextHop。
MP-BGP采用地址族(AddressFamily)来区分不同的网络层协议,既可以支持传统的IPv4地址族,又可以支持其它地址族(比如VPN-IPv4地址族、IPv6地址族等)。
关于地址族的一些取值可以参考RFC1700(AssignedNumbers)。
说明:
VRP实现多种MP-BGP扩展应用,包括对VPN的扩展、对IPv6的扩展等,不同的扩展应在各自的地址族视图下配置。
默认情况下,对于IPv4地址族,只要指定了对等体的地址及其所在的AS,本端就自动具备与对等体建立会话能力。
但是对于其他地址族,需要手工使能。
MP-BGP能够在PE路由器之间传播VPN组成信息和VPN-IPv4路由,是通过在BGP中引入扩展团体属性来实现的。
MP-BGP中引入了两个新的路径属性:
MP_REACH_NLRI
MP_UNREACH_NLRI
这两个属性都是可选非过渡(Optionalnon-transitive)的,不提供多协议能力的BGP发言者将忽略这两个属性的信息,不把它们传递给其它邻居。
因此,在VPN中,提供多协议能力的PE设备将把VPN路由信息通过MP-BGP发布给具备该能力的对端PE或作为ASBR的PE。
不具备该能力的其他BGP对等体将忽略该属性,也就不会识别和保存VPN路由信息。
说明可选非过渡是BGP的一种属性类型。
如果BGP路由器不支持此类属性,则相应的Update消息会被忽略,且不会通告给其他对等体。
下面介绍这两个属性:
二.MP_REACH_NLRI
MP_REACH_NLRI(MultiprotocolReachableNLRI),即多协议可达NLRI,用于发布可达路由及下一跳信息。
该属性由一个或多个三元组<地址族信息、下一跳信息、网络可达性信息>组成,格式如下:
图1-1MP_REACH_NLRI属性的格式
1.地址族信息(AddressFamilyInformation)域:
由2字节的地址族标识AFI(AddressFamilyIdentifier)和1字节的子地址族标识SAFI(SubsequentAddressFamilyIdentifier)组成。
−AFI标识网络层协议,对应RFC1700的“AddressFamilyNumber”所定义的地址族值。
例如IPv4的值是1,IPv6的值是2。
−SAFI表示NLRI的类型。
AFI值为1,SAFI值为128表示NLRI中的地址为MPLS-labeledVPN-IPv4地址。
2.下一跳信息(NextHopNetworkAddressInformation)域:
由一字节的下一跳网络地址长度和可变长度的下一跳网络地址组成。
下一跳网络地址是指去往目的系统的路径上的下一个路由器网络地址。
MP-BGP中,BGP发言者在向EBGP对等体发布MP_REACH_NLRI属性时,会把下一跳网络地址设置为本地与对端连接的接口地址。
BGP发言者在向IBGP对等体发布MP_REACH_NLRI属性时,保持下一跳网络地址不变。
3.网络层可达性信息(NLRI)域:
由一个或多个三元组<长度、标签、前缀>组成。
其格式如下:
图1-2携带标签的NLRI格式
−长度域:
标签域和前缀域的总比特数。
−标签域:
标签域由一个或多个标签组成,每个标签长度为3字节。
标签的格式与MPLS中定义的一样,最高位表示是否为栈底,接下来三位为0,后面20位是标签值。
关于标签的详细介绍请参见《VRP特性描述MPLS》。
−前缀域:
在BGP/MPLSIPVPN中,前缀域由RD和IPv4地址前缀组成。
当两个PE(或ASBRPE)之间交换VPN路由信息时,在Update消息中携带MP_REACH_NLRI属性。
一个Update消息可以携带多条具有相同路由属性的可达路由信息。
三.MP_UNREACH_NLRI
MP_UNREACH_NLRI(MultiprotocolUnreachableNLRI),即多协议不可达NLRI,用于通知对等体删除不可达的路由。
该属性的格式如下:
图1-1MP_UNREACH_NLRI属性的格式
1.地址族标识AFI:
与MP_REACH_NLRI属性中的相同,用于标识网络层协议,对应RFC1700的“AddressFamilyNumber”所定义的地址族值。
2.子地址族标识SAFI:
与MP_REACH_NLRI属性中的相同,表示NLRI的类型。
3.撤销路由(WithdrawnRoutes):
不可达路由列表,也是由一个或多个NLRI组成。
BGP发言者可以通过在撤销路由域中携带与之前发布的可达路由中相同的NLRI来撤销路由。
BGP发言者通过携带MP_UNREACH_NLRI属性的Update消息来撤销VPN-IPv4路由。
一个Update消息可以携带多条不可达路由信息。
当撤销路由时,如果指定了标签,只有指定的标签被撤销;如果没有指定标签,只有不带标签的路由被撤销。
携带MP_UNREACH_NLRI属性的Update消息不再携带其他路径属性。
因为不同的路径分配的标签不同,对端只需根据标签来删除对应的路由。
三.MP-BGP能力协商
BGP路由器通过Open消息协商能力,通过查看OPEN消息中的能力参数来确定对等体所具有的能力(如使用多协议扩展来携带标签映射信息的能力)。
BGP路由器如果支持某功能,并且确定对方也具备该能力,那么该BGP路由器将使用该功能与对等体交互。
Open消息包含可选的能力协商参数Capabilities,由一个或多个三元组组成。
其格式如图6-11。
图1-1BGP可选能力协商参数格式
1.CapabilityCode:
唯一标识了该能力的类型。
该值为1表示BGP发言者具备MP-BGP能力。
2.CapabilityLength:
表示能力值域的长度。
MP-BGP能力参数中,能力值域的长度为4。
3.CapabilityValue:
能力值域,可变长度,决定于CapabilityCode。
MP-BGP能力参数中,能力值域的格式如图6-12。
其中,
−AFI(2字节)和SAFI(1字节)的含义与MP_REACH_NLRI中的相同。
−Res.为保留域(1字节)。
发送方应将其置0;接收方应忽略该域信息。
图1-2MP-BGP能力值域的格式
目前BGP不支持动态能力协商。
BGP发言者发布了一个携带可选能力参数后,
1.如果收到对端回应的Notification消息,表明对端不支持能力发布。
此时BGP发言者将中断与该对等体的会话,发送一个不携带任何可选能力参数的Open消息,试图重新建立BGP连接。
2.如果对端支持能力发布,但该可选能力参数是未知的或不支持的,则协商失败。
此时BGP发言者将中断与该对等体的会话,发送一个不携带该可选能力参数的Open消息(可能还携带其他可选能力参数),试图重新建立BGP连接。
因此BGP能力的变化,如使能或禁止标签路由能力、使能或禁止某地址族能力(如IPv4、IPv6、VPNv4、VPNv6)、使能GR能力等,BGP发言者都会中断与该邻居的会话,之后重新进行邻居能力协商。
BGP路由交互的条件
MP-BGP对等体之间进行路由交互,必须具备如下条件:
1.MP-BGP对等体之间有互相到对方的可达路由
BGP的运行是通过消息驱动的,这些消息通过TCP协议进行传播(端口号是179)。
为了在对等体之间建立TCP连接,MP-BGP对等体之间必需有到对方的可达路由。
BGP对等体不一定就是相邻的路由器,利用逻辑链路也可以建立BGP对等体关系。
为了增强BGP连接的稳定性,使用32位掩码的Loopback接口地址建立连接。
BGP不会自己去发现和计算AS内部的路由信息,一般通过引入IGP路由、静态配置的路由或直连路由到BGP路由表中。
MP-BGP对等体之间建立和维持BGP会话连接
Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。
对等体在接收到Open消息后,将发送Keepalive消息确认并保持连接的有效性。
确认后,对等体间才进行其他类型消息的交换。
因此MP-BGP对等体之间必须建立和维持BGP会话连接。
四.VPN-IPv4路由更新请求
以下几种情况,PE设备需要向对等体请求重传BGPUpdate消息来刷新路由:
●本端入口策略发生变化
●本端新增或删除VPN-Instance实例
●本端VPN-Instance的VPN-Target属性的添加或删除
当需要向对等体请求重传BGPUpdate消息时,PE向已经和自己成功进行能力协商的邻居发送RouteRefresh消息,其中携带AFI和SAFI。
邻居收到Route-Refresh消息会重传满足特定AFI和SAFI的所有路由。
五.PE上的VPN路由选择
私网路由交叉
两台PE之间通过MP-BGP传播的路由是VPNv4路由。
当接收到VPNv4路由,PE先进行如下处理:
1.检查其下一跳是否可达。
如果下一跳不可达,该路由被丢弃。
2.对于RR发送过来的VPNv4路由,如果本地已有该路由,需检查其ClusterID是否相同。
如果相同,丢弃该路由。
3.进行BGP的路由策略过滤,如果不通过,拒丢弃该路由。
之后,PE把没有丢弃的路由与本地的各个VPN实例的ImportTarget属性匹配。
VPNv4路由与本地VPN实例的VPN-Target进行匹配的过程称为私网路由交叉。
PE在收到VPNv4路由后,既不进行优选,也不检查隧道是否存在,直接将其与本地的VPN实例进行交叉。
PE上有种特殊的路由——来自本地CE的属于不同VPN的路由。
对于这种路由,如果其下一跳直接可达或可迭代成功,PE也将其与本地的其他VPN实例的ImportTarget属性匹配,该过程称为本地交叉。
要使本地交叉成功,需要在被交叉的路由所属VPN对应的BGP-VPN实例地址族下引入直连路由。
说明为了能够将报文正确转发出去,BGP路由器必须先找到一个直接可达的地址,通过这个地址到达路由表中指示的下一跳。
在上述过程中,去往直接可达地址的路由被称为依赖路由,BGP路由依赖于这些路由指导报文转发。
根据下一跳地址找到依赖路由的过程就是路由迭代。
在PE上执行displayiprouting-tablevpn-instancevpn-instance-nameverbose命令可查看该PE上交叉成功的私网路由和来自本地CE的路由。
该命令的显示结果中,只有对应的状态带有“Active”的路由才被放入VPN实例路由表。
VPN实例路由表的查看方法是执行不带参数verbose的displayiprouting-tablevpn-instancevpn-instance-name命令。
隧道迭代
为了将私网流量通过公网传递到另一端,需要有一条公网隧道承载这个私网流量。
因此私网路由交叉完成后,需要根据目的IPv4前缀进行路由迭代,查找合适的隧道(本地交叉的路由除外);只有隧道迭代成功,该路由才被放入对应的VPN实例路由表。
将路由迭代到相应的隧道的过程叫做隧道迭代。
隧道迭代成功后,保留该隧道的标识符(TunnelID),供后续转发报文时使用。
TunnelID用于唯一标识一条隧道。
VPN报文转发时根据TunnelID查找对应的隧道,然后从隧道上发送出去。
displayiprouting-tablevpn-instancevpn-instance-nameverbose命令的显示结果中,路由的状态带有“GotQ”表示隧道迭代成功;带有“WaitQ”表示隧道迭代不成功。
隧道迭代成功的交叉路由对应的隧道标识符(TunnelID)不为0x0。
如果交叉路由的隧道标识符为0x0,表示隧道迭代不成功。
去往本地CE的报文不从隧道转发,因此本地CE路由和本地交叉路由对应的隧道标识符都是0x0。
私网路由的选择规则
经过路由交叉和隧道迭代的路由并不是全部被放入VPN实例路由表。
从本地CE收到的路由和本地交叉路由也不是全部被放入VPN实例路由表。
对于到同一目的地址的多条路由,如果不进行路由的负载分担,按如下规则选择其中的一条:
●同时存在直接从CE收到的路由和交叉成功后的同一目的地址路由,则优选从CE收到的路由。
●同时存在本地交叉路由和从其他PE接收并交叉成功后的同一目的地址路由,则优选本地交叉路由。
对于到同一目的地址的多条路由,如果进行路由的负载分担,则:
●优先选择从本地CE收到的路由。
只有一条从本地CE收到的路由而有多条交叉路由的情况下,也只选择从本地CE收到的路由。
●只在从本地CE收到的路由之间分担或只在交叉路由之间分担,不会在本地CE收到的路由和交叉路由之间分担。
●选择了交叉路由进行负载分担后,一旦从本地CE收到VPN路由,PE选择从本地CE收到的路由之间进行负载分担。
●负载分担的AS-PATH属性必须完全相同。
六.VPNv4路由发布
PE设备通过MP-BGP发布给对端PE的VPNv4路由分为两种情况:
●从本地CE接收的IPv4路由
−没有配置负载分担时,从CE收到的路由直接转换为VPNv4的路由发送所有对等体
−配置了负载分担后,从CE收到的路由优选后条数发生了变化,但发送给对等体的只有一条,下一跳为本PE设备。
配置负载分担和取消负载分担的配置都会使PE重新发布这条VPNv4路由。
●从其他对等体接收过来的VPNv4路由
PE把VPNv4路由向别的对等体发送前,需要检查是否从该对等体收到了RD相同的同一条路由:
如果没有收到就发送给该对等体;如果收到了,则不再发送。
MP-BGP的VPN-IPv4路由发布策略仍与普通BGP相同:
●存在多条有效路由时,BGPSpeaker只将最优的路由发布给对等体。
●BGPSpeaker只把自己使用的路由发布给对等体。
●BGPSpeaker从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体)。
●BGPSpeaker从IBGP获得的路由不向它的IBGP对等体发布。
●BGPSpeaker从IBGP获得的路由发布给它的EBGP对等体(在不使能BGP与IGP同步特性的情况下)。
●连接一旦建立,BGPSpeaker把自己所有BGP路由发布给新对等体。
七.应用于BGP/MPLSIPVPN的隧道
BGP/MPLSIPVPN中常用的隧道有:
●LSP隧道
使用标签转发,是应用于BGP/MPLSIPVPN中常见的隧道。
使用LSP隧道作为BGP/MPLSIPVPN的公网隧道,骨干网在转发VPN数据转发时,只在PE设备分析IP报文头,而不用在VPN报文经过的每一台设备都分析IP报文头。
这样,节约了对VPN报文的处理时间,可降低VPN报文时延。
另外,标签能够被任意的链路层所支持。
LSP在功能上与ATM和帧中继的虚电路相同,其安全性与ATM和帧中继网络相当。
因此,如果传输BGP/MPLSIPVPN报文的骨干网设备都支持MPLS,建议使用LSP或MPLSTE(TrafficEngineered)作为公网隧道。
●GRE隧道
如果网络边缘的PE路由器具备MPLS功能,但骨干网核心路由器(P路由器)只提供纯IP功能,不具备MPLS功能。
这样,就不能使用LSP作为公网隧道。
此时,可以使用GRE隧道替代LSP作为VPN骨干网隧道。
GRE的详细介绍请参见“GRE协议”。
●L2TP隧道
对于出差用户,不可能总是可以直接接入到MPLS骨干网的PE设备上。
这样就无法通过Internet或者是IP骨干网直接访问MPLSVPN内部的站点。
此时可以采用L2TP协议来解决此问题。
这种技术也称为L2TP接入三层VPN技术。
详细介绍请参见“L2TP协议”。
●MPLSTE隧道
MPLSTE是MPLS技术与TE流量工程相结合的技术,通过建立到达指定路径的LSP隧道进行资源预留,使网络流量绕开拥塞节点,达到平衡网络流量的目的。
MPLSTE中用到的这种LSP隧道就称为MPLSTE隧道,也是应用于BGP/MPLSIPVPN中常见的隧道。
除了具备LSP隧道的优势外,MPLSTE隧道在解决网络拥塞问题方面有着自己的优势。
利用MPLSTE隧道,服务提供商能够充分利用现有的网络资源,提供多样化的服务。
同时可以优化网络资源,进行科学的网络管理。
在MPLSVPN业务中,运营商往往需要为VPN用户的各种业务类型(如语音业务、视频业务、关键数据业务、普通上网业务)提供端到端的QoS保证。
为满足用户需求,可以使用MPLSTE隧道,为用户创建具有QoS保证的隧道。
此外,使用MPLSTE隧道,运营商还可以根据VPN用户的不同服务要求,通过一定的策略构建各种有QoS保证的VPN服务,具体请参见VPNQoS。
八.MP-BGP标签分配
在BGP/MPLSIPVPN中,PE通过MP-BGP发布给骨干网的其他相关的PE前,需要将私网路由与MPLS标签关联。
当用户数据包在骨干网传输时,携带MPLS标签。
每个PE在分配标签前,需要发布一个标识自己的路由。
该路由需要通过IGP发布给骨干网的其他PE节点,使其他节点根据该路由为PE分配标签。
为了减少全网LSP数量,推荐使用只对32位掩码的Loopback接口的路由分配标签,一般与BGP会话使用同一个Loopback接口。
PE分配标签的方法有多种。
VRP实现如下两种方法:
●基于路由的MPLS标签分配:
默认情况下,VRP为VPN路由表的每一条路由分配一个标签(onelabelperroute)。
这种方式的缺点是:
当路由数量比较多时,路由器入标签映射表ILM(IncomingLabelMap)需要维护的表项也会增多,从而提高了对路由器容量的要求。
●基于VPN的MPLS标签分配:
为整个VPN实例分配一个标签,该VPN实例里的所有路由都共享一个标签。
使用这种分配方法的好处是节约了标签。
运营商的运营商(Carriers'Carrier)中采用基于路由的MPLS标签分配方式,在目前的VRP版本中,不能在运营商的运营商组网中使用基于VPN的MPLS标签分配。
九基本BGP/MPLSIPVPN的路由发布
概述
在基本BGP/MPLSIPVPN组网中,VPN路由信息的发布涉及CE和PE,P路由器只维护骨干网的路由,不需要了解任何VPN路由信息。
PE路由器一般只维护自身接入的VPN的路由信息,不维护所有VPN路由。
VPN路由信息的发布过程包括三部分:
●本地CE到入口PE
●入口PE到出口PE
●出口PE到远端CE
完成这三部分后,本地CE与远端CE之间建立可达路由,VPN路由信息能够在骨干网上发布。
下面分别对这三部分进行介绍。
本地CE到入口PE的路由信息交换
CE与直接相连的PE建立邻居或对等体关系后,把本站点的VPN路由发布给PE。
CE与PE之间可以使用静态路由、RIP、OSPF、IS-IS或BGP。
无论使用哪种路由协议,CE发布给PE的都是标准的IPv4路由。
PE上的各VPN路由转发表之间相互隔离,并与公网路由转发表相互独立。
PE从CE学习路由信息时,PE需要区分该路由应注入哪个路由转发表。
通常的静态路由和路由协议自身并不具备这种区分能力,必须使用手工配置实现:
1.如果CE与PE之间使用静态路由,需要在配置静态路由时指定VPN实例(使用命令iproute-staticvpn-instance)。
通常情况下,静态路由用于stubVPN的CE与PE间交换路由,或者CE是个主机或者交换机的情况。
如果CE是台主机或者交换机,通常在与之相连的PE上配置到该CE所在site的静态路由,无需使用路由协议。
说明:
如果一个VPN接收本VPN以外的、非PE发布的路由,并将这些路由发布给PE,这类VPN称为过渡VPN(transitVPN)。
只接收本VPN路由以及PE发布的路由的VPN称为stubVPN。
PE与CE之间采用静态路由的好处是配置简单,并且可以避免因CE设备的路由振荡影响骨干网PE设备的BGPVPNv6路由的稳定性。
2.如果CE与PE之间使用IGP,每个VPN单独使用一个进程,不同的VPN使用不同的进程。
此时需要在配置IGP进程时指定VPN实例(例如,ospfprocess-idvpn-instancevpn-instance-name)。
当CE与PE之间使用IGP交换路由信息时,如果站点内包括后门连接(backdoorlink)时,处理相对复杂,具体请参见OSPFVPN扩展。
另外,在Hub&Spoke组网中IGP在CE与PE之间的使用也有一定的限制,具体请参见Hub-CE与Hub-PE使用IGP,Spoke-PE与Spoke-CE使用EBGP。
说明后门连接是指两个Site之间的连接,该连接不经过VPN骨干网。
这两个site的流量主要通过VPN骨干网的链路传输,后门连接作为备份链路。
3.如果CE与PE之间运行EBGP,需要在相应的BGPVPN实例视图下使能MP-EBGP对等体。
从技术角度看,使用BGP是较好的选择:
−BGP是一种外部网关协议,可以用来实现不同AS之间传递路由信息。
−使用BGP,CE更易于传递路由属性(如AS-PATH)给PE。
−BGP提供了丰富的路由策略,能够对VPN路由实现灵活的过滤和选择。
−如果站点内包括backdoor,BGP也能正确处理,而使用IGP的处理相对复杂。
如果PE和CE之间运行EBGP,由于BGP使用AS号检测路由环路,为保证路由信息的正确发送,需要为物理位置不同的节点分配不同的AS号。
但VPN站点使用的是私有AS号,不同VPN的站点可能使用相同的AS号。
TransitVPN站点使用的AS号要求全局唯一。
StubVPN站点可以复用相同的私有AS号,此时需要在PE上使用BGP的AS号替换功能。
入口PE到出口PE的路由信息交换
入口PE到出口PE的路由信息交换过程可分为三部分:
1.PE从CE学到VPN路由信息后,为这些标准IPv4路由增加RD和VPNTarget属性,形成VPN-IPv4路由,存放到VPN实例中。
2.入口PE通过MP-BGP的Update报文把VPN-IPv4路由发布给出口PE。
Update报文中还携带RD、VPN-Target属性及MPLS标签。
BGP发布的VPN-IPv4路由,首先通过策略路由的过滤,然后通过BGP路由策略的过滤,才能被下一跳PE接收到。
出口PE收到VPN-IPv4路由后,进行本地交叉、隧道迭代和路由优选,决定是否将该路由加入到VPN实例的路由表。
从其他PE接收的并被加入到VPN路由表的路由,本地PE为其保留如下信息以供后续转发报文时使用:
−MP-BGPUpdate消息中携带的MPLS标签值
−隧道迭代成功后的TunnelID