BGP协议使用Update报文对路由信息进行更新和撤销。在最新的BGP标准RFC4271中,对Update携带的路由信息格式定义如下:
Withdrawn Routes Length (2 octets) |
Withdrawn Routes (variable) |
图1 路由撤销格式
Length (1 octet) |
Prefix (variable) |
图2 Withdrawn Routes格式
对于要撤销的路由,BGP只向邻居发布该地址的掩码长度和前缀。
Total Path Attribute Length (2 octets) |
Path Attributes (variable) |
Network Layer Reachability Information (variable) |
图3 路由更新格式
Length (1 octet) |
Prefix (variable) |
图4 NLRI格式
对于更新的路由,BGP把属性完全相同的合并在一起发布,属性信息放在前面,后面紧跟属性完全相同的一个/组前缀信息。一个Update报文中只能发布一组这样的路由。
随着BGP广泛应用于MPLS VPN、组播以及非IPv4地址族,这种固定的结构不能完全满足应用需求。
为了解决BGP对多种网络层协议的支持,IETF(Internet Engineering Task Force,因特网工程任务组)对BGP-4进行了地址族能力扩展,形成MP-BGP(Multi-Protocol BGP,多协议BGP),使BGP能够为多种应用提供路由信息。在RFC4760(Multiprotocol Extensions for BGP-4)中,定义了2个新的可选非传递属性,BGP的多种协议扩展都用到了这两个属性:
l 扩展协议可达NLRI(MP_REACH_NLRI,属性类型14)
l 扩展协议不可达NLRI(MP_UNREACH_NLRI,属性类型15)
这两种扩展属性适用于所有的BGP协议扩展,为了对不同的扩展类型进行区分,在这两种属性中都携带了BGP地址族(Address Family Information)和子地址族(Sub-Address Family Information)信息。AFI 1分配给IPv4,2分配给IPv6。SAFI分配原则在RFC4760中定义如下[1]:
- SAFI values 1 and 2 are assigned in this document.
- SAFI value 3 is reserved. It was assigned by RFC 2858 for a use that was never fully implemented, so it is deprecated by this document.
- SAFI values 5 through 63 are to be assigned by IANA using either the Standards Action process, defined in [RFC2434], or the Early IANA Allocation process, defined in [RFC4020].
- SAFI values 67 through 127 are to be assigned by IANA, using the "First Come First Served" policy, defined in RFC 2434.
- SAFI values 0 and 255 are reserved.
- SAFI values 128 through 240 are part of the previous "private use" range. At the time of approval of this document, the unused values were provided to IANA by the Routing Area Director. These unused values, namely, 130, 131, 135 through 139, and 141 through 240, are considered reserved in order to avoid conflicts.
- SAFI values 241 through 254 are for "private use", and values in this range are not to be assigned by IANA.
表格 1 常用AFI和SAFI列表
BGP扩展 | CODE | AFI | SAFI |
IPv4 Unicast | Multiprotocol(1) | 1 | 1 |
IPv4 Multicast | Multiprotocol(1) | 1 | 2 |
IPv4 Lable | Multiprotocol(1) | 1 | 4 |
IPv4 VPNV4 | Multiprotocol(1) | 1 | 128 |
Ipv6 Unicast | Multiprotocol(1) | 2 | 1 |
IPv4 MDT | Multiprotocol(1) | 1 | 66 |
IPv6 Multicast | Multiprotocol(1) | 2 | 2 |
L2vpn | Multiprotocol(1) | 196 | 128 |
VPLS(rfc4761) | Multiprotocol(1) | 25 | 65 |
扩展协议可达属性用来‘Carry the set of reachable destinations together with the next-hop information to be used for forwarding to these destinations’[1]。一个完整的MP_REACH_NLRI属性结构包含如下内容:
l 地址族信息:包括AFI和SAFI。其中AFI携带和网络地址相关的网络层协议标识;SAFI携带相关属性中网络层可达信息的附加信息;
l 下一跳信息:包括网络地址长度(Length of Next Hop Network Address)和下一跳网络地址(Network Address of Next Hop)。在BGP IPv4定义中,下一跳是作为地址的属性进行传递的,属性类型3。BGP进行地址扩展后,下一跳地址也需要进行扩展,因此放在MP_REACH_NLRI属性中传递。
l 前缀信息:放在该属性的NLRI字段传递,不同的地址族格式不同。
Address Family Identifier (2 octets) |
Subsequent Address Family Identifier (1 octet) |
Length of Next Hop Network Address (1 octet) |
Network Address of Next Hop (variable) |
Reserved (1 octet) |
Network Layer Reachability Information (variable) |
图5 MP_ REACH_NLRI格式
此外,定义了一个字节的保留未用,必须置为全0。
扩展地址不可达属性通告不可达路由,一个含有MP_UNREACH_NLRI的update报文不需要携带MP_UNREACH_NLRI属性以外的任何其他路径属性。其格式如下:
Address Family Identifier (2 octets) |
Subsequent Address Family Identifier (1 octet) |
Withdrawn Routes (variable) |
图6 MP_UNREACH_NLRI格式
从应用场景分,常用的BGP地址族扩展可以分为三大类:
l 与MPLS技术组合,用以分配公网标签、跨公网传播传递必要的协议信息,如:BGP VPNv4扩展、L2VPN扩展、VPLS扩展;
l 为组播应用携带信息,如:IPv4组播扩展和IPv6组播扩展;此外,在私网跨越公网运行组播业务的场景,BGP定义了组播VPN MDT扩展,简称组播VPN扩展。
l 对IPv4之外的地址族的支持,如IPv6扩展、6PE扩展;
MPLS(Multiprotocol Label Switching,多协议标签交换)起源于IPv4(Internet Protocol version 4,因特网协议版本4),在链路报文头和IP报文头之间插入一个标签头,标签处于2.5层。由于MPLS结合了IP网络强大的三层路由功能和传统二层网络高效的转发机制,在转发平面采用面向连接方式,与现有二层网络转发方式非常相似,这些特点使得MPLS能够很容易地实现IP与ATM、帧中继等二层网络的无缝融合,并为QoS(Quality of Service,服务质量)、TE、VPN等应用提供更好的解决方案。
传统的VPN一般是通过GRE、L2TP、PPTP等隧道协议来实现私有网络间数据流在公网上的传送,而LSP本身就是公网上的隧道,用MPLS来实现VPN有天然的优势。
基于MPLS的VPN就是通过LSP将私有网络的不同分支连接起来,形成一个统一的网络。基于MPLS的VPN支持对不同VPN间的互通控制。
图7 MPLS VPN典型组网
在MPLS/VPN架构中设备有如下角色:
l CE(Customer Edge)设备:用户网络边缘设备,有接口直接与SP(Service Provider,服务提供商)相连。CE可以是路由器或交换机,也可以是一台主机。CE“感知”不到VPN的存在,也不需要支持MPLS。
l PE(Provider Edge)路由器:服务提供商边缘路由器,是服务提供商网络的边缘设备,与用户的CE直接相连。在MPLS网络中,对VPN的所有处理都发生在PE上。
l P(Provider)路由器:服务提供商网络中的骨干路由器,不与CE直接相连。P设备只需要具备基本MPLS转发能力。
PE为CE提供二层接入服务的称为L2VPN,提供三层接入服务的称为L3VPN。对MPLS的详细讨论参见网络之路第三期MPLS专题。
在MPLS/L3VPN组网中,PE和CE之间运行路由协议,PE与CE连接的接口运行路由协议多实例。CE把本站点的VPN路由发布给PE,并从PE学到远端VPN的路由。CE与PE之间使用BGP/IGP交换路由信息,也可以使用静态路由。在CE侧,完全感知不到公网的存在,认为PE是私网内的一台路由器。
在PE上,多个CE接入。PE把不同接入方划分到独立的VPN中。对私网用户而言,他们使用的是自己的私有地址空间,不同的VPN中可能存在相同的IPv4地址。而BGP假设其承载的每个IPv4地址都是全局唯一的,因此必须通过对地址族进行扩展将非唯一的IPv4地址转换为全局唯一的地址。转换方法是将VPN的唯一标识RD(Route Distinguisher)附加在IPv4路由前缀之上:RD用来表示不同VPN;相同的机构在不同地区的接入站点应设置为相同;不同机构必须不同。此外对同一机构不同站点之间的路由传递使用RT(Route Target)进行控制。RT分为import和Export。Export时携带在BGP路由的扩展团体属性中进行传递,PE收到后只保留与本地Import RT匹配的路由。
MPLS L2VPN就是在MPLS网络上透明传递用户的二层数据。从用户的角度来看,这个MPLS网络就是一个二层的交换网络,通过这个网络,可以在不同站点之间建立二层的连接。
MPLS L2VPN包括VLL和VPLS两种:
l VPWS(Virtual Provider Wire Service):虚拟私有线路服务,在公用网络中提供的一种点到点的L2VPN业务。客户的二层设备跨过MPLS/IP核心网络相连,就像通过一根二层线路直连一样。它不能直接在服务提供者处进行多点间的交换。
l VPLS(Virtual Private LAN Service):虚拟专用局域网服务,在公用网络中提供的一种点到多点的L2VPN业务。VPLS使地域上隔离的用户站点能通过MAN/WAN相连,并且使各个站点间的连接效果像在一个LAN中一样。
l VSI(Virtual Switch Instance):虚拟交换实例,通过VSI,可以将VPLS的实际接入链路映射到各条虚链接上。
l PW(Pseudo Wire):虚链路,在两个VSI之间的一条双向的虚拟连接,它由一对单向的MPLS VC(Virtual Circuit,虚电路)构成。
l Tunnel:隧道,用于承载PW,一条隧道上可以承载多条PW,一般情况下为MPLS隧道。隧道是一条本地PE与对端PE之间的直连通道,完成PE之间的数据透明传输。
l Encapsulation:封装,PW上传输的报文使用标准的PW封装格式和技术。PW上的VPLS报文封装有两种模式:Raw和Tagged模式。
l PW Signaling:PW信令协议,VPLS实现的基础,用于创建和维护PW。PW信令协议还可用于自动发现VSI的对端PE设备。目前,PW信令协议主要有LDP和BGP。
在BGP VPNv4扩展中,MP_REACH_NLRI扩展如下:PE从CE学到CE本地的VPN路由信息后,在路由信息中增加RD和RT,再通过BGP VPNv4邻居关系与其它PE交换VPN路由信息。不同VPN的路由在公网中通过RD进行区分,不同CE之间的路由使用RT进行引入控制。PE路由器只维护与它直接相连的VPN的路由信息(收到BGP VPNv4发来的路由后,只保留与本地import RT匹配的路由信息),不维护服务提供商网络中的所有VPN路由。
它的格式如下所示:
Route Distinguisher (8 octets) | Type Field(2 octets) | |
Value Field(6 octets) | Administrator Subfield | |
Assigned Number Subfield | ||
IPv4 Address Prefix (4 octets IPv4 Address) |
图8 RD格式示意图
RT的结构和RD相似,但它们是有本质区别的,RT是BGP路由的扩展属性,而RD附加在IPv4 VPNv4地址前作为地址的一部分存在。
在BGP路由中引入RD和RT只解决了路由传递的问题:在PE本地的路由冲突和路由网络传播过程中的冲突。但RD和RT不参与报文转发,在数据转发时如果接收端PE的两个本地VRF中同时存在10.0.0.0/24的路由,当它接收到一个目的地址为10.0.0.1的报文时,它如何知道该把这个报文发给与哪个VRF相连的CE?这就需要在PE上由BGP给私网路由分配标签来解决。改造后的MP-IBGP进行NLRI信息交换时会附加RD、标签等各种信息。格式如下:
Address Family Identifier (2 octets) | |
Subsequent Address Family Identifier (1 octet) | |
Length of Next Hop Network Address (1 octet) | |
Network Address of Next Hop (PE路由器自己建立Peer使用的地址) | |
Reserved (1 octet) | |
Network Layer Reachability Information (variable) | label(3 octet,与MPLS标签一样,但没有TTL) |
RD(8 octet)+IP前缀 |
图9 MP-IBGP NLRI报文格式
在这之后是RT信息,如下图所示:
Extended community(RT1) |
Extended community(RT2) |
Extended community(RT3) |
图10 MP-IBGP NLRI报文RT列表
MPLS/L2VPN有多种实现方式,其中Kompella方式使用BGP作为交换信令。与MPLS L3VPN类似,各个PE之间通过建立BGP会话自动发现L2 VPN的各个节点,并传递VPN信息,使用VPN-target来区分不同的VPN。在不同VPN内,CE ID可以相同。BGP为不同的CE间建立的VC(Virtual Circuit)分配内层标签,扩展BGP报文格式如下:
Length(2 octets) |
Route Distinguisher(8 octets) |
CE ID(2 octets) |
Label-block Offset(2 octets) |
Label-Base(3 octets) |
Variable TLVs(0 to N octets) |
图11 L2VPN扩展NLRI格式
新定义了一个属性用于描述二层报文封装的必要信息:
Extended community type(2 octets) |
Encaps Type(1 octets) |
Cntrl Flags(1 octets) |
Layer-2 MTU(2 octets) |
Reserved(2 octets) |
图12 L2VPN 扩展属性:layer2-info extended community
VPLS也称TLS(Transparent LAN Service,透明局域网服务)或Virtual Private Switched Network Service(虚拟专有交换网络服务),是在公用网络中提供的一种点到多点的L2VPN业务。VPLS使地域上隔离的用户站点能通过MAN(Metropolitan Area Network,城域网)或WAN(Wide Area Network,广域网)相连,并且使各个站点间的连接效果像在一个LAN中一样。
VPLS提供二层VPN服务。在VPLS中,用户是由多点网络连接起来,不同于传统VPN提供的P2P(Point to Point,点到点)的连接服务。
图13 VPLS典型组网
PW隧道的建立常用有两种信令 LDP(rfc4762)和MP-BGP(rfc4761)。
采用BGP作信令时,利用BGP的多协议扩展VPLS 成员信息。其中MP-reach和MP-unreach属性传递vpls的标签信息,RD、VPN-TARGET和接口参数信息在扩展团体属性中传递。
下图是一个采用BGP方式作信令的PW建立与拆除的典型过程 当PE1配置了一个VSI(Virtual Switch Instance) 建立了到PE2的BGP session,并且在该session上使能VPLS地址族, BGP session建立后会分配标签并给PE2发送带MP-REACH属性的update消息。PE2收到update消息后检查:本地是否也配置了同样的VSI、VPN-TARGET匹配(与L3VPN的匹配含义相同)、接口参数一致;则PE2端的PW就建立起来了。PE1收到PE2的update消息后作同样的检查和处理。
当PW1不想再转发PE2的报文,则发送带MP-UNREACH属性的update消息给PE2,同时拆除PW、释放标签;PE2收到update消息后拆除PW。
图14 用BGP作信令时PW的建立/拆除过程
组播BGP(Multicast BGP或BGP for IPv4 Multicast)扩展用于携带组播源信息。当使能组播扩展的BGP Router收到邻居发来的组播地址族NLRI后,经过优选加入RPF(Reverse Path Forwarding)路由表,不加入单播路由表。其目的是实现单播和组播的拓扑分离。
IPv4 Multicast扩展使用地址族:AFI为1,SAFI为2。
网络中存在两个自治系统:PIM-SM 1属于AS 100,PIM-SM 2属于AS 200。各AS内部采用IGP进行互联。组播源属于AS 100内的PIM-SM 1,接收者则属于AS 200内的PIM-SM 2;要求在屏蔽AS 100网络拓扑的情况下接收者可以视频点播。如下图所示:
图15 Multicast BGP应用举例
典型配置如下:
l 在域边界将Router A和Router B各自的Loopback0接口分别配置为各自PIM-SM域的C-BSR和C-RP;
l 在Router A与Router B之间建立MSDP对等体关系。
l AS之间采用MBGP交换组播路由信息:在Router A Multicast视图引入到源的路由发布给Router B,并保证Router B到该路由下一跳可达。
IPv6组播BGP(IPv6 Multicast BGP或BGP for IPv6 Multicast)扩展用于携带IPv6组播源信息。原理和应用场景与MBGP for IPv4 Multicast扩展类似,只是地址族不同:当使能组播扩展的BGP Router收到邻居发来的组播地址族NLRI后,经过优选加入IPv6 RPF(Reverse Path Forwarding)路由表,不加入单播路由表。其目的是实现单播和组播的拓扑分离。
IPv4 Multicast扩展使用地址族:AFI为2,SAFI为2。
MPLS/BGP VPN结构中只支持单播应用,VPN客户的组播服务需求无法满足。但公网可以运行组播协议,私网内部也可以运行组播,只要解决两个问题就可以实现私网用户跨公网的组播应用:
l 私网组播报文在公网的转发
l 私网源组信息到公网源组信息的映射
1. 私网组播报文跨公网的转发
解决办法是在PE上采用隧道对私网组播报文进行封装,可以用GRE、IPinIP或MPLS隧道。目前业界普遍采用MPLS隧道进行封装。
2. 私网源组映射到公网源组
解决办法是在PE上为每一个私网分配一个组地址,用于公网转发。这样每个VPN内的组播报文到达PE后经过隧道封装,最外层的IP报文还是组播报文的形式:报文组地址为该VPN分配的Share-Group地址。显然,Share-Group地址在全网相同VPN分配必须一致,不同VPN分配必须不同。PE收到组地址在Share-Group范围的组播报文时,根据本地的私网/公网映射关系将报文外层IP头和隧道头剥去,根据Share-Group对应的VPN将报文送到指定私网中进行处理,从而实现跨公网的组播业务,即组播VPN MD协议。
图16 组播VPN的邻居关系
应用模型如上图所示:公网运行普通的组播协议,私网运行普通的组播协议,在PE上完成地址映射和报文封装/解封装。
MD协议在骨干网上为每个VPN维护一棵组播转发树,称为Share-MDT,这棵树就是组播隧道MT,在MD配置完成后就自动建立了,不管VPN中有没有组播业务,也不管骨干网上有没有组播业务。来自于VPN的任何一个站点的组播报文(包括协议报文和数据报文)都会被封装成为公网组播数据报文,沿着这个棵Share-MDT树转发到所有属于该MD的PE。如果该PE连接有该组播组的接收者,则往CE转发,否则丢弃组播报文。
实际应用中还可能碰到这样的问题:要在公网部署PIM SSM必须知道源地址,而Share-Group是PE上配置,PE并不知道其他PE上Share-Group对应的组播源地址(即MT的接口地址,由MD选取PE上建立公网BGP邻居的接口地址)。BGP MDT扩展解决了这个问题:将PE上Share-Group的源组信息通过PE之间的BGP会话进行传递。为此,BGP定义了一类新的地址族:IPv4 MDT地址族。AFI为1,SAFI为66。
MDT SAFI NLRI具体格式如下:
Route Type (1 octet) |
Length (1 octet) |
Route Type specific (variable) |
图17 MDT SAFI NLRI
其中,Route Type定义如下[3]:
1 - Intra-AS I-PMSI auto-discovery route (or just auto-discovery route);
2 - Inter-AS I-PMSI auto-discovery route (or just inter-AS auto-discovery route);
3 - S-PMSI auto-discovery route;
4 - Intra-AS segment leaf auto-discovery route (or just leaf auto-discovery route).
5 - Source Active auto-discovery route.
6 - Shared Tree Join route;
7 - Source Tree Join route;
RD:IPv4-address (12 octets) |
MDT Group-address (4 octets) |
RD:MD配置所在VRF的RD,长度为8字节。
IPv4-address:MTI的IP地址,为IPv4地址,长度为4字节。
MDT Group-address:MVRF绑定的组播组地址,长度为4字节。
图18 Route Type Specific(携带Share-Group信息)
随着IPv6的发展,几乎所有路由协议都开发出了适配IPv6的版本。BGP for IPv6扩展有两个:
l IPv6地址族扩展,解决纯IPv6网络中传递IPv6路由的问题;
l 6PE扩展:解决IPv6孤岛跨越公网的问题。
IPv6扩展在网络之路第六期IPv6专辑有详尽的介绍,请参见IPv6路由技术章节和IPv6 over MPLS章节。