BGP基本原理
随着网络规模的不断扩大以及网络拓扑的复杂变化,网络管理者需要对自制系统间的路由加强控制,于是BGP协议应运而生了,目前BGP的版本是BGP-4,是运行在Internet上的唯一域间路由协议。
一、BGP基本概述
BGP是一种外部网关协议(EGP),与OSPF、RIP等内部网关协议(IGP)不同,其重点关心的不在于发现和计算路由,而在与AS之间传递路由信息以及控制优化路由信息。
BGP是一种“距离矢量”路由协议,其路由信息中携带了所经过的全部AS路径列表。这样,接收该路由信息的BGP路由器可以明确的知道此路由信息是否源于自己的AS。如果路由源于自己的AS,BGP路由会丢弃此条路由,这样就可从根本上避免了AS之间产生环路的可能性。
为了保证BGP协议的可靠传输,其使用TCP协议来承载,端口号位179。通过TCP协议天然的可靠传输机制、重传、排序等机制来保证BGP协议消息交互的可靠性。
在邻居关系建立后,BGP路由器会将自己的全部路由信息通告给邻居;此后,如果路由表有变化,则只将增量部分发送给邻居。这样可以大大减少BGP传播路由所占用的带宽,以利于Internet上传播大量的路由信息,并降低路由器CPU与内存资源的消耗。
处于不同AS的BGP对等体的EBGP对等体(或者EBGP邻居)。尽管BGP连接是基于TCP的,但通常情况下,协议要求建立EBGP连接的路由器之间具有直连的物理链路。如果路由器之间不是物理直达,则可以配置BGP以允许它们之间经过物理多跳而建立EBGP连接。
BGP发言者从EBGP对等体获得路由后,会向所有的BGP对等体(包括EBGP和IBGP对等体)通告这些路由;与此同时,为了防止环路,它不会将学习到的路由再向原发布者发布。
处于同一AS的BGP对等体为IBGP(或者IBGP邻居)。IBGP对等体不一定是物理直连,但是一定要TCP可达。
为了防止产生环路,BGP协议规定,BGP发言者从IBGP获得的路由不向其他的IBGP对等体发布;另外,为了防止产生路由黑洞,协议还规定BGP发言者从IBGP获得的路由是否发布给它的EBGP对等体与是否同步相关。
TCP的可靠传输机制和滑动窗口机制可以确保承载于TCP之上的BGP可以可靠地传递大量路由。但是,TCP连接是以点到点的单播方式来进行报文传输的,因此BGP连接只能是基于点到点的连接。同时,BGP是一种距离矢量型的路由协议,为了防止产生路由环路,协议规定BGP发言者从IBGP对等体获得的路由不能向其他的IBGP对等体发布。这样,运行了BGP协议的AS内,为了确保所有BGP路由器的路由信息相同,则需要使所有的IBGP路由器保持全连接。
通过合理的网络规划来避免“转发黑洞”。除此之外,BGP协议本身还提供了避免机制,就是BGP同步功能。
BGP同步是指IBGP和IGP之间的同步,目的是为了防止在某种情况下转发“黑洞”的出现。BGP启用同步功能后,BGP发言者在接收到IBGP邻居发布的路由后,会查看该路由是否已经在IGP路由表中。只有当IGP路由表中有这条路由时,BGP路由表才会将这条路由置为有效并发布;如果IGP路由表中没有该路由,则BGP将此条路由置为无效,并不向自己的对等体发布。
虽然开启BGP同步可以避免转发“黑洞”的情况发生,但是如果能够确保报文转发路径上有相应的IGP路由,则没有必要开启BGP同步功能。如:当AS内路由器间建立了IBGP全连接时,所有的路由器都有物理直达的IBGP连接,不会产生个别路由器缺少某些BGP路由信息的情况,因此并不需要配置BGP同步。注意:MSR路由器默认关闭BGP同步。
二、BGP基本原理
1、BGP消息
BGP所有的消息的格式都是“消息头+消息体”,其消息头的长度为19个字节。
? Open消息:Open消息是TCP连接建立后发送的第一个消息,用
于建立BGP对等体之间的连接关系并进行参数协商。内容包括使用的BGP版本号、自己所属的AS号、路由器ID、Hold Time值、认证信息等信息。 ? Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,
主要作用是让BGP邻居知道自己的存在,保持邻居关系的稳定性;还有一个作用是对收到Open消息的回应。其消息格式中只包含消息头,没有附加其他任何字段。长度为19字节,消息中只有标记、长度、类型,不包括数据域。
? Update消息:Update消息用于在对等体之间交换路由信息。它
既可以发布可达路由信息,也可以撤销不可达路由信息;一条Update消息可以通告一类具有相同路径属性的可达路由,同时Update消息还可以携带多跳不可达路由。 ? Notification消息:Notification消息的作用为错误通知。BGP
发言者如果检测到对方发过来的消息有错误或者主动断开BGP连接,都会发出Notification消息来通知BGP邻居,并关闭连接且回到idle状态;如果收到邻居发来的Notification消息,也会将连接状态变为idle。Notification消息的内容包括错误代码和错误子代码及错误数据等信息。
注:RFC 2918中定义了BGP第五种消息Route-refresh,该消息用来要求对等体重新发送指定地址族的路由信息。 2、BGP协议状态机
BGP协议有限状态机共包含6个状态,他们之间的转换过程实际上描述了BGP对等体关系建立的过程:
? Idle状态(空闲状态):此状态为初始状态,不接受任何BGP连
接,等待start事件的产生。如果有start事件产生则系统开启ConnectRetry定时器向邻居发起TCP连接,将状态变为Connect。 ? Connect状态(连接状态):在Connect状态,系统会等待TCP连
接建立完成。如果TCP状态为Established,则拆除ConnectRetry定时器,并发送Open消息,将状态变为OpenSent;如果TCP连接失败则重置ConnectRetry定时器并转为Active状态;如果ConnectRetry timer expired(重传定时器)超时,则重新连接,仍处于Connect状态。
? Active状态(活跃状态):如果已经有启动事件但TCP连接未完
成则处于Active状态。在Active状态系统会响应ConnectRetry timer expired事件,重新进行TCP连接,同时重置ConnectRetry定时器,变为Connect状态;如果与对方的TCP连接成功建立则发送Open消息,将状态变为OpenSent,并清除ConnectRetry定时器,重置HoldTime定时器。
? OpenSent状态(Open消息已发送):此状态表明系统已经发出
Open消息,在等待BGP邻居发给自己的Open消息。如果收到BGP邻居发来的Open消息,且没有错误的话则转向OpenConfirm状态,同时将Hold Time定时器的值置为协商值,发送Keepalive消息并置Keepalive定时器;如果有错误则发送Notification消息并断开连接。
? OpenConfirm状态(Open消息确认):此状态表明系统已经发出
Keepalive消息,并等待BGP邻居的Keepalive消息。如果收到Keepalive消息则转向Established状态并重置HoldTime定时器;如果Keepalive定时器超时则重置并发送Keepalive消息;如果收到Notification消息,则断开连接。
? Established状态(连接建立):如果处于Established状态,则
说明BGP连接建立完成,可以发送Update消息交换路由信息;如果Keepalive定时器超时则重置Keepalive定时器并发送Keepalive消息;如果收到Keepalive消息则重置HoldTime定时器;如果检测到错误或收到Notification消息则断开连接。 另外,在除了Idle状态意外的其它五个状态出现任何错误的时候,BGP状态就会退回到Idle状态。 3、BGP路由属性
BGP路由属性是路由信息所携带的一组参数,它对路由进行了进一步的描述,表达了每一条路由的各种特性。
路由属性是BGP协议区分其他协议的重要特征。BGP通过比较路由携带的属性,来完成路由选择、环路避免等工作。
BGP的每个属性都有特定的含义,具有不同的用途并可以灵活的应用;并且路由属性是基于“TLV”架构的,易于扩展。这些特性是的BGP的功能十分强大。
BGP路由属性包含四类: ? 公认必遵(Well-known mandatory):所有BGP路由器都必须能够
识别这种属性,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错。其包含:Origin、AS_Path、Next_hop。
AS_Path属性:
AS_Path属性为公认必遵属性,该属性域指示出该路由更新信息经过了那些AS路径,主要作用是保证AS之间无环路。
AS_Path属性按一定次序记录了某条路由从本地到目的地址所经过的所有AS号。当BGP将一条路由通告到其他AS时,便会把本地AS号添加在AS_Path列表的最前面。收到此路由的BGP路由器根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在最前面,其他AS号按顺序依次排列。
使用AS路径属性的目的是保证无路由环路。通常情况下,当一个路由更新到达一个AS的边界路由器时,如果边界路由器发现这个AS号码在路由的AS路径属性中已经存在,边界路由器会丢弃这个路由。
同时,AS_Path属性也可以用于路由的选择和过滤。在其他因素相同的情况下,BGP会优先选择AS_Path最短的路由(选择路径最短)的路由。
BGP发言者在向EBGP邻居发送路由更新时修改AS_Path属性,向IBGP邻居发送时不修改该属性。
在某些应用中,可以使用路由策略来人为地增加AS路径的长度,以便更灵活的控制BGP路径的选择。
Next_Hop属性:
下一跳(Next_Hop)属性是公认必遵属性,它为BGP发言者指示了去往目的地的下一跳。BGP的下一跳属性和IGP的有所不同,不一定就是邻居路由器的IP地址。下一跳性取值情况分为以下几种(有点像OSPF中的ABR和ASBR的概念!!!!):
? BGP发言者把自己产生的路由发给所有邻居时,将把该路由
信息下一跳属性设置为自己与对端连接的接口地址;
? BGP发言者把从EBGP邻居得到的路由发给IBGP邻居时,并
不改变路由信息的下一跳属性,将从EBPG得到的路由的Next_Hop直接传递给IBGP对等体。
? BGP发言者把接收到的路由发给EBGP对等体时,将把该路由
信息的下一跳属性设置为本地与对端连接的接口地址。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库BGP基本原理与案例 - 图文在线全文阅读。
相关推荐: