中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 未整理篇
BGPMPLS/VPNtechnolgy(part1)
作者:cai3995 时间:2003-01-25 11:05 出处:互联网 责编:chinaitpower
              摘要:BGPMPLS/VPNtechnolgy(part1)

BGP-4的多协议扩展

 1.1 RFC2858的介绍

原有BGP协议系统源自RFC1771:边界网关协议-4。可以用于转发IPv4协议的信息,但是在新型网络技术的应用(如MPLS/VPN)中,原有的BGP-4协议承载路由信息的时候,无法达到期望的目标,为此,作为对BGP-4的扩充,IETF发布了RFC2858,使得新型的MP-BGP协议能够支持多种网络协议(如IPv6IPX等)。这种协议扩展是向后兼容的,即支持MP-BGP的路由器可以和不支持MP-BGP的路由器同时工作。

RFC1771中规定的BGP-4协议报文中,仅仅有三部分内容是IPv4协议系统所指定的:Next-HopAggregatorNLRI。为了使BGP-4协议能够支持多种网络层协议的路由信息,只有两种能力是必须被添加到协议中的:

(a)通过Next-Hop信息连接某种特定网络层协议的能力;

(b)通过NLRI连接某种特定网络层协议的能力。

为了识别多种网络层协议中的协议实体,本文档使用了如RFC1700中定义的Address Family概念。

在原有BGP-4协议系统中,路径属性是包含在Update报文中的,不论Update报文转发的路由信息中包含了NLRI信息或者只有Withdrawn信息。对于MP-BGP来说,它认为下一跳信息(为Next-Hop属性所提供)仅仅在与目的地址可达信息的通告连接中有意义,在目的地不可达的情况(撤销路由信息-Withdrawn)下是没有什么意义的。所以目的地可达信息的通告应该和与之相关的下一跳信息的通告相关联,而目的地可达信息的通告应该与撤销路由信息的通告隔离开来。[kernix1] 

为了提供向后兼容性,也为了使向BGP-4扩展多协议能力的简约化,RFC2858定义了两个新的路径属性:Multiprotocol Reachable NLRI(MP_REACH_NLRI)Multiprotocol Unreachable NLRI(MP_UNREACH_NLRI)

第一个属性(MP_REACH_NLRI)是用来承载聚集了可达目的地信息与提供转发这些可达目的地信息的下一跳信息的组。第二个属性(MP_UNREACH_NLRI)可以承载目的地不可达信息的组。这两种属性均为可选非转发的。如果BGP speaker不提供多协议支持能力[kernix2] ,那就只是简单的忽略带有这些属性的信息,同样也不会将这些信息传递给别的BGP speaker

1.1.1 MP_REACH_NLRI属性

       此属性类型码为14,是一个可选非转发属性,用于以下场合:

(a)    通告一个可用路由给邻居;

(b)    允许一个路由器通告它的网络层地址,网络层地址就像下一跳信息一样用来指示被列在MP_NLRI属性的网络层可达信息域中的目的地。

(c)    准许一个给定的路由器报告存在于本地系统中的部分或者全部附属子网点信息(Subnetwork Points of AttachmentSNPAs

MP_REACH_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)

Number of SNPAs (1 octet)

Length of first SNPA(1 octet)

First SNPA (variable)

Length of second SNPA (1 octet)

Second SNPA (variable)

……

Length of Last SNPA (1 octet)

Last SNPA (variable)

Network Layer Reachability Information (variable)

MP_REACH_NLRI属性的编码示意图

介绍每一个字段的用法与意义如下:

Address Family Identifier(地址族标识)

           这个字段携带网络层协议与网络地址的连接标识。目前这个字段定义的值在RFC1700中指定(参见Address Family Numbers部分)。

Subsequent Address Family Identifier(并发地址族标识)[kernix3] 

           本字段携带包含在属性中的网络层可达信息(NLRI)类型的补充信息。

     Length of Next Hop Network Address(下一跳地址长度)

           一个字节长度的下一跳地址长度字段,表明了下一跳地址的长度。

       Network Address of Next Hop(下一跳地址)

            本字段长度可变,包含了到达目的系统的下一个路由器的地址。

       Number of SNPAsSNPA的数目)

