来自当知百科
跳转到: 导航搜索

目录

定义

  BGP(Border GatewayProtocol)是一种在自治系统之间动态交换路由信息的路由协议。一个自治系统的经典定义是在一个管理机构控制之下的一组路由器,它使用IGP和普通度量值向其他自治系统转发报文。

  在BGP中使用自治系统这个术语是为了强调这样一个事实:一个自治系统的管理对于其他自治系统而言是提供一个统一的内部选路计划,它为那些通过它可以到达的网络提供了一个一致的描述。

  BGP,边界网关协议,是自主网络系统中网关之间交换器路由信息的协议。边界网关协议常常应用于互联网的网关之间。路由表包含已知路由器的列表、路由器能够达到的地址以及到达每个路由器的路径的跳数。

  使用边界网关协议的主机一般也使用传输控制协议(TCP)。当网络检测到某台主机发出变化时,就会发送新的路由表。BGP-4,边界网关协议的最新版本,允许网络管理员在策略描述下配置跳数的规格。

扩展

  BGP是一种不同自治系统的路由器之间进行通信的外部网关协议。BGP是ARPANET所使用的老EGP的取代品。RFC1267[LougheedandRekhter1991]对第3版的BGP进行了描述。

  RFC1268[RekhterandGross1991]描述了如何在Internet中使用BGP。下面对于BGP的大部分描述都来自于这两个RFC文档。同时,1993年开发第4版的BGP(见RFC1467[Topolcic1993]),以支持CIDR

  BGP系统与其他BGP系统之间交换网络可到达信息。这些信息包括数据到达这些网络所必须经过的自治系统AS中的所有路径。这些信息足以构造一幅自治系统连接图。然后,可以根据连接图删除选路环,制订选路策略

  首先,将一个自治系统中的IP数据报分成本地流量和通过流量。在自治系统中,本地流量是起始或终止于该自治系统的流量。也就是说,其信源IP地址或信宿IP地址所指定的主机位于该自治系统中。其他的流量则称为通过流量。在Internet中使用BGP的一个目的就是减少通过流量。

  可以将自治系统分为以下几种类型:1) 残桩自治系统(stubAS),它与其他自治系统只有单个连接。stubAS只有本地流量。2)多接口自治系统(multihomedAS),它与其他自治系统有多个连接,但拒绝传送通过流量。3)转送自治系统(transitAS),它与其他自治系统有多个连接,在一些策略准则之下,它可以传送本地流量和通过流量。

  这样,可以将Internet的总拓扑结构看成是由一些残桩自治系统、多接口自治系统以及转送自治系统的任意互连。残桩自治系统和多接口自治系统不需要使用BGP——它们通过运行EGP在自治系统之间交换可到达信息。

  BGP允许使用基于策略的选路。由自治系统管理员制订策略,并通过配置文件将策略指定给BGP。制订策略并不是协议的一部分,但指定策略允许BGP实现在存在多个可选路径时选择路径,并控制信息的重发送。选路策略与政治、安全或经济因素有关。

  BGP与RIPOSPF的不同之处在于BGP使用TCP作为其传输层协议。两个运行BGP的系统之间建立一条TCP连接,然后交换整个BGP路由表。从这个时候开始,在路由表发生变化时,再发送更新信号。

  BGP是一个距离向量协议,但是与(通告到目的地址跳数的)RIP不同的是,BGP列举了到每个目的地址的路由(自治系统到达目的地址的序列号)。这样就排除了一些距离向量协议的问题。采用16bit数字表示自治系统标识。

  BGP通过定期发送keepalive报文给其邻站来检测TCP连接对端的链路或主机失败。两个报文之间的时间间隔建议值为30秒。应用层的keepalive报文与TCP的keepalive选项是独立的。

详解

背景

  路由包括两个基本的动作:确定最佳路径和信息群(通常称为分组)通过网络的传输。通过网络传输分组相对较简单,而路径的确定复杂。BGP就是当今网络中实现路径选择的一种协议。下面简述BGP的基本操作,并提供其协议组件的描述。

  BGP在TCP/IP网中实现域间路由。BGP是一种外部网关协议(EGP),即它在多个自治系统或域间执行路由、与其它BGP系统交换路由和可达性信息。

  BGP设计用以代替其前身(现在已不用了)外部网关协议(EGP)作为全球因特网的标准外部网关路由协议。BGP解决了EGP的严重问题,能更有效地适应因特网的飞速发展。

  下面是核心路由器用BGP在AS间路由数据的示意图。
bgp

  BGP在多个RFC中规定:RFC1771 - 描述了BGP4,即BGP的当前版本。 RFC1654 - 描述了第一个BGP4规范。RFC1105,RFC1163和RFC1267 - 描述了BGP4之前的BGP版本。

操作

  BGP执行三类路由:AS间路由、AS内部路由和贯穿AS路由。

  AS间路由发生在不同AS的两个或多个BGP路由器之间,这些系统的对等路由器使用BGP来维护一致的网络拓扑视图,AS间通信的BGP邻居必须处于相同的物理网络。因特网就是使用这种路由的实例,因为它由多个AS(或称管理域)构成,许多域为构成因特网的研究机构、公司和实体。BGP经常用于为因特网内提供最佳路径而做路由选择。

  AS内部路由发生在同一AS内的两个或多个BGP路由器间,同一AS内的对等路由器用BGP来维护一致的系统拓扑视图。BGP也用于决定哪个路由器作为外部AS的连接点。再次重申,因特网提供了AS间路由的实例。一个组织,如大学,可以利用BGP在其自己的管理域(或称AS)内提供最佳路由。BGP协议既可以提供AS间也可以提供AS内部路由。

  
bgp
贯穿(pass-through)AS路由发生在通过不运行BGP的AS交换数据的两个或多个BGP对等路由器间。在贯穿AS环境中,BGP通信既不源自AS内,目的也不在该AS内的节点,BGP必须与AS内使用的路由协议交互以成功地通过该AS传输BGP通信,下图所示为贯穿AS环境:

