浅谈BGP协议的工作原理.docx
- 文档编号:5750619
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:24
- 大小:347.22KB
浅谈BGP协议的工作原理.docx
《浅谈BGP协议的工作原理.docx》由会员分享,可在线阅读,更多相关《浅谈BGP协议的工作原理.docx(24页珍藏版)》请在冰豆网上搜索。
浅谈BGP协议的工作原理
浅谈BGP协议的工作原理
图文信息中心李宪民
【摘要】BGP(BorderGatewayProtocol:
边界网关协议):
是一种增强的距离矢量路由协议,属于外部路由协议。
从功能上讲它是一种自治系统间的动态路由协议。
它通过维护IP路由表或‘前缀’表来实现自治系统(AS)之间的可达性,使用基于路径、网络策略或规则集来决定路由。
它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号(AS)序列属性的网络可达信息,来构造自治系统的拓扑图,从而消除路由环路,并使得基于自治系统级别的策略控制得以实施。
本文从应用的角度出发,通过BGP协议特点、BGP路由通告原则、成为BGP路由的方法、BGP报文(消息)、BGP邻接关系的建立、BGP的路由属性、BGP路由选择等七个方面对BGP协议进行阐释。
【关键词】BGP路由协议自治系统对等体状态机BGP报文路由属性
一、BGP协议简介
BGP(BorderGatewayProtocol)是一种自治系统间的动态路由协议,它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号序列属性的路径可达信息,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的路由策略。
与OSPF和RIP等在自治区域内部运行的协议对应,BGP是一种EGP(ExteriorGatewayProtocol)协议,而OSPF、RIP、ISIS等为IGP(InteriorGatewayProtocol)协议。
BGP协议经常用于ISP之间。
BGP协议从1989年以来就已经开始使用。
它最早发布的三个版本分别是RFC1105(BGP-1)、RFC1163(BGP-2)和RFC1267(BGP-3),当前使用的是RFC1771(BGP-4)。
随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,影响了网络的性能。
BGP支持无类别域间选路CIDR(ClasslessInterdomainRouting),可以有效的减少日益增大的路由表。
BGP-4正迅速成为事实上的Internet边界路由协议标准。
二、BGP协议相关概念
(一)自治系统(AutonomousSystem)
自治系统:
是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。
每个自治系统都有唯一的自治系统编号,这个编号是由因特网授权的管理机构分配的。
引入自治系统的基本思想:
通过不同的编号来区分不同的自治系统。
通过采用路由协议和自治系统编号,路由器就可以确定彼此间的路径和路由信息的交换方法。
自治系统的编号范围是1到65535,其中1到64511是注册的因特网编号,64512到65535是私有网络编号。
(二)BGP路由传递
一般情况下一条路由是从自治系统内部产生的,它由某种内部路由协议发现和计算,传递到自治系统的边界,由自治系统边界路由器(ASBR)通过EBGP连接传播到其它自治系统中。
路由在传播过程中可能会经过若干个自治系统,这些自治系统称为过渡自治系统。
如右图中AS5。
若这个自治系统有多个边界路由器,这些路由器之间运行IBGP来交换路由信息。
这时内部的路由器并不需要知道这些外部路由,它们只需要在边界路由器之间维护IP连通性。
如:
AS2、AS3、AS4。
还有一种自治系统称为StubAS,如:
AS1、AS6、AS7。
其内部只有一个ASBR通过EBGP连接外部,同外部其他AS的通信要靠过渡自治系统来转发数据。
对一个具体的ASBR来说,其路由的来源有两种:
从对等体接收的或者从IGP引入的。
对于接收的路由,根据其属性(如AS路径、团体属性等)进行过滤,并设置某些属性(如本地优先级、MED值等),之后若需要的话,将具体的路由聚合为超网路由。
BGP可能从多个对等体收到目的地相同的路由,根据规则选择最好的路由并加入IP路由表。
对于IGP路由,则要经过引入策略的过滤和设置。
BGP发送优选的BGP路由和引入的有效的IGP路由给对等体。
(三)BGP对等体
运行BGP协议来交换路由信息的路由器被称为BGP发言人(BGPSpeaker),和它通信的其它的BGP发言人,两个发言者之间构成交换路由信息的连接,这两个路由器成为相邻体或者对等体。
换句话说,两个BGP发言者之间相互连接,完成路由信息的交互,这两个路由器就称为BGP对等体,是两个边缘路由器实体。
BGP对等体(peer)就是BGP邻居,对等体关系就是BGP邻居关系。
BGP有两种邻居:
IBGP和EBGP。
如右图所示:
如果两个交换BGP报文的对等体属于同一个自治系统,那么这两个对等体就是IBGP对等体(InternalBGP),如RTB-RTD。
如果两个交换BGP报文的对等体属于不同的自治系统,那么这两个对等体就是EBGP对等体(ExternalBGP),如RTA-RTB。
虽然BGP是运行于自治系统之间的路由协议,但是一个AS的不同边界路由器之间也要建立BGP连接,只有这样才能实现路由信息在全网的传递,如RTB和RTD,为了建立AS100和AS300之间的通信,我们要在它们之间建立IBGP连接。
IBGP对等体之间不一定是物理上直连的,只要TCP连接能够建立即可。
为了IBGP对等体路由通告的可靠性,我们一般采用loopback接口建立IBGP邻居关系,同时必须指定路由更新报文的源接口。
路由器一般默认要求EBGP对等体之间是有物理上的直连链路,同时一般也提供改变这个缺省设置的配置命令。
允许同非直连相连网络上的邻居建立EBGP连接,这时需要修改EBGP的最大跳数。
(四)IBGP全连接
物理意义的全连接:
在所有ASBR任意两点之间建立物理链路。
实际组网中不能保证。
逻辑意义的全连接:
AS内所有设备都运行BGP,所有ASBR和所有其他路由器间建立IBGP邻居关系通告路由。
这一点更不可能。
大多数的实际情况是ASBR上同时运行BGP和IGP,其他路由器仅运行IGP。
所以通常在大规模网络中,如果局部无法实现ASBR全连接的话,我们可以利用BGP路由反射器或者BGP联盟来解决这样的问题
(五)有限状态机
有限状态机(finite-statemachine,FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
状态存储关于过去的信息,就是说:
它反映从系统开始到现在时刻的输入变化。
转移指示状态变更,并且用必须满足来确使转移发生的条件来描述它。
动作是在给定时刻要进行的活动的描述。
有多种类型的动作:
进入动作(entryaction):
在进入状态时进行
退出动作:
在退出状态时进行
输入动作:
依赖于当前状态和输入条件进行
转移动作:
在进行特定转移时进行
在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系统设计、软件工程,编译器、网络协议和计算与语言的研究
三、BGP协议特点
BGP路由协议的重点在于控制路由的传播和选择最好的路由,而OSPF、RIP等IGP协议的重点在于发现和计算路由。
通过携带AS路径信息以及BGP的路由通告原则,可以解决自治系统之间与内部的路由环路问题。
BGP为路由信息附带丰富的路由属性,路由策略利用这些属性,可以灵活的控制选路。
BGP-4支持无类别域间选路CIDR(ClasslessInterDomainRouting),也称为supernetting,这是对BGP-3的一个重要改进。
CIDR的引入简化了路由聚合。
路由聚合实际上是合并多个不同路由的过程,这样由通告几条路由变为通告一条路由,减小了路由表规模。
BGP比OSPF、RIP等IGP协议的拓扑图要更抽象一些。
IGP协议构造的是AS内部的路由器的拓扑结构图。
IGP把路由器抽象成若干端点,把路由器之间的链路抽象成边,根据链路的状态或其它参数,生成拓扑图。
根据此拓扑图选择代价最小的路由。
而在BGP中,拓扑图的端点是一个AS区域,边是AS之间的链路。
这体现了EGP和IGP是分层的关系。
即IGP负责在AS内部选择花费最小的路由,EGP负责选择AS间花费最小的路由。
四、BGP路由通告原则
(一)基本原则
●多条路径时,BGPSpeaker只选最优的给自己使用;
●BGPSpeaker只把自己使用的路由通告给对等体;
●BGPSpeaker从EBGP获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP);
●连接一建立,BGPSpeaker将把自己所有BGP路由通告给新对等体;
(二)基本原则的应用
1、BGPSpeaker只把自己使用的路由通告给对等体,即那些属于BGP路由而且在路由表中使用的路由。
上图中若仅在RTD上import直连路由,RTA无法接收到11.4.1.0/24网段的BGP路由。
因为尽管RTC上可以学到RTD通告的关于11.4.1.0/24的BGP路由,但是RTC上同时有一条关于11.4.1.0/24的直连路由,直连路由显然比有IBGP邻居处学习来的路由更优。
因此,虽然输入命令“display/showbgprouting-table”时可以在BGP路由表中看到11.4.1.0/24路由。
但是在全局路由表中,输入命令“display/showiprouting-table”时,显示的却是来源于直连的11.4.1.0/24路由,根据“BGPSpeaker只把自己使用的路由通告给对等体”原则,RTC不会通告这条BGP路由给RTA。
解决方法就是在RTC上import直连路由。
2、BGPSpeaker从IBGP获得的路由不会通告给它的IBGP邻居。
在IBGP对等体相互通告路由的过程中,BGP属性不会做任何改变。
那么,AS内部的路由环路问题应如何避免?
在上图中如果没有这条路由通告规则,RTC从IBGP对等体RTA学到的路由就会通告给RTD,RTD继而会通告给RTB,RTB再把这条路由通告回RTA。
这样就在AS内形成了路由环路。
所以,此原则是在AS内避免路由环路的重要手段。
但是,这条原则的引入,带来了新的问题:
RTD无法收到来自AS12的BGP路由。
一般我们采用IBGP的逻辑全连接来解决这个问题,即在RTA-RTD、RTB-RTC之间再建立两条IBGP连接。
3、BGPSpeaker从IBGP获得的路由是否通告给它的EBGP对等体要依IGP和BGP同步的情况来决定。
如右图所示。
综上所述,一般情况下,如果BGPSpeaker学到去往同一网段的路由多于一条时,只会选择一条最优的路由给自己使用,即上传给路由表。
但是,由于路由器也会选择最优的路由给自己使用,所以BGPSpeaker本身选择的最优的路由也不一定被路由器使用。
例如,一条去往相同网段的BGP优选路由与一条静态路由,这时,由于BGP路由优先级要低,所以路由器会把这条静态路由加到路由表中去,而不会选择BGP优选的路由。
五、成为BGP路由的方法
BGP的主要工作是在自治系统之间传递路由信息,而不是去发现和计算路由信息。
所以,BGP的路由信息需要通过配置命令的方式注入到BGP中。
按照注入的方式可分为三类:
纯动态注入、半动态注入、静态注入。
1、纯动态注入:
是指路由器将通过IGP路由协议动态获得的路由信息直接注入到BGP中去。
它可以把路由器获得的所有IGP路由信息都引入到BGP系统中。
这种方式配置简单,一次性引入所有的路由信息。
相关命令:
import-routeprotocol[process-id][medmed|route-policyroute-policy-name]
protocol:
指定可引入的外部路由协议,例如:
isis、ospf、rip等
process-id:
当引入路由协议为isis、ospf或rip时,根据需要指定进程号。
med:
指定引入路由的MED度量值。
route-policy-name:
从其他路由协议引入路由时,可以使用该参数指定的路由策略过滤路由。
OSPF发现路由18.0.0.1/8把IGP(OSPF)发现的路由纯动态地注入到RTB的BGP路由表中。
2、半动态注入:
是指路由器有选择性的将IGP发现的动态路由信息注入到BGP系统中去。
它和纯动态注入的区别在于:
半动态注入一开始就有选择的注入路由信息;而纯动态是把所有的IGP路由信息都注入,然后再过滤(可选)。
相关命令:
networkipv4-address[mask|mask-length][route-policyroute-policy-name]
ipv4-address:
BGP发布的IPv4网络地址,点分十进制形式。
此网络或主机地址应该是由IGP动态路由协议发现的。
mask/mask-length:
IP地址掩码或掩码长度。
如果没有指定掩码,则按有类地址处理。
route-policy-name:
发布路由应用的路由策略。
OSPF发现路由18.0.0.1/8把IGP(OSPF)发现的路由半动态地注入到RTB的BGP路由表中。
3、静态注入:
它与半动态注入很类似,不同的是半动态注入的路由是由IGP动态路由协议发现的路由。
而静态注入的路由是手工配置的静态路由。
人为配置静态路由18.0.0.1/8把人为配置的静态路由注入到RTB的BGP路由表中。
六、BGP报文(消息)
(一)BGP报文(消息)分类:
1、Open:
是连接建立后发送的第一个消息,它用于建立BGP对等体间的连接关系。
2、KeepAlive:
是用于检测连接有效性的消息。
3、Update:
是BGP系统中最重要的信息,用于在对等体之间交换路由信息,它最多由三部分构成:
不可达路由(unreachable)、路径属性(pathattributes)、网络可达性信息NLRI(networklayerreach/reachableinformation)
4、Notification:
是错误通告消息
(二)BGP报文作用
BGP协议的运行是通过报文(消息)驱动的。
BGP对等体间通过发送OPEN报文来交换各自的版本、自治系统号、保持时间、BGP标识符等信息,进行协商。
UPDATE报文携带的是路由更新信息。
其中包括撤销路由信息和可达路由信息及其各种路由属性。
当BGP检测到差错(连接中断、协商出错、报文差错等)时,发送NOTIFICATION报文,关闭同对等体的连接。
KEEPALIVE报文在BGP对等体间周期地发送,以确保连接保持有效。
OPEN报文主要用于建立邻居(BGP对等体)关系,它是BGP路由器之间的初始握手消息,应该发生在任何通告消息之前。
其他在收到OPEN消息之后,即以KEEPALIVE消息作为响应。
一旦握手成功,则这些BGP邻居就可以进行UPDATE、KEEPALIVE以及NOTIFICATION等消息的交换操作了。
(三)BGP报文格式
BGP报文的格式是一样的,都是”报文头+报文体“的格式,下面就是BGP报文头:
•Type(类型):
1字节,指示报文类型,如OPEN、UPDATE报文等。
•Marker(标记):
本16字节的字段包含消息接收者可以预测的值。
如果消息类型是OPEN,或者OPEN消息没有承载认证信息(作为可选参数),标记必须是全1。
否则,标记的值要使用认证机制来计算。
标记可以用来探测BGP对端的同步丢失,认证进入的BGP报文。
•Length(长度):
两字节无符号整数。
指定了消息的全长,包括头部字节。
1、Open报文
Open报文是由报文头加如下结构构成的。
•Version:
发端BGP版本号
•MyAutonomousSystem:
本地AS号
•HoldTime:
发送方提供建议的保持定时器的设定秒数。
• 保持定时器规定了BGP邻居认为发送方信息有效的时间长度。
如果BGP对等体之前的OPEN报文中HoldTime时间不一致,选择较小的HoldTime。
•BGPIdentifier:
发送端的路由器标识符。
• 该值是在BGP对等体之间进行握手操作的过程中确定的,并且在每个本地接口及每个BGP对等体之间是保持不变的。
•OptionalparmetersLen:
可选的参数的长度
•OptionalParameters:
可选的参数
2、KeepAlive报文
KeepAlive报文只有报文头。
KeepAlive报文主要用于对等体路由器间的运行状态以及链路的可用性确认。
KeepAlive报文的组成只包括一个BGP数据报头。
KeepAlive消息在对等路由器间的交换频度以保证对方保持定时器不超时为限。
当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送Keepalive报文,表明该连接是否还可保持。
缺省情况下,发送Keepalive的时间间隔为60秒,HoldTime是180秒。
每次从邻居处接收到Keepalive报文将重置HoldTime定时器,如果HoldTime定时器超时,peer就认为对等体Down掉。
3、Update报文
Update报文由报文头加如下结构构成。
•UnfeasibleRoutesLen:
(2字节无符号整数)不可达路由长度
•WithdrawnRoutes:
(变长)撤消路由
•PathAttributeLen:
(2字节无符号整数)路由属性长度
•PathAttributes:
(变长)路由属性
•NetworkLayerReachabilityInformation:
(变长)网络可达信息
UPDATE报文是BGP系统中最重要的信息,用于在同伴之间交换路由信息,它最多由三部分构成:
不可达路由(unreachable)、路径属性(pathattributes)、网络可达性信息(NLRI,networklayerreachabilityinformation)。
BGP提供了机制告诉对端先前的路由通告不再能使用。
有三种方式供BGP发言者指示撤销某条路由的服务:
1)对于先前通告的路由,在UPDATE消息的WITHDRAWNROUTES字段内通告了到目的地IP前缀,这样相应的路由被标志为不再使用;
2)通告有相同网络层可达信息的替代路由;
3)关闭BGP邻居之间的连接,这意味着从服务里撤销这一对BGP对等体互相通告的所有的路由。
一个UPDATE消息一次只能通告一条路由,但它可以携带多个路由属性。
一个UPDATE消息一次也可通告多条路由,但它的路由属性必须相同。
一个UPDATE消息可以同时携带多个被撤消的路由。
4、Notification报文
Notification报文由报文头加如下结构构成
•Notification报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误代码(如定时器超时等),以及辅助错误代码及错误信息。
•Errorcode:
错误代码:
•Errsubcode:
辅助错误代码。
•Data:
依赖于不同的错误代码和辅助错误代码。
用于标识错误原因。
错误代码
1
2
3
4
5
6
错误类型
消息头错
Open消息错
Update消息错
保持时间超时
状态机错
退出
(四)BGP报文(消息)应用:
通过TCP建立BGP连接时,发送open消息;
连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端路由信息;
稳定后此时要定时发送KEEPALIVE消息以保持BGP连接的有效性;
当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对端;
BGP使用TCP建立连接,本地监听端口为179。
和TCP建立相同,BGP连接的建立也要经过一系列的对话和握手。
TCP通过握手协商通告其端口等参数,BGP的握手协商的参数有:
BGP版本、BGP连接保持时间、本地的路由器标识(RouterID)、授权信息等。
这些信息都在Open消息中携带。
BGP连接建立后,如果有路由需要发送则发送Update消息通告对端。
Update消息发布路由时,还要携带此路由的路由属性,用以帮助对端BGP协议选择最优路由。
在本地BGP路由变化时,要通过Update消息来通知对端BGP对等体。
经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定状态。
此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。
对于本地BGP,如果在保持时间内,未收到任何对端发来的BGP消息,就认为此BGP连接已经中断,将断开此BGP连接,并删除所有从该对等体学来的BGP路由。
当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体。
如对端BGP版本本地不支持、本地BGP收到了结构非法的Update消息等。
本地BGP退出BGP连接时也要发送NOTIFICATION消息。
七、BGP邻接关系的建立过程
BGP协议有限状态机有六个状态,空闲(Idle)、连接(Connect)、活动(Active)、打开发送(OpenSent)、打开确认(OpenConfirm)和已建立(Established)六种状态之间的转换过程说明了BGP邻居关系建立的过程。
如下图所示:
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状态。
我们可以通过displaybgppeer或showbgppeer命令看到Active和Establish这两种状态。
当BGP的邻居状态是Active时,BGP邻居之间还无法通告路由,主要是因为TCP连接还没有建立起来。
可能的原因有路由不可达,或者BGP的配置有错误。
当BGP的邻居状态是Establish时,表明BGP对等体之间可以通告BGP路由信息了。
八、BGP的路由属性
BGP是一种外部路由协议,其着眼点在于控制路由的传播和选择最好的路由。
为控制路由的传播和路由选择,BGP为路由附带属性信息。
BGP路由属性是一套参数,它对特定的路由进行更深地描述,使得BGP能够对路由进行过滤和选择。
在配置路由策略时将广泛地使用路由属性,但并不是所有路由属性都要被用上。
路由属性被分为以下几类。
∙必遵属性:
在路由更新数据报文中必须存在的路由属性,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浅谈 BGP 协议 工作 原理