一个字节,包含了SNPA的确切数目,如果为0值则表明在这个属性里面包括没有任何SNPA

Length of Nth SNPA(第NSNPA的长度)

           一个字节长度,表示了“下一跳信息中第NSNPA”的长度。

    Nth SNPA of Next Hop(第NSNPA

可变长度区域,包含了由“Network Address of Next Hop”域指定地址的路由器的一个SNPA。区域的长度为整数个字节,即对SNPA的长度半值(半个字节)进行向上取整;如果SNPA包含了奇数个半字 节,那么对该值进行全零的半字节补齐。

Network Layer Reachability Information(网络层可达信息)

可变长度区域,列出了将在本属性中被通告的可用路由的NLRI信息。当并发地址族标识(Subsequent Address Family Identifier)域被设置为RFC2858中定义的某个值时,所有NLRI将会按照“NLRI encoding”中指定的方式进行编码处理。

       Next-Hop信息包含在MP_REACH_NLRI属性中,当通告一个MP_REACH_NLRI属性到一个外部“对端”时,路由器将设置本地地址为此路由的Next-Hop

如果一条路由是由某个BGP speaker发起的,那么它不能通告一个“对端”的地址到下一跳“对端”。BGP speaker也不能接受一条将自己认为是下一跳的路由(以免出现路由环路)。

BGP speaker通告路由到一个内部“对端”的时候,它不能修改这条路由的下一跳信息。当BGP speaker接收一条经由内部链路的路由时,如果包含在这个属性中的下一跳地址与本地以及远程BGP speaker是在同一子网,那么它就有可能转发数据包到下一跳。

携带MP_REACH_NLRI属性的UPDATE消息必须同样携带ORIGINAS_PATH属性(存在于EBGPIBGP交换中)。而且,在IBGP交换这样一个消息时,还必须携带LOCAL_PREF属性。如果这个消息时来自于外部“对端”,本地系统应该检查在AS_PAHT属性最左边标记的AS是否与发送这个消息的“对端”的AS号码相等。否则本地系统应该发送携带错误码为UPDATE消息出错的NOTIFICATION消息,错误子码应该设置为错误AS_PATHMalformed AS_PATH)。

拥有MP_REACH_NLRI属性的Update报文中不再承载原来的那种NLRI,也不再拥有NEXT-HOP属性,如果一个路由器接受到报文中包含由NEXT-HOP属性,也应该将其忽略。

1.1.2 MP_UNREACH_NLRI属性

       此属性类型码为15,是一个可选非转发属性,用于撤销多个不可用路由的场合:

       属性字段示意如下

 

Address Family Identifier (2 octets)

Subsequent Address Family Identifier (1 octet)

Withdrawn Routes (variable)

MP_UNREACH_NLRI属性结构示意

各个字段的用法与含义如下:

Address Family Identifier(地址族标识)

本字段携带与下层NLRI相关的网络层协议标识。目前这个字段定义的值在RFC1700中指定(参见Address Family Numbers部分)。

Subsequent Address Family Identifier(并发地址族标识)

              本字段携带包含在属性中的网络层可达信息(NLRI)类型的补充信息。

Withdrawn Routes(撤销路由)

可变长度区域。列出将要被从服务中撤销的路由的NLRI。当并发地址族标识域被设置为本文档定义的某个值,每条NLRI都按照“NLRI encoding”一节中指定的方式进行编码处理。

包含有MP_UNREACH_NRLI属性的UPDATE消息并不被要求携带其他路径属性。

1.1.3 NLRI Encoding处理

网络层可达信息被编码成一个或者若干个类似于的二元组,描述如下:

 

Length (1 octet)

Prefix (variable)

 

每个字段域的用法和意义如下所示:               

    Length(长度)

           Length字段按位指出地址前缀的长度。如果是全零,那么表示匹配所有地址。

    Prefix(前缀)[kernix4] 

            Prefix字段包含一个地址前缀,按位补齐成完整字节。填充位不影响前缀的真实值。

1.1.4 错误处理

       如果收到来自一个邻居的包含MP_REACH_NLRI或者MP_UNREACH_NLRI属性    Update消息,而且这个BGP speaker确定这个属性是不正确的,那么BGP speaker应该删除从这个AFI/SAFI值与携带错误MP_REACH_NLRI或者MP_UNREACH_NLRI属性一样的邻居收到的所有BGP路由。在BGP回话持续时间中若是收到这种Update消息,那么BGP speaker应该忽略所有在会话中收到的错误AFI/SAFI并发路由。

       另外,如果收到这种Update消息,BGP speaker可能会中止BGP会话过程。MOTIFICATION消息的指示的错误码、错误子码分别设为“Update Message Error”和“Optional Attribute Error”。

1.1.5使用BGP能力通告(Capability Advertisement)

       应用了多协议扩展的BGP speaker应该使用能力通告过程[BGP-CAP]来测定speaker是否能够和一个特定对端使用多协议扩展的方法。

       能力可选参数域的设置为:Capability Code被设置为1(指明多协议扩展能力)。Capability Length被设置为4

       Capability值域定义如下:

 

AFI(2 Octets)

Res.(1 Octet)

SAFI(1 Octet)

 

AFI  地址族标识符(16位),编码方式同多协议扩展中所设置。

     Res.  保留(8位)区域。发送方应当设其值为0,接收方则忽略它。

     SAFI 并发地址族标识符(8位),编码方式同多协议扩展中所设置。

为了能够在一对BGP speaker之间为特定双向交换路由信息,每个BGP speaker都应该通告对方(通过能力通告机制):我支持这种特别的路由!

1.2 针对BGP/MPLS VPN所进行的扩展方案

1.2.1 BGP/MPLS VPN概述

RFC 2547bis定义了一种机制,允许服务供应商使用自己的IP骨干,为客户提供VPN服务。RFC 2547bis VPN也称为BGP/MPLS VPN,因为它使用BGPVPN路由信息分布到供应商的骨干中,并使用MPLSVPN流量从一个站点转发到另一个站点上。

这种方法的主要目标是:

l         极大地简化服务,即使客户缺乏IP路由经验,客户仍可以使用这些服务

l         实现极高的服务扩充能力和灵活性,便于大规模部署

l         允许服务供应商自己或由服务供应商和客户一道创建VPN的策略

l         允许服务供应商提供关键增值服务,以提高客户忠诚度

对于BGP/MPLS VPN的架构,IETF设立了专门的drift进行讨论,最新的成果在draft-ietf-ppvpn-rfc2547bis-01中,此drift发布于20035月,其中大部分操作应该可以设立为标准。

对于BGP/MPLS VPN的详细介绍及其部署请查看RFC2547bis。本文中只介绍与MP-BGP相关的部分。

1.2.2 VPN-IPv4地址结构

       VPN客户经常管理自己的网络,并使用RFC 1918专用地址空间。如果客户没有使用全球唯一的IP地址,那么可以使用相同的32IPv4地址,识别不同VPN中的不同系统,这会导致路由困难,因为BGP假设它携带的每个IPv4地址都是全球唯一的。为了解决这个问题,BGP/MPLS VPN支持一种机制,通过使用VPN-IPv4地址家族及部署多协议BGP扩展(MP-BGP),把非唯一的IP地址转换成全球唯一的地址。

       重叠地址空间提出的一个挑战是,如果传统BGP看到同一个IPv4地址前缀有两条不同的路由(前缀被分配给不同VPN中的系统)BGP将像仅有一条路由一样处理前缀。结果,有一个VPN系统是不可达的。解决这个问题要求一种机制,允许BGP消除前缀歧义,这样就可以安装两条到达该地址的完全不同的路由,每个VPN一条。通过定义VPN-IPv4地址家族,RFC 2547bis支持这种功能。

       VPN-IPv4地址一共12字节,包括8字节的RD(Route Distinguisher)4字节的IPv4地址前缀。下图说明了VPN-IPv4地址结构:

VPN-IPv4地址结构

       8字节的RD2字节的类型字段和8字节的值字段构成,值字段的解释取决于类型字段的值,目前类型字段定义了三种值:012

(1)    当类型字段值为0时,值字段由两个子字段组成:

l         管理者子字段:2字节

l         分配编号子字段:4字节

管理者子字段必须包含一个自治系统编号(ASN),如果这个ASN取自公共ASN空间,它必须由适当的权威机构分配;分配编号子字段包含一个编号,这个编号取自企业所管理的编号空间,而企业已经由适当的权威机构分配管理者字段所指定的ASN

(2)    当类型字段值为1时,值字段也由两个子字段组成:

l         管理者子字段:4字节

l         分配编号子字段:2字节

管理者子字段必须包含一个IP地址,如果这个IP地址取自公共的IP地址空间,它必须由一个适当的权威机构分配;分配编号子字段包含一个编号,这个编号取自企业所管理的编号空间,而企业已经分配了管理者子字段所指定的IP地址。

(3)    当类型字段值为2时,两个子字段的结构如下:

l         管理者子字段:4字节

l         分配编码子字段:2字节

管理者子字段包含4字节长度的BGP-AS4[kernix5] 号,如果这个ASN取自公共ASN空间,它必须由适当的权威机构分配;分配编号子字段包含一个编号,这个编号取自企业所管理的编号空间,而企业已经由适当的权威机构分配管理者字段所指定的ASN

       RD的这种结构保证提供VPN主干网服务的服务提供者能够生成唯一的RD,但是这种RD本身没有特别意义。

1.2.3 MP-BGPVPN-IPv4的支持

       PE之间建立了初始VRFLSP之后,他们各自向自己的BGP“对端”公告路由信心。在公告路由信息时,先将路由的IPv4地址前缀转换成VPN-IPv4地址前缀格式,VPN-IPv4地址前缀中的RD在配置VRF时指定。PE在向BGP“对端”公告路由信息的时候,每条路由(MP-BGP路由)中应包含如下内容:

l         路由的VPN-IPv4地址前缀(8字节RD4字节IPv4地址前缀

l         PE自身的IP地址作为路由的MP-BGP下一跳LSR地址,由于MP-BGP要求下一跳LSR地址采用相同的地址格式,所以MP-BGP下一跳LSR地址的格式为RD=0VPN-IPv4地址

l         PE分配给该路由的标签

l         包含该路由的VRF的输出路由目标(RT),该输出路由目标作为该路由的一个地址属性[kernix6] 

l         有可能[kernix7] 包含该路由的ORIGINAS_PATH属性

VPN-IPv4地址前缀结构在前面已经描述过,他将被编码后封装在MP_REACH_NLRINLRI字段里面。

BGP多协议扩展编码NLRIAFI字段值为1(因为和NLRI相关联的网络层协议仍然是IP),表明承载VPN-IPv4地址。

同时MP-BGP路由还需要承载PE分配给该路由的标签,这个标签同样也封装在NLRI字段里面,这样改进了RFC2858中的NLRI Encoding格式,转换成一个格式的三元组。根据RFC3107Carrying Label Information in BGP-4)的描述,可以携带一个或者多个Label,每个标签都只有3个字节长度,高20位承载标签值,低4位中3位被保留,最后一位S位)设置为1时标识已经到达标签栈栈底。(此时的标签编码格式略不同于标准的MPLS标签,不需要包含TTL字段

MP-BGP承载Label的时候,MP_REACH_NLRISAFI字段用于指出属性携带有Label信息(SAFI的值设置为4)。

PE可能分发出现在VRF中的所有路由,也可能现对这些路由进行聚合,然后分发聚合的路由。假定PE已经对路由R分配了标签L,并且通过BGP分发了这种标签映射,当路由RVRF中多条路由聚合后产生的路由,PE通过查找相应的VRF才能最终确定如何转发该报文,报文所携带的标签用于确定查找最终路由的VRF,标签信息库反映了标签和VRF的对应关系;如果R不是一条聚合路由,标签信息库中直接给出报文的输出接口及链路层封装类型,这种情况下,不需要再查找VRF

综合前面两点,NLRI Encoding的最后格式应当为:

Length(1 Octet)