路由

  与其它路由协议一样,BGP维护路由表、发送路由更新信息且基于路由metric决定路由。BGP系统的主要功能是交换其它BGP系统的网络可达信息,包括AS路径的列表信息,此信息可用于建立AS系统连接图,以消除路由环,及执行AS策略确定。

  每个BGP路由器维护到特定网络的所有可用路径构成的路由表,但是它并不清除路由表,它维持从对等路由器收到的路由信息直到收到增值(incremental)更新。

  BGP设备在初始数据交换和增值更新后交换路由信息。当路由器第一次连接到网络时,BGP路由器交换它们的整个BGP路由表,类似的,当路由表改变时,路由器发送路由表中改变的部分。BGP路由器并不周期性发送路由更新,且BGP路由更新只包含到某网络的最佳路径。

  BGP用单一的路由metric决定到给定网络的最佳路径。这一metric含有指定链路优先级的任意单元值,BGP的metric通常由网管赋给每条链路。赋给一条链路的值可以基于任意数目的尺度,包括途经的AS数目、稳定性、速率、延迟或代价等。

BGP消息类型

  RFC1771中规定了四种BGP消息类型:初始(open)消息,更新消息、通知消息和keep-alive消息。

  初始消息在对等路由器间打开一个BGP通信会话,是建立传输协议后发送的第一个消息,初始消息由对等设备发送的keep-alive消息确认,且必须得到确认后才可以交换更新、通知和keep-alive消息。

  更新消息用于提供到其它BGP系统的路由更新,使路由器可以建立网络拓扑的一致视图。更新用TCP发送以保证传输的可靠性。更新消息可以从路由表中清除一条或多条失效路由,同时发布若干路由。

  通知消息在检查到有错误时发送。通知消息用于关闭一条活动的会话,并通知其它路由器为何关闭该会话。

  keep-alive消息通知对等BGP路由器该设备仍然alive。keep-alive消息发布足够频繁以防止会话过期。

分组格式

  简述BGP初始、更新、通知和keep-alive消息类型及基本的BGP信头格式。

  1、信头格式

  
bgp
所有的BGP消息类型都使用基本的分组信头。初始、更新和通知消息有附加的域,而keep-alive消息只使用基本的分组信头。下图为BGP信头使用的域:

  每个BGP分组都包含信头,其主要目的是标识该分组的功能。下面简述信头中的每个

  标记 - 含有认证值。 长度 - 指示消息的总长度,以字节计。 类型 - 标识消息类型为下列类型之一:

  初始 更新 通知 keep-alive 数据:为可选域,含有上层信息。

  2、初始消息格式

  
bgp
BGP初始消息由BGP信头和附加域构成,下图为BGP初始消息的附加域:

  在信头的类型域中标识为BGP初始消息的BGP分组包含下列各域,这些域为两个BGP路由器建立对等关系提供了交换方案:

  版本 - 提供BGP版本号,使接收者可以确认它是否与发送者运行同一版本协议。 自治系统 - 提供发送者的AS号。 保持时间(Hold-time) -在发送者被认为失效前最长的不接收消息的秒数。 BGP标识 -提供发送者的标识(IP地址),在启动时决定,对所有本地接口和所有对等BGP路由器而言都是相同的。 可选参数长度 -标识可选参数域的长度(如果存在的话)。 可选参数 -包含一组可选参数。目前只定义了一个可选参数类型:认证信息。认证信息含有下列两个域:认证码:标识使用的认证类型。认证数据:包含由认证机制使用的数据。

  3、更新消息格式

  
bgp
BGP更新消息由BGP信头和附加域构成,下图为BGP更新消息的附加域:

  收到更新消息分组后,路由器就可以从其路由表中增加或删除指定的表项以保证路由的准确性。更新消息包含下列域:

  失效路由长度 - 标识失效路由域的总长度或该域不存在。 失效路由 - 包含一组失效路由的IP地址前缀。 总路径属性长度 - 标识路径属性域的总长度或该域不存在。 路径属性- 描述发布路径的属性,可能的值如下:

  源:必选属性,定义路径信息的来源。 AS路径:必选属性,由一系列AS路径段组成。下一跳:必选属性,定义了在网络层可达信息域中列出的应用作到目的地下一跳的边缘路由器的IP地址。多重出口区分:可选属性,用于在到相邻AS的多个出口间进行区分。 本地优先权:可选属性,用以指定发布路由的优先权等级。 原子聚合:可选属性,用于发布路由选择信息。聚合:可选属性,包含聚合路由信息。 网络层可达信息 - 包含一组发布路由的IP地址前缀。

  4、通知消息格式:

  
bgp
下图为BGP通知消息使用的附加域:

  通知消息分组用于给对等路由器通知某种错误情况。

  错误码 - 标识发生的错误类型。下面为定义的错误类型:

  消息头错:指出消息头出了问题,如不可接受的消息长度、标记值或消息类型。

  初始消息错:指出初始消息出了问题,如不支持的版本号,不可接受的AS号或IP地址或不支持的认证码。

  更新消息错:指出更新消息出了问题,如属性列表残缺、属性列表错误或无效的下一跳属性。

  保持时间过期:指出保持时间已过期,这之后BGP节点就被认为已失效。

  有限状态机错:指示期望之外的事件

  终止:发生严重错误时根据BGP设备的请求关闭BGP连接。

  错误子码 - 提供关于报告的错误的更具体的信息。

  错误数据 - 包含基于错误码和错误子码域的数据,用于检测通知消息发送的原因。

同步规则

BGP同步及其基本需求

  1.BGP同步规则的定义:

  在bgp同步打开的情况下,一个BGP路由器不会把那些通过ibgp邻居学到的bgp路由通告给自己的ebgp邻居;除非自己的igb路由表中存在这些路由,才可以向ebgp路由器通告.

  2.BGP同步规则的目的:

  防止一个AS(不是所有的路由器都运行bgp)内部出现路由黑洞,即向外部通告了一个本AS不可达的虚假的路由.

  
BGP同步规则的拓扑示意
3.BGP同步规则的基本需求

  如果一个AS内部存在非bgp路由器,那么就出现了BGP和IGP的边界,需要在边界路由器将BGP路由发布到igp中,才能保证AS所通告到外部的BGP路由在AS内部是连通的.实际上是要求BGP路由和igp路由的同步.

  4.满足BGP同步规则的基本需求的结果

  如果将BGP路由发布到igp中,由于BGP路由主要是来自AS外部的路由(来自internet),那么结果是igp路由器要维护数以万计的外部路由,对路由器的CPU和memeory以及AS内部的链路带宽的占用将带来巨大的开销.

  5.结论

  通常BGP协议的运行需要关闭同步.

BGP同步的解决方案

  1.full mesh iBGP解决方案

  AS内部的所有路由器都运行full mesh iBGP,就可以关闭所有路由器的同步而不影响路由的通告和连通性.

  问题:

  
Full-Mesh IBGP 拓扑示意
当AS内部路由器数量很多时,需要建立N*(N-1)/2个ibgp会话,带来过度的系统开销,扩展性不好.

  Full-Mesh IBGP 拓扑示意:15个路由器的AS,需要建立15(15-1)/2=105个ibgp会话

  2.路由反射器解决方案

  AS内部的所有路由器都运行bgp,在AS内部部署路由反射器,构建hub and spoke的ibgp(会话数为N-1),然后关闭所有bgp路由器的同步.

  问题:

  此方案可以使bgp路由器传递ibgp路由到ebgp, 并保证bgp路由的连通性.但是对物理拓扑有很大的限制(要求是星型拓扑)

  3.bgp联盟解决方案:

  
Bgp路由反射器设计拓扑
AS内部的所有路由器都运行bgp,把一个原始的AS基于网络拓扑划分为若干个sub-AS(又称联盟AS),联盟AS之间的bgp邻居叫做联盟ebgp,不需要full mesh bgp会话;在每个联盟AS内部运fullmesh ibgp或者hub and spoke反射器,然后就可以关闭所有路由器的bgp同步功能.

  结论:

  bgp联盟结合路由反射器的方式较好的解决了bgp的同步规则带来的需求,是最为有效的解决方案.

BGP同步规则的总结

  
bgp联盟拓扑示意图
1.在所有的方案中, 既要保证传递bgp路由,还要保证bgp路由的连通性.

  2.关闭同步能够实现bgp路由的传递,不一定能保证as内部连通性,除非as内所有路由器都运行bgp才可以保证连通性;否则,仍然需要路由再发布(bgpàigp)

  3.最后,在as内部一般需要部署igp来维持AS内部网络路径的连通性,以保证as内部的所通告的bgp路由的下一跳的可达性.这样bgp网络就具有更好的灵活性和扩展性.

协议分析

  BGP是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息。与OSPF和RIP等在自治区域内部运行的协议对应,BGP是一类EGP(Edge Gateway Protocol)协议,而OSPF和协议。

  BGP是在EGP应用的基础上发展起来的。EGP在此以前已经作为自治区域间的路由发现协议,广泛应用于NFSNET等主干网络上。但是,EGP被路由环路问题所困扰。BGP通过在路由信息中增加自治区域(AS)路径的属性,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的策略。同时,随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,都影响了网络的性能。BGP支持无类型的区域间路由CIDR(ClasslessInterdomain Routing),可以有效的减少日益增大的路由表。

  BGP运行时刻分别与本自治区域外和区域内的BGP伙伴建立连接(使用Socket)。与区域内伙伴的连接称为IBGP(InternalBGP)连接,与自治区域外的BGP伙伴的连接称为EBGP(ExternalBGP)连接。本地的BGP协议对IBGP和EBGP伙伴使用不同的机制处理。

BGP协议的层次位置

  BGP使用Socket服务建立连接,端口号为179。

BGP的消息结构

  BGP有4种类型的消息。分别为OPEN,UPDATE,KEEPALIVE和NOTIFY。它们有相同的消息头

  ⑴消息头结构:

  Marker : (16字节) 鉴权信息

  Length : (2字节) 消息的长度

  Type : (1字节) 消息的类型

  0 :OPEN

  1 :UPDATE

  2 :NOTIFICATION

  3 :KEEPALIVE

  ⑵OPEN消息结构:

  消息头加如下结构 :

  Version :(1字节) 发端BGP版本号

  My Autonomous System :(2字节无符号整数) 本地AS号

  Hold Time :(2字节无符号整数) 发端建议的保持时间

  BGP Identifier :(4字节) 发端的路由器标识符

  OptParmLen :(1字节) 可选的参数的长度

  Optional Parameters :(变长) 可选的参数

  ⑶KEEPALIVE消息结构

  KEEPALIVE消息只有一个消息头。

  ⑷NOTIFY消息结构

  消息头加如下结构:

  Errsubcode :(1字节) 辅助错误代码,略。

  Data :(变长) 依赖于不同的错误代码和辅助错误代码。用于诊断错误原因。

  ⑸UPDATE消息结构

  消息头加如下结构:

  Unfeasible Routes Len :(2字节无符号整数) 不可达路由长度

  Withdrawn Routes :(变长) 退出路由

  Path Attribute Len :(2字节无符号整数) 路径属性长

  Path Attributes :(变长) 路径属性(以下详细说明)

  Network Layer Reachability Information :(变长) 网络可达信息(信宿)

  其中退出路由和信宿地址的表示方法为一 的二元组。length一个字节,指示地址前缀的长度。prefix为地址前缀,长度1至4字节。

BGP路径的属性

  每个路径属性由1字节的属性标志位,1字节的属性类型,1或2字节路由属性长度和路径属性数据组成。

  属性标志位:

  位0:0 表示此属性必选,1 表示此属性可选。

  位1:0 表示此属性为非过渡属性,1表示此属性为过渡属性。

  位2:0 表示所有属性均为路由起始处生成,1 表示中间AS加入了新属性。

  位3:0 表示路由属性长度由1字节指示,1表示由2字节指示。

  位4至位7:未用置0

  位0和位1标识了BGP的4类路由属性:

  (01)公认必选:BGP的UPDATE报文中必须存在的属性。它必须能被所有的BGP工具识别。公认必选属性的丢失意味着UPDATE报文的差错。这是为了保证所有的BGP工具统一于一套标准属性。

  (01) 公认自决:能被所有BGP识别的属性,但在UPDATE报文中可发可不发

  (11)可选过渡:如果BGP工具不能识别可选属性,它就去找过渡属性位。如果此属性是过渡的,BGP工具就接受此属性,并把它向前传递给其它BGP路由器。

  (10) 可选非过渡:当可选属性未被识别,且过渡属性也未被置位时,此属性被忽略,不传递给其它BGP路由器。

