BGP路由协议

更新时间:2023-12-25 16:02:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第二章 BGP路由协议

2.1 BGP协议概述 2.1.1

BGP的应用环境及基本概念

BGP(Border Gateway Protocol)是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号(AS)序列属性的路径可达信息,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的路由策略。与OSPF和RIP 等在自治区域内部运行的协议对应,BGP是一类EGP(Exterior Gateway Protocol)协议,而OSPF和RIP等为IGP(Interior Gateway Protocol)协议。BGP协议经常用于ISP之间。 (如图:2-1)

ISP-1n3,n4(n3,n4)(n1,n2,n5,n6)(n5,n6)ISP-2n5,n6(n1,n2,n3,n4)EBGPIBGP路由数据ISP-3n1,n2港湾网络培训中心www.harbournetworks.com3 图2-1 BGP应用环境示意图

BGP协议从1989年以来就已经开始使用。它最早发布的三个版本分别是RFC1105(BGP-1)、RFC1163(BGP-2)和RFC1267(BGP-3),当前使用的是RFC1771(BGP- 4)。 随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,影响了网络的性能。BGP支持无类别域间选路CIDR(Classless Interdomain Routing),可以有效的减少日益增大的路由表。BGP-4正迅速成为事实上的Internet边界路由协议标准。特性描述如下:

BGP是一种外部路由协议,与OSPF、RIP等的内部路由协议不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最好的路由。

通过携带AS路径信息,可以彻底解决路由循环问题。 为控制路由的传播和路由选择,它为路由附带属性信息。 使用TCP作为其传输层协议,提高了协议的可靠性。

BGP-4支持无类别域间选路CIDR(Classless InterDomain Routing),有时也称为supernetting,这是对BGP-3的一个重要改进。CIDR以一种全新的方法看待IP地址,不再区分A类网、B类网及C类网。例如一个非法的C类网络地址192.213.0.0(255.255.0.0)采用CIDR表示法192.213.0.0/16就成为一个合法的超级网络,其中/16表示子网掩码由从地址左端开始的16比特构成。CIDR的引入简化了路由聚合(Routes Aggregation),路由聚合实际上是合并几个不同路由的过程,这样从通告几条路由变为通告一条路由,减化了路由表。

路由更新时,BGP只发送增量路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。

由于政治的、经济的原因,每个自治系统希望对路由进行过滤、选择和控制, 因此,BGP-4 提供了丰富的路由策略,它使得BGP便于扩展以支持因特网新的发展。与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对等体(BGP Peer),同时在本地保存了已经发送给BGP对等体的路由信息。当本地的BGP收到了一条新路由时(如通过IGP注入了新路由或加入了新的静态路由),与保存的已发送信息进行比较,如未发送过,则发送,如已发送过则与已经发送的路由进行比较,如新路由花费更小,则发送此新路由,同时更新已发送信息,反之则不发送。当本地BGP发现一条路由失效时(如对应端口失效),如此路由已发送过,则向BGP对等体发送一个撤消路由消息。

2.1.2 自治系统

AS(自治系统)指的是:由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。每个自治系统都有唯一的自治系统编号,这个编号是由因特网授权的管理机构分配的。

引入AS(自治系统)的基本思想:就是通过不同的编号来区分不同的自治系统。这样,当网络管理员不期望自己的通信数据通过某个自治系统时,这种编号方式就十分有用了。或许,该网络管理员的网络完全可以访问这个自治系统,但由于它可能是由竞争对手在管理,或是缺乏足够的安全机制,因此,可能要回避它。通过采用路由协议和自治系统编号,路由器就可以确定彼此间的路径和路由信息的交换方法。

AS-ID(自治系统编号)的范围是1到65535,其中1到64511是注册的自治系统编号,64512到65535是私有的自治系统编号。 2.1.3

? ? ? ? ? ? 2.1.4

? ? ? ? ? ? ? ?

BGP要解决的问题

要有在AS之间发现路由环路的能力

在AS之间传递路由时能够支持复杂的路由策略 要充分地与IGP互相合作,保证所发布路由的可靠性 公布网络变化的过程要快,收敛时间要短 路由条目过多,路由表规模过大 大规模网络中路由浮动的问题 BGP工作方法摘要

在自治系统(AS)之间传递路由信息 使用TCP协议保证信息传递的可靠性(179) 使用OPEN信息建立邻居关系 使用UPDATE信息传递路由信息 使用KEEPALIVE信息保持邻居关系

使用NOTIFICATION报告错误,中止邻居关系

维护一张带有版本号的BGP表,在路由更新时增加版本号 路由器根据BGP表中各表项的值计算到接邻AS的路由

2.1.5 BGP的工作机制

BGP系统作为应用层协议运行在一个特定的路由器上。系统初启时通过发送整个BGP路由表交换路由信息,之后为了更新路由表只交换更新消息(update message)。系统在运行过程中,是通过接收和发送keep-alive消息来检测相互之间的连接是否正常。

发送BGP消息的路由器称为BGP发言人(speaker),它不断的接收或产生新路由信息,并将它广告(advertise)给其它的BGP发言人。当BGP发言人收到来自其他自治系统的新路由广告时,如果该路由比当前已知路由好、或者当前还没有可接受路由,它就把这个路由广告给自治系统内所有其它的BGP发言人。一个BGP发言人也将同它交换消息的其它的BGP发言人称为同伴(peer),若干相关的同伴可以构成同伴组(group)。

AS1AS2AS3AS4AS5AS7AS6港湾网络培训中心www.harbournetworks.com4 图2-2 AS结构示意图

一般情况下一条路由是从自治系统内部产生的,它由某种内部路由协议发现和计算,传递到自治系统的边界,由自治系统边界路由器(ASBR)通过EBGP连接传播到其它自治系统中。路由在传播过程中可能会经过若干个自治系统,这些自治系统称为过渡自治系统。如(图2-2):AS5。若这个自治系统有多个边界路由器,这些路由器之间运行IBGP来交换路由信息。这时内部的路由器并不需要知道这些外部路由,它们只需要在边界路由器之间维护IP连通性。如(图2-2):AS2、AS3、AS4。路由到达自治系统边界后,若内部路由器需要知道这些外部路由,ASBR可以将路由引入内部路由协议。外部路由的数量是很大的,通常会超出内部路由器的处理能力,因此引入外部路由时一般需要过滤或聚合,以减少路由的数量,极端的情况是使用默认路由。还有一种自治系统称为Stub AS,如(图2-2):AS1、AS6、AS7。其内部只有一个ASBR通过EBGP连接外部,同外部其他AS的通信要靠过渡自治系统来转接。

对一个具体的ASBR来说,其路由的来源有两种:从对等体接收的或者从IGP引入的。对于接收的路由,根据其属性(如AS路径、团体属性等)进行过滤,并设置某些属性(如本地优先、MED值等),之后若需要的话,将具体的路由聚合为超网路由。BGP可能从多个对等体收到目的地相同的路由,根据规则选择最好的路由并加入IP路由表。对于IGP路由,则要经过引入策略的过滤和设置。BGP发送优选的BGP路由和引入的IGP路由给对等体。 2.1.6

BGP的两种邻居

BGP在路由器上以下列两种方式运行:IBGP(Internal BGP)和EBGP(External BGP) 如果两个交换BGP报文的对等体属于同一个自治系统,那么这两个对等体就是IBGP对等体(Internal BGP) ,如(图2-3):R2和R4。

如果两个交换BGP报文的对等体属于不同的自治系统,那么这两个对等体就是EBGP对等体 (External BGP) ,如(图2-3):R1和R2、R4和R5。

AS 3n3,n4R1AS 56R5n5,n6EBGPR2EBGPIBGPR4AS 251R3n1,n2港湾网络培训中心www.harbournetworks.com7 图2-3 IBGP和EBGP邻居关系示意图

虽然BGP是运行于自治系统之间的路由协议,但是一个AS的不同边界路由器之间也要建立BGP连接,只有这样才能实现路由信息在全网的传递,如R2和R4,为了建立AS3和AS56之间的通信,我们要在它们之间建立IBGP连接。

