第四章 BGP协议.docx
- 文档编号:11209513
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:19
- 大小:295.67KB
第四章 BGP协议.docx
《第四章 BGP协议.docx》由会员分享,可在线阅读,更多相关《第四章 BGP协议.docx(19页珍藏版)》请在冰豆网上搜索。
第四章BGP协议
第四章BGP协议
4.1BGP简介
BGP(BorderGatewayProtocol,边界网关协议)是一种用于AS(AutonomousSystem,自治系统)之间的动态路由协议。
AS是拥有同一选路策略,在同一技术管理部门下运行的一组路由器。
早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),当前使用的版本是BGP-4(RFC1771)。
BGP-4做为事实上的Internet外部路由协议标准,被广泛应用于ISP(InternetServiceProvider,因特网服务提供商)之间。
BGP特性描述如下:
●BGP是一种外部网关协议(ExteriorGatewayProtocol,EGP),与OSPF、RIP等内部网关协议(InteriorGatewayProtocol,IGP)不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最佳路由。
●BGP使用TCP作为其传输层协议(端口号179),提高了协议的可靠性。
●BGP支持CIDR(ClasslessInter-DomainRouting,无类别域间路由)。
●路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
●BGP路由通过携带AS路径信息彻底解决路由环路问题。
●BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
●BGP易于扩展,能够适应网络新的发展。
在Internet上,BGP需要通告的路由数目极大,由于TCP提供了可靠的传送机制,同时TCP使用滑动窗口机制,使得BGP可以不断地发送分组,而无需像OSPF或EIGRP那样停止发送并等待确认。
发送BGP消息的路由器称为BGP发言者(BGPSpeaker),它接收或产生新的路由信息,并发布(Advertise)给其它BGP发言者。
当BGP发言者收到来自其它自治系统的新路由时,如果该路由比当前已知路由更优、或者当前还没有该路由,它就把这条路由发布给自治系统内所有其它BGP发言者。
相互交换消息的BGP发言者之间互称对等体(Peer),若干相关的对等体可以构成对等体组(Peergroup)。
BGP在路由器上以下列两种方式运行:
●IBGP(InternalBGP):
当BGP运行于同一自治系统内部时,被称为IBGP;
●EBGP(ExternalBGP):
当BGP运行于不同自治系统之间时,称为EBGP。
4.2BGP的消息类型
4.2.1消息头格式
BGP有5种消息类型:
Open、Update、Notification、Keepalive和Route-refresh。
这些消息有相同的报文头,其格式如图所示。
BGP消息的报文头格式
主要字段的解释如下:
●Marker:
16字节,用于BGP验证的计算,不使用验证时所有比特均为“1”。
●Length:
2字节,BGP消息总长度(包括报文头在内),以字节为单位。
●Type:
1字节,BGP消息的类型。
其取值从1到5,分别表示Open、Update、Notification、Keepalive和Route-refresh消息。
其中,前四种消息是在RFC1771中定义,而Type为5的消息则是在RFC2918中定义的。
4.2.2Open消息
Open消息是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。
两个邻居都要发送一个Open消息,每个邻居都用该消息来标示自己,并规定自己的BGP运行参数。
BGPOpen消息包含的内容包括:
1)BGPversion
它明确了发起者正在运行的BGP版本号(2,3,4),可以通过neighborversion修改,缺省版本号为4。
如果版本号不相同,路由器将自动降低版本号重发Open消息,直到版本一致。
2)ASnumber
发起会话路由器的AS号,用于确认EBGP或者IBGP会话。
3)Holdtime
路由器必须收到一个keepalive或者更新消息之前允许经过的最大秒数。
Holdtime必须是0(在这种情况下,必须是没有发送Keepalive)或者至少3s。
Cisco默认的holdtime为180s,如果两个邻居间holdtime不一致,选较短的那个做为两者可接受的时间。
4)BGProuter-ID
选取方式和OSPF相同,使用数值最大的loopback口地址,没有loopback则使用物理接口上数值最大的地址。
5)Optionalparameters
用于一些可选功能的支持,例如鉴别,多协议支持及路由刷新等。
4.2.3Update消息
Update消息用于在对等体之间交换路由信息。
它既可以发布可达路由信息,也可以撤销不可达路由信息,其消息格式如图所示。
BGPUpdate消息格式
一条Update报文可以通告一类具有相同路径属性的可达路由,这些路由放在NLRI(NetworkLayerReachableInformation,网络层可达信息)字段中,PathAttributes字段携带了这些路由的属性,BGP根据这些属性进行路由的选择;同时Update报文还可以携带多条不可达路由,被撤销的路由放在WithdrawnRoutes字段中。
BGPUpdate消息包含的内容包括:
1)NetworkLayerReachabilityInformation(NLRI)
用来公布IP地址前缀和前缀长度的字节组,例如<19,198.24.160.0>
2)PathAttributes
该属性为BGP提供了选择最短路径,检查到路由环路以及决定路由策略的信息
3)WithdrawnRoutes
用来描述已经变成不可达并正从业务中撤销的目的地址字节组(长度和前缀)
注:
虽然NLRI字段可以包含多个前缀,但每一个更新消息只描述一条BGP路由(因为路径属性只描述一条路径,但该路径可能会到达多个目的地)
4.2.4Notification消息
当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。
其消息格式如图所示。
BGPNotification消息格式
主要字段的解释如下:
●ErrorCode:
差错码,指定错误类型。
●ErrorSubcode:
差错子码,错误类型的详细信息。
●Data:
用于辅助发现错误的原因,它的内容依赖于具体的差错码和差错子码,记录的是出错部分的数据,长度不固定。
4.2.5Keepalive消息
BGP会周期性地向对等体发出Keepalive消息,用来保持连接的有效性。
其消息格式中只包含报文头,没有附加其他任何字段。
如果路由器接受了他在邻居的Open消息中的参数,它就会发送一个应答的Keepalive消息。
默认情况Keepalive间隔60s,或者是达成一致的保持时间的1/3。
4.2.6Route-refresh消息
这是一个可选的消息,Route-refresh消息用来要求对等体重新发送指定地址族的路由信息。
其消息格式如图所示。
BGPRoute-refresh消息格式
主要的字段解释如下:
●AFI:
AddressFamilyIdentifier,地址族标识。
●Res.:
保留,必须置0。
●SAFI:
SubsequentAddressFamilyIdentifier,子地址族标识。
4.3BGP邻居协商
在BGP说话者可以交换网络层可达性信息(正被通告的网络)前,一个BGP会话必须被建立。
下图表明了在连接完全建立起前BGP邻居协商的过程。
4.4BGP协议的状态机
1)Idle(空闲):
初始地,BGP处于Idle状态直到一个操作方引发了一个启动(Start)事件,启动事件通常是由建立或重启BGP会话引起的。
2)Connect(连接):
在这个状态下,BGP正等待着传输协议连接的完成。
如果传输协议连接成功了,一open报文被发送给对等的路由器,BGP状态变成了开放发送(opensent)状态。
若连接失败,本地系统变为激活状态,继续监视连接。
3)ActiveState(行动):
在这个状态下,BGP试图通过启动一传输协议连接来获得一个对等体。
若连接成功,一个Open报文被发送给对等路由器。
若连接重试计时器超时,BGP状态变为连接(Connect)状态,并继续监视可能会由远程BGP对等体启动的连接。
4)OpenSentState(开送状态):
本状态中,BGP正等待着来自它的对等体的OPEN报文。
当一个OPEN报文被接收后,检查所有域的正确性。
如果检测到错误,本地系统发送出一个NOTIFICATION报文并变回到空闲状态(Idle)。
如果无错,BGP开始向它的对等体发送KeepAlive报文。
5)OpenConfirm(开确认):
本状态下,BGP等候KeepAlive或Notification报文。
若本地系统接收到KeepAlive报文,系统状态变为已建立(establisted)状态。
如果保持计时器(Hololtimer)在KeepAlive报文到达前超时,本地系统发送出一Notification报文,状态变回到Idle。
6)Establisted(已建立):
这是邻居协商的最后阶段。
在establisted状态下,BGP对等体可以交换Update,Notification以及KeepAlive报文。
4.5BGP的路由属性
4.5.1路由属性的分类
BGP路由属性是UPDATE报文的路由属性(PathAttributes):
此可变长字段包含了与网络层可达性信息字段中前缀相关联的BGP属性的列表,它对特定的路由进行了进一步的描述,路径属性给出了正被通告的前缀的信息,如优先级或者前缀源等,使得BGP能够对路由进行过滤和选择。
BGP路由属性都可以分为以下四类:
●公认必须遵循(Well-knownmandatory):
所有BGP路由器都必须能够识别这种属性,且必须存在于Update消息中。
如果缺少这种属性,路由信息就会出错。
●公认可选(Well-knowndiscretionary):
所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来选择。
●可选过渡(Optionaltransitive):
在AS之间具有可传递性的属性。
BGP路由器可以不支持此属性,但它仍然会接收带有此属性的路由,并通告给其他对等体。
●可选非过渡(Optionalnon-trasitive):
如果BGP路由器不支持此属性,该属性被忽略,且不会通告给其他对等体。
BGP路由几种基本属性和对应的类别如表所示。
4.5.2源(ORIGIN)属性
ORIGIN是一个公认必遵属性的例子。
它定义路由信息的来源,给出了产生路由更新的源AS。
这个属性标记一条路由是怎么成为BGP路由的。
一个路由可从诸如OSPF的一个IGP得到,它被再分配进BGP。
本属性可由外部路由协议(EGP)或其他除IGP或EGP之外的东西(如静态路由)等得知。
ORIGIN属性有以下三种类型:
●IGP:
优先级最高,说明路由产生于本AS内。
●EGP:
优先级次之,说明路由通过EGP学到。
●incomplete:
优先级最低,它并不是说明路由不可达,而是表示路由的来源无法确定。
例如,引入的其它路由协议的路由信息。
4.5.3AS路径(AS_PATH)属性
AS_PATH属性按一定次序记录了某条路由从本地到目的地址所要经过的所有AS号。
当BGP将一条路由通告到其他AS时,便会把本地AS号添加在AS_PATH列表的最前面。
收到此路由的BGP路由器根据AS_PATH属性就可以知道去目的地址所要经过的AS。
离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
如图所示。
通常情况下,BGP不会接受AS_PATH中已包含本地AS号的路由,从而避免了形成路由环路的可能。
同时,AS_PATH属性也可用于路由的选择和过滤。
在其他因素相同的情况下,BGP会优先选择路径较短的路由。
比如在上图中,AS50中的BGP路由器会选择经过AS40的路径作为到目的地址8.0.0.0的最优路由。
在某些应用中,可以使用路由策略来人为的增加AS路径的长度,以便更为灵活地控制BGP路径的选择。
通过配置AS路径过滤列表,还可以针对AS_PATH属性中所包含的AS号来对路由进行过滤。
4.5.4下一跳(NEXT_HOP)属性
BGP的下一跳属性和IGP的有所不同,不一定就是邻居路由器的IP地址。
下一跳属性取值情况分为三种,如图所示。
●BGP发言者把自己产生的路由发给所有邻居时,将把该路由信息的下一跳属性设置为自己与对端连接的接口地址;
●BGP发言者把接收到的路由发送给EBGP对等体时,将把该路由信息的下一跳属性设置为本地与对端连接的接口地址;
●BGP发言者把从EBGP邻居得到的路由发给IBGP邻居时,并不改变该路由信息的下一跳属性。
如果配置了负载分担,路由被发给IBGP邻居时则会修改下一跳属性。
4.5.5本地优先(LOCAL_PREF)属性
LOCAL_PREF属性仅在IBGP对等体之间交换,不通告给其他AS。
它表明BGP路由器的优先级。
LOCAL_PREF属性用于判断流量离开AS时的最佳路由。
当BGP的路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择LOCAL_PREF属性值较高的路由。
如图所示,从AS20到AS10的流量将选择RouterC作为出口。
4.5.6团体(COMMUNITY)属性
团体属性用来简化路由策略的应用和降低维护管理的难度。
它是一组有相同特征的目的地址的集合,没有物理上的边界,与其所在的AS无关。
公认的团体属性有:
●INTERNET:
缺省情况下,所有的路由都属于INTERNET团体。
具有此属性的路由可以被通告给所有的BGP对等体。
●NO_EXPORT:
具有此属性的路由在收到后,不能被发布到本地AS之外。
如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS。
●NO_ADVERTISE:
具有此属性的路由被接收后,不能被通告给任何其他的BGP对等体。
●NO_EXPORT_SUBCONFED:
具有此属性的路由被接收后,不能被发布到本地AS之外,也不能发布到联盟中的其他子AS。
4.6BGP的选路规则
4.6.1BGP选择路由的策略
在目前的实现中,BGP选择路由时采取如下策略:
●首先丢弃下一跳(NEXT_HOP)不可达的路由;
●优选Preferred-value值最大的路由;
●优选本地优先级(LOCAL_PREF)最高的路由;
●优选本路由器始发的路由;
●优选AS路径(AS_PATH)最短的路由;
●依次选择ORIGIN类型为IGP、EGP、Incomplete的路由;
●优选MED值最低的路由;
●依次选择从EBGP、联盟、IBGP学来的路由;
●优选下一跳Cost值最低的路由;
●优选CLUSTER_LIST长度最短的路由;
●优选ORIGINATOR_ID最小的路由;
●优选RouterID最小的路由器发布的路由;
4.6.2应用BGP负载分担时的选路
在BGP中,由于协议本身的特殊性,它产生的路由的下一跳地址可能不是当前路由器直接相连的邻居。
常见的一个原因是:
IBGP之间发布路由信息时不改变下一跳。
这种情况下,为了能够将报文正确转发出去,路由器必须先找到一个直接可达的地址(查找IGP建立的路由表项),通过这个地址到达路由表中指示的下一跳。
在上述过程中,去往直接可达地址的路由被称为依赖路由,BGP路由依赖于这些路由指导报文转发。
根据下一跳地址找到依赖路由的过程就是路由迭代(recursion)。
目前系统支持基于迭代的BGP负载分担,即如果依赖路由本身是负载分担的(假设有三个下一跳地址),则BGP也会生成相同数量的下一跳地址来指导报文转发。
需要说明的是,基于迭代的BGP负载分担并不需要命令配置,这一特性在系统上始终启用。
在实现方法上,BGP的负载分担与IGP的负载分担有所不同:
●IGP是通过协议定义的路由算法,对到达同一目的地址的不同路由,根据计算结果,将度量值(metric)相等的(如RIP、OSPF)路由进行负载分担,选择的标准很明确(按metric)。
●BGP本身并没有路由计算的算法,它只是一个选路的路由协议,因此,不能根据一个明确的度量值决定是否对路由进行负载分担,但BGP有丰富的选路规则,可以在对路由进行一定的选择后,有条件地进行负载分担,也就是将负载分担加入到BGP的选路规则中去。
在图中,RouterD和RouterE是RouterC的IBGP对等体。
当RouterA和Router B同时向RouterC通告到达同一目的地的路由时,如果用户在RouterC配置了负载分担(如balance2),则当满足一定的选路规则后,并且两条路由具有相同的AS_PATH属性、ORIGIN属性、LOCAL_PREF和MED值时,RouterC就把接收的两条路由同时加入到转发表中,实现BGP路由的负载分担。
RouterC只向RouterD和RouterE转发一次该路由,AS_PATH不变,但NEXT_HOP属性改变为RouterC的地址,而不是原来的EBGP对等体地址。
其它的BGP过渡属性将按最佳路由的属性传递。
4.6.3BGP发布路由的策略
在目前的实现中,BGP发布路由时采用如下策略:
●存在多条有效路由时,BGP发言者只将最优路由发布给对等体;
●BGP发言者只把自己使用的路由发布给对等体;
●BGP发言者从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体);
●BGP发言者从IBGP获得的路由不向它的IBGP对等体发布;
●BGP发言者从IBGP获得的路由发布给它的EBGP对等体(关闭BGP与IGP同步的情况下,IBGP路由被直接发布;开启BGP与IGP同步的情况下,该IBGP路由只有在IGP也发布了这条路由时才会被同步并发布给EBGP对等体);
●连接一旦建立,BGP发言者将把自己所有的BGP路由发布给新对等体。
4.7IBGP和IGP同步
同步是指IBGP和IGP之间的同步,其目的是为了避免出现误导外部AS路由器的现象发生。
如果一个AS中有非BGP路由器提供转发服务,经该AS转发的IP报文将可能因为目的地址不可达而被丢弃。
如图1-11所示,RouterE通过BGP从RouterD可以学到RouterA的一条路由8.0.0.0/8,于是将到这个目的地址的报文转发给RouterD,RouterD查询路由表,发现下一跳是RouterB(通过peernext-hop-local命令手动设置)。
由于RouterD从IGP学到了到RouterB的路由,所以通过路由迭代,Router D将报文转发给RouterC。
但RouterC并不知道去8.0.0.0/8的路由,于是将报文丢弃。
图IBGP和IGP同步
如果设置了同步特性,在IBGP路由加入路由表并发布给EBGP对等体之前,会先检查IGP路由表。
只有在IGP也知道这条IBGP路由时,它才会被加入到路由表,并发布给EBGP对等体。
在下面的情况中,可以关闭同步特性。
●本AS不是过渡AS(上图中的AS20就属于一个过渡AS)
●本AS内所有路由器建立IBGP全连接
4.8大规模BGP网络所遇到的问题
4.8.1路由聚合
在大规模的网络中,BGP路由表十分庞大,使用路由聚合(RoutesAggregation)可以大大减小路由表的规模。
路由聚合实际上是将多条路由合并的过程。
这样BGP在向对等体通告路由时,可以只通告聚合后的路由,而不是将所有的具体路由都通告出去。
目前系统支持自动聚合和手动聚合方式。
使用后者还可以控制聚合路由的属性,以及决定是否发布具体路由。
4.8.2BGP路由衰减
BGP路由衰减(RouteDampening)用来解决路由不稳定的问题。
路由不稳定的主要表现形式是路由振荡(Routeflaps),即路由表中的某条路由反复消失和重现。
发生路由振荡时,路由协议就会向邻居发布路由更新,收到更新报文的路由器需要重新计算路由并修改路由表。
所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正常工作。
在多数情况下,BGP协议都应用于复杂的网络环境中,路由变化十分频繁。
为了防止持续的路由振荡带来的不利影响,BGP使用衰减来抑制不稳定的路由。
BGP衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。
路由每发生一次振荡(路由从激活状态变为未激活状态,称为一次路由振荡),BGP便会给此路由增加一定的惩罚值(1000,此数值为系统固定,不可修改)。
当惩罚值超过抑制阈值时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文。
被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(Half-life)。
当惩罚值降到再使用阈值时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文。
4.8.3对等体组
对等体组(PeerGroup)是一些具有某些相同属性的对等体的集合。
当一个对等体加入对等体组中时,此对等体将获得与所在对等体组相同的配置。
当对等体组的配置改变时,组内成员的配置也相应改变。
在大型BGP网络中,对等体的数量会很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令,利用对等体组在很多情况下可以简化配置。
将对等体加入对等体组中,对等体与对等体组具有相同的路由更新策略,提高了路由发布效率。
4.8.4团体
对等体组可以使一组对等体共享相同的策略,而利用团体可以使多个AS中的一组BGP路由器共享相同的策略。
团体是一个路由属性,在BGP对等体之间传播,它并不受到AS范围的限制。
BGP路由器在将带有团体属性的路由发布给其它对等体之前,可以改变此路由原有的团体属性。
除了使用公认的团体属性外,用户还可以使用团体属性列表自定义扩展团体属性,以便更为灵活地控制路由策略。
4.8.5路由反射器
为避免在AS内部的循环路由,BGP不会向内部BGP对等体通告它从其他内部BGP对等体中获得的路由。
在图中,路由器A会通告给路由器B所有它经EBGP获得的路由。
这些路由不会通告到路由器C,因为路由器B不会在路由器A和路由器C间传递IBGP路由。
为使路由器C得知这些路由,路由器A和路由器C间需要建立IBGP连接。
为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。
假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四章 BGP协议 第四 BGP 协议
![提示](https://static.bdocx.com/images/bang_tan.gif)