路由属性类型

  ⑴ORIGIN (Type Code = 1,公认必选属性)

  指示此路由起始类型:

  ⑵AS_PATH (Type Code = 2,公认必选属性)

  AS路径属性由一系列AS路径段(Segment)组成。每个AS路径段为一三元组。

  路径类型有:

  路径段长度用1字节表示AS号的数量,即最长为255个AS号。

  路径值为若干AS号,每个AS号为2字节。

  ⑶NEXT_HOP (Type Code = 3,公认必选属性)

  此属性为UPDATE消息中的信宿地址所使用的下一跳。

  ⑷MULTI_EXIT_DISC (Type Code = 4,公认自决属性)

  简称MED属性。为一4字节无符合整数。它在AS区域间传播,用来帮助一个其它AS区域的BGP伙伴选择进入本AS区域的人口。

  ⑸LOCAL_PREF (Type Code = 5,公认自决属性)

  本地优先级属性。为一4字节无符合整数。它在AS区域内传播,用来帮助一个本AS区域内BGP伙伴选择进入其它AS区域的出口。

  ⑹ATOMIC_AGGREGATE (Type Code = 6,公认自决属性)

  元聚合属性。长度为零。它表示本地BGP在若干路由中选择了一个较抽象的(lessspecific)路由,而没有选择较具体(specific)的路由。

  ⑺AGGREGATOR (Type Code = 7,可选过渡属性)

  聚合者属性。长度为6字节,分别为最后进行路由聚合的路由器的AS号(2字节)和IP地址(4字节)。

BGP协议的特点

  BGP是一种AS(自治区域)外部路由协议,主要负责本自治区域和外部的自治区域间的路由可达信息的交换。因此,它所关心的拓扑结构是AS(自治区域)的拓扑结构,BGP通过UPDATE消息中路由的AS属性来构造AS的拓扑结构图,进一步通过此结构图来选择路由。

  与OSPF,RIP等IGP协议相比,BGP的拓扑图要更抽象和粗略一些。因为IGP协议构造的是AS内部的路由器的拓扑结构图。IGP把路由器抽象成若干端点,把路由器之间的链路抽象成边,根据链路的状态等参数和一定的度量标准,每条边配以一定的权值,生成拓扑图。根据此拓扑图选择代价(两点间经过的边的权值和)最小的路由。这里有一个假设,即路由器(端点)转发数据包是没有的代价的。而在BGP中,拓扑图的端点是一个AS区域,边是AS之间的链路。此时,数据包经过一个端点(AS自治区域)时的代价就不能假设为0了,此代价要由IGP来负责计算。这体现了EGP和IGP是分层的关系。即IGP负责在AS内部选择花费最小的路由,EGP负责选择AS间花费最小的路由。

  BGP作为EGP的一种,选择路由时考虑的是AS间的链路花费,AS区域内的花费(由BGP路由器配置)等因素。

  如上所述,内部网关协议IGP需引入AS自治区域内部网络拓扑图其它各点的路由,同时向其它端点发送本端点(路由器)所知的路由,如直接路由、静态路由等。作为外部网关协议,BGP发送和引入路由的单位是整个AS自治区域,即BGP要发送本地路由器所在的AS内部的所有路由,引入其它AS自治区域的所有路由(假设不使用路由策略控制发送和引入)。其路由数量显然要远远大于IGP发送和引入的路由数量。因此,类似于IGP那样定时对外广播路由信息是不可取的。BGP采用发送路由增量(Incremental)的方法,完成全部路由信息的通告和维护:初始化时发送所有的路由给BGP对端(BGPPeer),同时在本地保存了已经发送给BGP对端的路由信息。当本地的BGP收到了一条新路由时(如通过IGP注入了新路由或加入了新的静态路由),与保存的已发送信息进行比较,如未发送过,则发送,如已发送过则与已经发送的路由进行比较,如新路由花费更小,则发送此新路由,同时更新已发送信息,反之则不发送。当本地BGP发现一条路由失效时(如对应端口失效),如此路由已发送过,则向BGP对端发送一个退出路由消息。

应用

制约BGP扩展性的几个问题

  BGP是目前应用在因特网上的IP网络互联协议,为运营商之间的互联提供了稳定而安全的路由协议,具有丰富的路由控制机制。为了更好地控制路由策略,当前大部分的运营商均将BGP部署到骨干路由器。随着网络的不断扩展、路由器数目的增多以及路由信息条目的激增,解决BGP的扩展性问题变得越来越重要。

  目前BGP的扩展性面临如下几个问题。

  (1)I-BGP的Full-Mesh问题

  BGP路由协议分为I-BGP和E-BGP两个部分。I-BGP用于自治域内的路由器之间,E-BGP用于自治域间的路由器之间。为了防止产生环回路由,BGP协议要求一个路由器通过I-BGP学到的路由,不再向其他I-BGP邻居广播,所以一个自治域内所有参加I-BGP协议的路由器都要与其他路由器建立会话,从而保证路由信息能够正确地广播到每一个路由器。依照这个原则,一个自治域内总的I-BGP会话数为N×(N-1)/2(N为运行I-BGP的路由器数),当N不断增大时,这个数字会大得惊人:如100台路由器,则会话数为4950。这对网络设备而言是个非常大的负担,而且还将使网络的管理与配置变得异常复杂。而骨干网通常由大量的运行I-BGP的路由器组成,因此,这个问题是否能够解决,直接影响到网络规模的大小。

  (2)更改路由策略时路由振荡的问题

  BGP属于增量更新的路由协议,当有新的路由要发布时,路由器会向邻居发送Update信息,而如果要删除某条路由时,就会发送Withdraw信息。BGP路由的Flap的定义是:当一条路由在被收回(Withdraw)后,又被广播(Update)出来,视为一次Flap。由于任何一条路由的收回和更新都会导致一台路由器整个路由表重新计算,因此当Flap的情况比较多时,对路由器设备的负载将产生巨大的压力。根据笔者在实际工作中的经验,一般情况下,一台高端路由器在计算BGP路由的时候,CPU的负载基本上在80%~90%左右,有时甚至达到100%,占用了几乎所有的CPU资源。虽然目前大部分的高端路由器都将路由计算的模块与转发模块分布在不同的硬件上,来减少主CPU忙导致的路由器性能下降的问题,但是路由表的频繁变化和更新,对整个设备的运行还是有一定的影响的,而且这样的计算会随着路由的收回或广播,继续向自治域内部扩展,使内部的路由器产生同样的问题。

  (3)其他需要考虑的问题

  除了上面的两个问题会导致对路由器资源过量消耗之外,还有其他的一些因素,如路由的数目、BGP路由表的大小和路由计算的方式等,同样也会影响路由器的性能。

  另外,网络越大,路由条目越多,配置和管理的工作也就越复杂,这就需要在网络设计的时候尽量简化配置,降低管理人员的工作强度,避免人为原因造成故障。