IBGP对等体之间不一定是物理上直连的,但必须保证逻辑上全连接。(TCP连接能够建立即可)。EBGP对等体之间一般是物理上直连的,但也可以是逻辑连接(我们称为EBGP

Update报文是由报文头加如下格式构成的Unfeasible Route Length (2 bytes)Withdraw Routes (variable)Total Attribute Length (2 bytes)Attributes (variable)Length (1 byte)……Prefix (variable)属性信息网络层可到达性信息(Network Layer ReachabilityInformation)不可到达路由信息港湾网络培训中心www.harbournetworks.com14 图2-9 Update报文示意图

Update消息实例:通告路由在消息中通告的多条可达路由要具有相同的属性港湾网络培训中心www.harbournetworks.com15

图2-10 Update报文结构图

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

Path Attribute Len :(2字节无符号整数) 路径属性长 Path Attributes :(变长) 路径属性(以下详细说明)

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

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

UPDATE 报文是BGP系统中最重要的信息,用于在同伴之间交换路由信息,它最多由三部分构成:不可达路由(unreachable)、路径属性(path attributes)、网络可达性信息(NLRI,network layer reachability information)。

UPDATE 消息可以向BGP对等体通告一条路由,也可以撤消多条“行不通”的路由。不可达路由字段包括一个所撤消路由的IP地址前缀列表。路径属性字段是一个路径属性的列表,包括:属性类型、属性长度和属性值等。网络可达字段包括了BGP路由器所知道的且可到达的IP地址前缀列表。

一个UPDATE 消息一次只能通告一个路由,但它可以携带多个路径属性。 一个UPDATE 消息一次也可通告多条路由,但它的路径属性必须相同。 一个UPDATE 消息可以同时列出多个被撤消的路由。

Notification报文由报文头加如下结构构成:01234567012345670123456701234567Error CodeError SubcodeData错误代码错误类型1消息头错23456退出OPEN消息UPDATE消保持时间状态机错错息错超时 港湾网络培训中心www.harbournetworks.com18图2-11Notification报文示意图 Notification 报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误代码(如定时器超时等),包括错误代码、辅助错误代码及错误信息。

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

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

BGP协议的状态机

BGP协议有限状态机有六个状态,它们之间的转换过程示意了BGP邻居关系建立的过程。如图(图2-12)所示:

BGP邻居状态机TCP connection failsActiveConnect-Retrytimer expiryConnect-Retrytimer expiryConnectOthersOthersStartTCP connection failsTCP connection setupTCP connection setupOpen-sentErrorCorrect OPENpacket receivedErrorIdleErrorOpen-confirmKeepAlivetimer expiryEstablishedKeepAlivepacketreceived1. KeepAlivetimer expiry2. Update received3. KeepAlivereceived港湾网络培训中心www.harbournetworks.com9 图2-12 BGP邻居关系状态迁移图

首先是Idle 状态,BGP协议 一旦Start ,状态机就进入Connect 状态 ,在Connect 状态 ,如果Connect- Retry 定时器超时,BGP状态机会停留在Connect 状态 ,同时, BGP 试图建立TCP 连接,如果TCP 连接建立失败,BGP 状态机进入Active 状态。 如果TCP 连接建立成功,BGP状态机就直接进入OpenSent 状态。在Active 状态,如果TCP 连接依然不能建立起来,那么BGP状态机就会一直停留在Active 状态,直到TCP 连接建立成功,才会进入OpenSent 状态。在OpenSent 状态 ,BGP一旦收到了一个正确的Open 报文,就会进入OpenConfirm 状态。在OpenConfirm 状态 ,如果KeepAlive 定时器超时,BGP状态机就会停留在OpenConfirm状态。直到BGP收到KeepAlive 报文,BGP状态机才会进入Established 状态。 这时BGP连接才算建立起来。

另外,在除Idle 状态以外的其它五个状态出现任何Error 的时候,BGP状态机就会退回到Idle 状态。

Idle(空闲):Idle 是BGP连接的第一个状态,在空闲状态,BGP在等待一个启动事件,启动事件出现以后,BGP初始化资源,复位连接重试计时器(Connect-Retry),发起一条TCP连接,同时转入Connect(连接)状态。

Connect(连接):在Connect 状态,BGP发起第一个TCP连接,如果 连接重试计时器(Connect-Retry)超时,就重新发起TCP连接,并继续保持在Connect 状态,如果TCP 连接成功,就转入OpenSent 状态,如果TCP 连接失败,就转入Active 状态。

Active(活跃):在Active状态,BGP总是在试图建立TCP 连接,如果连接重试计时器(Connect-Retry)超时,就退回到Connect 状态,如果TCP 连接成功,就转入OpenSent 状态,如果TCP 连接失败,就继续保持在Active状态,并继续发起TCP连接。

OpenSent(打开消息已发送):在OpenSent 状态,TCP连接已经建立,BGP也已经发送了第一个Open报文,剩下的工作,BGP就在等待其对等体发送Open 报文。并对收到的Open报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keepalive 报文,并复位Keepalive 计时器,开始计时。同时转入OpenConfirm状态。

OpenConfirm(打开消息确认)状态:在OpenConfirm状态,BGP等待一个Keepalive 报文,同时复位保持计时器,如果收到了一个Keepalive 报文,就转入Established 阶段,BGP邻居关系就建立起来了。如果TCP连接中断,就退回到Idle 状态。

Established(连接已建立):在Established 状态,BGP 邻居关系已经建立,这时,BGP将和它的邻居们交换Update 报文,同时复位保持计时器。 2.2.4

BGP协议中消息的应用

BGP使用TCP 建立连接,本地监听端口为179。 和TCP建立相同,BGP连接的建立也要经过一系列的对话和握手。TCP通过握手协商通告其端口等参数,BGP的握手协商的参数有:BGP版本、BGP连接保持时间、本地的路由器标识(Router ID)、授权信息等。这些信息都在Open 消息中体现。

BGP 连接建立后,如果有路由需要发送则发送Update 消息通告对端路由信息。Update消息主要用来通告路由信息,包括失效(撤消)路由。Update 消息发布路由时,还要指定此路由的路由属性,用以帮助对端BGP协议选择最佳的路由。关于路由属性在BGP选择路由时的应用,参见BGP协议路由属性的应用部分。

在本地BGP路由变化时,也使用Update 消息修正对端BGP的路由表。

经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定了。此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。对于本地BGP,如果在超过保持时间的时间内,还未收到任何对端BGP消息,就认为此BGP连接已经无效,将此BGP连接断开。

当本地BGP在运行中发现错误时,要发送NOTIFY消息通告BGP对端。如对端BGP版本本地不支持,本地BGP收到了结构非法的Update 消息等。本地BGP退出BGP连接时也要发送NOTIFICATION消息。BGP收到NOTIFICATION消息后,要作相应处理。 2.2.5

如何成为BGP路由

BGP 路由协议是运行在自治系统之间的路由协议,它的主要工作是在自治系统之间传递路由信息,而不是去发现和计算路由信息。发现和计算路由信息的任务由IGP (如:RIP、

OSPF)路由协议来完成。BGP 的路由信息需要通过配置命令的方式注入到BGP中。按照注入的方式可分为三类:纯动态注入、半动态注入、静态注入。 2.2.5.1 向BGP注入路由(纯动态)

纯动态注入是指:路由器将通过IGP路由协议动态获得的路由信息直接注入到BGP中去。纯动态注入方式没有对路由信息做任何过滤和选择,它会把路由器获得的所有IGP 路由信息都引入到BGP系统中。从另一角度来说,这样一种路由注入方式配置简单,一次性引入了所有的路由信息。当然,在实际工程中可以根据需要选择。

这样做的好处是操作简单,但缺点是IGP的不稳定会造成BGP的路由浮动。另外,由于IGP的不可靠性可能会引入错误的路由。

如图(图2-13)所示:

R3(router-config)#Redistribute ospfEBGPR2IBGPL1:3.3.3.3/32R3R5L1:5.5.5.5/32R4AS 3AS 251(OSPF)?使用redistribute命令把IGP路由发往BGP?缺点是IGP的不稳定会造成BGP内的路由动荡?另一缺点是可能引入错误的路由?一般不采用港湾网络培训中心www.harbournetworks.com25 图2-13 BGP路由动态注入示意图

R3通过OSPF 协议动态地发现路由,再通过配置redistribute命令动态将其引入到BGP中,路由是通过IGP动态生产的,又是动态引入的,所以我们称这样一种路由注入方式为纯动态注入。

2.2.5.2 向BGP注入路由(半动态)

半动态注入是指:路由器有选择性的将IGP发现的动态路由信息注入到BGP系统中去。它和纯动态注入的区别在于不是将IGP发现的所有路由信息注入到BGP中去。而是有选择的进行注入。

如图(图2-14)所示:

本文来源:https://www.bwwdw.com/article/y4cx.html

Top