如何解决制约BGP扩展性的问题

  针对以上问题,介绍一些相关的解决方法。

  (1)解决I-BGP会话数瓶颈的方法

  上面提到的I-BGP的会话数过多的问题,可以采取两种办法来解决:

  1)联盟的方法(Confederations)

  联盟的工作原理是:将原来一个自治域的网络分成多个子自治域,通过Confederationsid将原AS号配置到每个路由器上。这样有两个好处:一是可以保留原有的I-BGP属性,包括LocalPreference、MED和NEXT_HOP;二是能在Confederations的功能中自动实现,无需管理员在网络的出口处配置过滤内部AS号信息的操作。

  2)路由反射器(Route-Reflector)

  采用路由反射器是目前应用最广泛的方法,较之前面联盟的方法,具有更好的扩展性。路由反射器的工作原理是:将一个自治域内的路由器分成几个Cluster,每个Cluster由Reflector和Client组成。Reflector之间形成FullMesh,运行常规的I-BGP;Client只与Reflector运行I-BGP,对于Client来说,Reflector只是普通的邻居而已,Reflector则扮演了路由集散地的角色,将从其他Reflector学到的I-BGP路由转发给Client,同时,将从Client学到的I-BGP路由转发给Cluster内的其他Clients和Cluster外的其他Reflector,再借由Reflectors广播到其所在的Cluster。在实际的网络中,为了提高冗余度,通常一个Client与多个Reflector建立邻居关系,而且不局限于Client所在Cluster的Reflector。

  由此可见,Client上的I-BGP会话数一般为1~2个,与联盟的方法相比,只要Reflector的性能足够高,Cluster就可以做得很大,而Client的负载不会随Cluster的变化有太大的变化。对于前一种方法,由于一个子自治域的所有路由器还是要做到FullMesh,所以最低性能的路由器决定了一个子自治域的大小;而路由反射器法则通常是一个或多个最高性能的路由器决定Cluster的大小,因此,具有更好的网络扩展性能。

  另外,一个Reflector也可以成为另外一个Reflector的Client,形成层级结构,这特别适用于按照分层结构建设的网络,可以很容易地把平面的网络管理演变为分层管理。

  当然,在使用路由反射器的时候,也有一些需要注意的地方,比如:Reflector并不是纯粹的转发路由,所有收到的路由在Reflector上同样要经过最优计算,然后将优选路由向外广播,所以Reflector的选择要依据网络结构而定,尽量使I-BGP邻居关系与实际的电路连接关系相对应。

  (2)控制路由振荡

  目前,控制RouteFlap主要采取Damping的方法:一个BGP路由器对收到的E-BGP路由设定Penalty值,每一次路由Flap都会使该路由的Penalty值增大,而路由稳定时,Penalty值会随时间而减小;当Penalty值超过预设的抑制限制时,该路由就不再被广播,而当Penalty减小至低于重用限制时,该路由才会被重新向外广播。这种方法主要是针对E-BGP邻居而言的。这样,当一个网络内部发生路由振荡时,与之相连的其他网络通过Damping可以有效地防御对各自网络的影响。

  在网络维护中,经常会遇到这样的情况:宁愿一条电路中断一段时间,也不希望它在不停地震荡。因为中断一段时间后,只要电路恢复,网络流量也会随之恢复;与此相反,振荡的电路恢复后,需要等待一段时间才能恢复正常的流量(其他网络都在抑制振荡的路由)。Damping则可以有效地保证因特网的稳定,但同时也会导致一些故障的延时恢复。

  当前的设备基本都支持Damping的功能,而且提供可以配置的参数来精细控制Damping。一般情况下,设备提供的缺省配置能够满足大多数网络的需求,如果确有特殊需要,则一定要经过仔细计算,否则,不是没有效果,就是把别人的路由抑制后很长时间不能恢复。

  (3)Peer Group的应用

  在实际的网络中,有一种非常普遍的现象,即一个路由器会有多个属于一类的BGPPeer。这里的“属于一类”是指BGP的策略相同或类似,当Peer比较多时,BGP的配置会变得臃肿,同时,路由器的负载也会加重,因为一旦有路由的更新,路由器需要针对每个Peer做一次策略计算(虽然策略都相同)。另外,应用PeerGroup还有一个好处,就是降低了对路由器设备的资源消耗,因为路由器对同一Group更新路由时,由于使用相同策略,因此只进行一次路由计算,从而大大减少了占用CPU的时间。

  在实际的网络维护中,即使当同一类的Peer很少时,一般也建议采用Peer Group的方式,因为这样具有很好的扩展性。PeerGroup不但适用于I-BGP的Peer,也适用于E-BGP的Peer。

  (4)关于route refresh的措施

  骨干网络维护中,经常会遇到修改BGP策略的情况,如更新某个Peer的as-path限制列表,在配置修改后需要使其生效,以前的做法是中断当前的BGP会话,然后重新建立,命令如下:

  clear ip bgp x.x.x.x

  这么做主要是因为路由器在收到对方的BGP路由表后,先进行策略运算,然后将最优路由存储在本机的BGP路由表中,而不是把原始的路由统统保存。当策略改变时,必须重新建立连接来获得对方的全部路由,然后利用新策略再次计算。这种方式的弊端显而易见,如网络阻断、大量消耗路由器的CPU资源等。

  解决这个问题目前通常采用两种方法:一种方法是设法保存原始的BGP路由,这样,重新计算时就不需要重传了;另外一种方法是在启用新策略的时候,在不中断BGP会话的前提下,向对方请求重发全部BGP路由表。

  第一种方法是利用软件配置实现的,配置的命令如下:

  neighbor 1.1.1.1 soft-reconfiguration inbound

  在启用新策略的时候输入命令:

  clear ip bgp 1.1.1.1 soft [in|out]

  这样,所有的原始BGP路由就会被存储在另外一张路由表里面,在修改策略的时候,通过对这张路由表进行运算,就可以得到最优的BGP路由表,这样对路由产生的资源消耗较小;而且有这样一张原始的路由表,可以在修改策略后、正式启用之前使用命令来检查策略修改后的效果。但这种方法需要额外的内存资源来存储路由表。

  第二种方法是由路由器设备的BGP 能力(BGPCapabilities)决定的,也就是系统软件本身内置的功能模块。在建立BGP会话的时候,这个参数通过BGPOPEN在两个路由器间进行交换。一个设备是否支持BGP Refresh Capabilites,可以用命令下列来检查:

  show ip bgp n x.x.x.x

  如果参与BGP的两个路由器都具备这个功能,那么不需要任何配置,当执行clear ip bgp n x.x.x.x in时,本端BGP进程不会中断BGP会话,而是向对端请求重发全部的BGP路由表。相对于第一种方法,这种方法的好处是可以节省内存资源,缺点是网络管理员无法了解对方发过来的原始路由,而且重发了全部路由表,效率上也没有第一种方法高。目前骨干网内的设备基本上都支持这个功能。

总结

  以上对BGP扩展性相关的几个问题和相关的措施进行了论述,在实际的应用中还需要根据具体情况来部署。但是总的思路和原则都是一样的,即一方面要降低设备的资源消耗,另外一方面要简化维护管理,从硬件、软件两方面来提高网络的扩展性。

路由的优化

  
bgp
如果拥有多个互联网连接,就会知道仅仅简单使用边界网关协议(Border GatewayProtocol,BGP)很难得到最优的路由路径。在这点上,没有电信网络的7号信令系统精妙(Signaling System 7,SS7)。作为电讯网络的控制面,SS7在一次通话建立之前能够决定出最好的路径。互联网上没有这样的控制面,虽然BGP也能决定路由(这点与SS7相似),但它不是总能选择最好的路径。BGP在不打断内部或外部用户的情况下让边缘路由器通过一个首选的连接传输业务,如果首选连接失败则通过次选连接提供业务。

  当BGP选择一个路由时,如果能考虑到每个ISP连接所能提供路由通路的性能等因素的话,情况肯定会更好。

  RouteScience的PathControl是这样一种新产品,它不仅可以衡量通过每个BGP对等体的路由性能,还可以根据这些信息来改变通过BGP的优先路由。

PathControl勇挑重任

  PathControl 1.1运行在Linux上,提供独立的功能,一个用于报告,一个用于管理,还有一个给核心引擎,对于每个外部BGP对等体都有一个接口。

  PathControl 1.1提供了一个强健的Java程序工具。下一个版本将允许从GUI(图形用户界面)配置PathControl,但在目前的版本中必须通过基于IOS的命令行界面管理设备。

  PathControl所能提供的不只是连接性能和它们的相应通路等内部信息,还可以让你通过配置一些变量来控制使用那些连接。

  PathControl可被放置于边缘路由器之后的任何位置。对路由器的连接可以通过一个专用端口或一个通道连接建立,无论哪种方式,PathControl都需要对外部世界和边缘路由器进行访问。

测试见性能

  将PathControl直接连接到一个Cisco Catalyst 6500交换机上,交换机被配置为接收来自两个NortelWeb交换机(一台180e和一台AD4)的外部BGP输入数据。PathControl被设置与Cisco交换器对等,监视被每个Nortel设备声明的路由。PathControl可以保持在被动状态,监视并报告每个远程对等体的性能;它也可以被置于声明模式,这使它可以在确定了哪一条连接性能更好后,在边缘路由器上改变首选路由。

  用户可以配置PathControl更改路由的频度,使用户的边缘路由器不会被压制。最好让PathControl至少在被动模式下持续运行几天,使用报告发生器来观察PathControl声明一个新路由的频度,然后针对具体情况确定最佳的更改频度。

  PathControl用一个TCP握手的往返时间作为其性能度量的基础,经由HTTP向一台客户机发送一幅1x1像素的GIF图像来被动检索衡量性能的数据,还可通过探查用户设置的Web站点来进行主动检索。对于后者,PathControl打开一个到达某站点的TCP连接并测量完成三向TCP握手的时间。

  为实现被动测量,设备上的每一个测量接口都被配置一个虚拟IP地址(Virtual IPAddress,VIP)。当经由HTTP或HTTPS访问该地址时,返回一个1x1像素的GIF图像。PathControl直接提供这个GIF,测量与一台客户机建立起一个TCP通话的时间。只要将VIP地址嵌入进站点网页的一个HREF,一旦某台客户机发出对该页的请求,测量就开始。此中的关键是对基于策略路由的使用,该路由在边缘路由器上配置,根据源地址连贯地转送通讯数据。这样PathControl会连续测量每条路径的性能,而不必考虑路由表中的其它项。

  默认状态下PathControl为执行对数据的计算至少需要6次测量。计算过程赋予每条路径一个等级,该等级将用于确定哪条连接工作得更好。在默认状态下,如果两个或更多的等级被赋的数值差别不超过25点,它们都会被认为“更好”。如果某条连接的等级比另一条高出25点,则它被认为是“最好”的,PathControl会经由内部边界网关协议(interiorBGP,iBGP)向与之对等的边缘路由器声明这条路由。

ISP网内部署

  
bgp
随着INTERNET在中国的发展,ISP服务商与INTERNET的连接也在发生着变化。在网络连接上,从单一的连接,到通过多个电信公司多条线路连接到INTERNET;在所使用的路由协议方面,从使用的静态路由协议,发展到使用BGP(Bordergatewayprotocol)。那么ISP如何随着网络的发展,在网络内部合理有效地部署BGP路由协议呢?我们将在本文中简要的介绍一下。实际上,如何在网内部署BGP路由协议的主导思想也就是如何使自治域内部的路由器获得自治域外部路由信息,从而引导访问域外的流量流出自治域。

  从总体上,在域内部署BGP路由协议应考虑以下几点:

  1.网络实际的拓扑结构;

  2.设备性能是否满足启动BGP的要求,通常BGP的路由表非常庞大,以从50,000条增加到现在约100,000余条。这对路由器的内存及性能要求很高;

  3.在有多条INTERNET接入线路时,线路的备份流量的分布。

  以下将通过一些例子来具体说明这些问题。在继续讨论前,我们先提及几个概念:

  核心层:具有高速交换能力的骨干网络,位于网络的核心。

  分布层:在核心层的外围,通常用于实现各种路由策略或实施访问控制等功能。

  接入层:在网络的最外层,在该范围内的路由器是用户联入ISP的接入点。

  在网络发展初期,网络结构比较简单(如图一),ISP只有一条线路连接到INTERNET。通常人们不会在这种简单的网络结构中使用BGP,而会使用简单方便的静态路由进行互联。这样可以简化路由器配置,便于管理,同时降低对边界路由器的性能要求,减少成本。如果需要启用BGP,操作也很简单只需在路由器R1上启用BGP,并将R1作为网内其它路由器的缺省网关,从而达到将外部路由注入网内的目的。

  随着网络的近一步发展,ISP需要通过不同的网络提供商,通过多条线路与INTERNET连接,以保证网络的可靠性。这时BGP才有了真正的用武之地。在这种情况下,网络通常会出现以下几种结构。如图二,图三。两种网络结构看起来有些类似,图三中网络结构只是增加了一台路由器以排除图二中路由器R1产生单点故障的可能,但在如何部署BGP路由时却完全不同。

  在图二中只需在R1上配置BGP,并将R1作为网内其它路由器的缺省网关,并通过

  BGP路由协议所提供的Weight这个路由参数,调节网内流量在两条线路上的分布。这样即可实现线路的互为备份,又可有效的调节流量分布。

  有两台路由器拥有外部路由,通常为保证域内的路由一致性,需在图中路由器R1和R2之间建立IBGP连接,使其建立一致的BGP路由表。在这个过程中,也可人为的使用BGP路由协议所提供的Local-Preference这个路由参数,优化路由选择,以控制数据流量在线路上的分布。但如何将这些外部路由告知网内的其它路由器,简单的有以下两种方法:

  1.在网络结构相对简单时,网络没有分布层,核心层直接与接入层连接。这时接入层路由器往往不能在传输大量的用户数据的同时,满足启用BGP所需的性能要求。在这种情况下,只有依据流量的分布情况,将网内接入路由器划分组别,不同的组别将缺省网关指向不同的边界网关路由器。

  这种设计只能作为网络结构不完善,设备性能不高时的临时方案,不能作为永久性方案。因为它经常需要人为干预,依据网络流量变化情况重新划分路由器组别,否则会出现某一路由器负载过重,而另为一台负载较轻的情况,从而不能有效的使用设备资源。而且当互联的线路增多时,这种设计会面临更多的问题。

  2.最好的方法是首先要建立完善网络结构,网络结构应具备核心层,分布层和接入层。通过IBGP路由协议将外部路由注入到分布层路由器中,如图二中路由器R3,R4。进而将分布层的路由器作为某一区域接入层路由器的缺省网关,将通往域外的负载均匀的分布到各个分布层路由器上,从减少对具体某个路由器的压力。

  这种设计是网络结构日趋完善,网络规模日趋扩大的ISP最终的选择。

  最近CISCO公司有从另一角度提出一个部署BGP路由协议的新思路,使用IBGP作为内部路由协议,交换网内用户路由信息。及在网络的接入层路由器上启用IBGP路由协议,并将指向用户的静态路由分布到IBGP中。这主要是考虑,BGP路由协议在路由变动时,只更新发生变动的路由,不会象OSPF和ISIS,重新计算SPF数据库。因而利用BGP这一特性减少路由收敛时间,提高网络的稳定性。但在使用这种方法时,应注意BGP对路由器性能的要求,应避免将外部路由注入到接入层路由器中,导致路由器工作性能下降。

  综上所述,我们简单讨论了如何在ISP的网络上部署BGP路由协议。实际上,BGP的应用重点和优势在于其对路由信息的控制能力,从而达到对数据流量的控制和分配。这是一项非常复杂的工作,要依据具体的情况而定,在本文就不多谈了。但有一点需要注意,仅仅依靠BGP自身的手段来满足各种不同的实际需要是不可行的,还需与互联伙伴共同协作才能实现,因为BGP中的许多参数需要互联双方共同商定,才能生效。

商业价值

  中国互联网长期以来存在电信网通南北“割据”,虽然互联却不互通的状况。这种情况在网站上的表现,即是用网通接入的网站,使用电信线路的网民访问速度极慢,使用电信线路接入的网站,使用网通线路的网民访问速度极慢。

  要想解决这个问题,目前只能有两种办法:一是类似百度这样的大型网络公司,在全国各地设置镜像服务器,采用分布式网络拓扑结构实现快速访问,但缺点是投资大,动辄数百万的经费不是一般企业能承受的;另一种是将服务器同时接入电信、网通双线,支付双倍的网络费用。具有一定客户规模的建站公司就能承受这样的成本。

  但是,部分虚拟主机商出于成本的考虑,往往悄悄测定客户的上网接入线路,如果客户上网是网通线路,他把服务器也接入网通线路,但电信接入的网民访问该客户的网站访问速度是很慢的;如果客户上网是电信线路,他把服务器也接入电信线路,但网通接入的网民访问该客户的网站访问速度是很慢的;而这一切,客户自己却浑然不知。要知道:你的网站是针对全中国乃至全世界的,网络接入速度不好直接影响你的网站流量。

  利用BGP多线接入技术就能很好解决上述问题,例如BGP双线,使用BGP技术配合中国网络带宽出口最优秀的北京电信、北京网通,确保全国南北互联互通,彻底解决了南电信北网通的互连问题。

PE的设置

  对于技术工程师而言,BGP设置是很大的难点,下面列举BGP的多线接入基本设置:

  router bgp 100

  no synchronization

  no bgp default ipv4-unicast

  bgp log-neighbor-changes

  neighbor 10.1.1.4 remote-as 100

  neighbor 10.1.1.4 update-source Loopback0

  neighbor 10.1.1.4 activate

  neighbor 10.3.1.4 remote-as 100

  neighbor 10.3.1.4 update-source Loopback0

  neighbor 10.3.1.4 activate

  no auto-summary

  !

  address-family ipv4 vrf vrf-1

  redistribute connected

  no auto-summary

  no synchronization

  exit-address-family

  !

  address-family vpnv4

  neighbor 10.1.1.4 activate

  neighbor 10.1.1.4 send-community both

  neighbor 10.3.1.4 activate

  neighbor 10.3.1.4 send-community both

  exit-address-family

  !

选路原则

  1.优选有最大Weight的路由 (范围0 到 65,535)

  A:weight是CISCO私有的参数,路由器配置了权重后在本地有效。

  2.优选有最大LOCAL_PREF值的路由(范围 0到 4,294,967,295).

  3.优选从本路由器始发的路由(包括本地network配置的重分布,或者在IGP表中已经有一些需要被配置路由聚合的地址,在BGP中用Aggregate命令配置的路由聚合,)

  4.优选有最短AS_PATH的路由

  A.如果配置了Bgp bestpath as-path ignore,则这个步骤被忽略

  B.一个AS路径集被当作一个AS,无论在这个集合中有多少AS。

  C.AS路径长度中没有包括AS_CONFED_SEQUENCE。

  5.根据Origin属性.优选具有最低起源类型的路由(IGP>EG>Incomplete)

  6.优选最小MED 值的路由(范围 0到4,294,967,295).

  A.只有在通过两条路径得到第一个AS(对等体)是同一个AS时才进行MED比较;任何子自治域的联盟系统都会被忽略。也就是说,只有在AS序列号中第一个AS号码一致时,才进行MED比较;任何联盟AS序列 号(AS_CONFED_SEQUENCE)都会被忽略。

  B.如果路由器上配置了 bgp always—compare—med ,在全部的路径进行MED比较。但是这需要全体AS都同时启用这个功能,否则有可能发生路由环路。

  C.如果路由器上配置了 bgp bestpath med confed,将对所有只包括AS_CONFED_SEQUENCE的路径进行MED比较(即路径是起源于本地联盟)。

  D.如果接收到的路径没有分配MED值,则将此路径分配为0,除非路由器上配置了bestpathmissing—is—worst,将被看作MED值为4,294,967,295的路由将在注入到BGP路由选择表之前被改为4,294,967,294。

  E.BGP明确的MED值9(详见本章后面的"BGP明确的MED"段落)也可以影响此步骤。

  7.外部路由EBGP优先于联盟(confederation)外部路由优于内部路由IBGP(优选 E-BGP路由)

  注意,路径中包括AS_CONFEND_SEQUENCE属性对联盟只有在本地有效,因此被看作是内部路径。无法区别外部联盟和内部联盟。

  8. 优选能通过最近的IGP邻居到达的路径(优选对BGP下一跳具有最低IGP度量值的路径);

  9.如果在路由器上配置了maximum—pathsN,而且从同一个对等体自治域/子自治域接收到多条外部/外部联盟的路径,则最多可以将N条最近接收到的路径加入到IP路由选择表中。这可以使得eBGP在多条路径上进行负载分担。目前N所代表的最大数目是6;当没有启用此功能时,缺省数值是1。在输入了showip bgpx.x.x.x后系统输出信息中可以看到最早接收到的路径被标记为最优路径,在将这条最优路径转发到内部对等体之前,需要执行与next_hop_self作用相同的功能。

  10.如果是external的路由,优选最老的路由(最先被学习到的路由).

  A.此步骤可以将路由摆动的影响减到最小,因为新接收到的路径不会取代老的,即使这条新接收的路径是通过下面提及到的额外路径选择标准来进行选择的。这使得只在iBGP路径下应用额外的选择步骤更有意义。

  B.此步骤可以被bgp bestpath compare_routerid命令语句所关闭。

  C.如果路由器标志是一样的,此步骤可以被屏蔽,因为这说明路由器正在从自己那里接收路由。

  D.如果当前没有最优路由器,此步骤可以被屏蔽。当提供某个路径的对等体路由器宏机,就会发生丢失 当前最优路径的情况。

  11.如果在同一时间学习到多条到同一目的地的路由,优选最小BGP-router-ID的路由,注意,如果一个路径包括路由反射器属性,起始者标识将代替路由器标识在路径选择过程中起作用。

  12.如果路由从路由反射器上学习到 ,优选最小Cluster-ID(BGP_ID of the routereflector)长度的路由,而且它运行客户机和其他反射器族中的RR/Clients之间做对等连接,在这种情况下,路由器必须知道BGP协议中的RR的具体配置。

  13.优选具有最低对等体地址接收到的路径。这个地址是在BGP对等体上配置并使用的地址,这个地址是本地对等体路由器在其上配置TCP邻居并与远端对等体建立连接时采用的地址。

个人工具
名字空间

变换
查看
操作
导航
工具箱