路由原理与设计之三BGP路由协议.docx
- 文档编号:4459985
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:38
- 大小:949.99KB
路由原理与设计之三BGP路由协议.docx
《路由原理与设计之三BGP路由协议.docx》由会员分享,可在线阅读,更多相关《路由原理与设计之三BGP路由协议.docx(38页珍藏版)》请在冰豆网上搜索。
路由原理与设计之三BGP路由协议
第一章BGP路由协议原理
本课程详细介绍了BGP协议的基本原理和应用,学完之后相信您对BGP协议会有一个全面、深入的了解。
BGP协议概述
BGP(BorderGatewayProtocol)是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号(AS)序列属性的路径可达信息,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的路由策略。
与OSPF和RIP等在自治区域内部运行的协议对应,BGP是一类EGP(ExteriorGatewayProtocol)协议,而OSPF和RIP等为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是一种外部路由协议,与OSPF、RIP等的内部路由协议不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最好的路由。
通过携带AS路径信息,可以彻底解决路由循环问题。
为控制路由的传播和路由选择,它为路由附带属性信息。
BGP-4支持无类别域间选路CIDR(ClasslessInterDomainRouting),有时也称为supernetting,这是对BGP-3的一个重要改进。
CIDR以一种全新的方法看待IP地址,不再区分A类网、B类网及C类网。
例如一个非法的C类网络地址()采用CIDR表示法就成为一个合法的超级网络,其中/16表示子网掩码由从地址左端开始的16比特构成。
CIDR的引入简化了路由聚合(RoutesAggregation),路由聚合实际上是合并几个不同路由的过程,这样从通告几条路由变为广告一条路由,减化了路由表。
由于政治的、经济的原因,每个自治系统希望对路由进行过滤、选择和控制,因此,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路由器配置)等因素。
为了减小路由表的体积和发送路由的通信量,BGP还支持CIDR(ClasslessInterDomainRouting)。
它使用带有较短的掩码(相对于自然掩码)的路由来在一条路由中表达更多的路由信息。
如从可以使用表示,从而减小了路由表的体积和发送路由信息时的网络流量。
BGP可靠的路由更新
使用TCP作为其传输层协议,提高了协议的可靠性。
路由更新时,BGP只发送增量路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
内部网关协议IGP需引入AS自治区域内部网络拓扑图其它各点的路由,同时向其它端点发送本端点(路由器)所知的路由,如直接路由、静态路由等。
作为外部网关协议,BGP发送和引入路由的单位是整个AS自治区域,即BGP要发送本地路由器所在的AS内部的所有路由,引入其它AS自治区域的所有路由(假设不使用路由策略控制发送和引入)。
其路由数量显然要远远大于IGP发送和引入的路由数量。
因此,类似于IGP那样定时对外广播路由信息是不可取的。
BGP采用发送路由增量(Incremental)的方法,完成全部路由信息的通告和维护:
初始化时发送所有的路由给BGP对等体(BGPPeer),同时在本地保存了已经发送给BGP对等体的路由信息。
当本地的BGP收到了一条新路由时(如通过IGP注入了新路由或加入了新的静态路由),与保存的已发送信息进行比较,如未发送过,则发送,如已发送过则与已经发送的路由进行比较,如新路由花费更小,则发送此新路由,同时更新已发送信息,反之则不发送。
当本地BGP发现一条路由失效时(如对应端口失效),如此路由已发送过,则向BGP对等体发送一个撤消路由消息。
总之,BGP不是每次都广播所有的路由信息,而是在初始化全部路由信息后只发送路由的变化量(增量)。
这样保证了BGP和对端的最小通信量,但同时也增加了BGP的复杂程度。
因为对于IGP,本地路由协议只需发送发送时刻所知的全部路由,而不保存任何已发送信息,路由选择的工作由对端来完成;而BGP必须为每个BGP对端保存已经发送的路由信息,以便发送一条新路由前确认其是否真的应该发送。
自治系统(AutonomousSystem)
自治系统指的是:
由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。
每个自治系统都有唯一的自治系统编号,这个编号是由因特网授权的管理机构分配的。
引入自治系统的基本思想:
就是通过不同的编号来区分不同的自治系统。
这样,当网络管理员不期望自己的通信数据通过某个自治系统时,这种编号方式就十分有用了。
或许,该网络管理员的网络完全可以访问这个自治系统,但由于它可能是由竞争对手在管理,或是缺乏足够的安全机制,因此,可能要回避它。
通过采用路由协议和自治系统编号,路由器就可以确定彼此间的路径和路由信息的交换方法。
同时,作为AS自治区域间的路由协议,由于政治的、经济的等原因,BGP需要按照不同的路由的属性控制路由的发送和引入。
因此,BGP有丰富的路由策略控制手段。
自治系统的编号范围是1到65535,其中1到64511是注册的因特网编号,64512到65535是专用网络编号。
BGP路由传递
BGP系统作为应用层协议运行在一个特定的路由器上。
系统初启时通过发送整个BGP路由表交换路由信息,之后为了更新路由表只交换更新消息(updatemessage)。
系统在运行过程中,是通过接收和发送keep-alive消息来检测相互之间的连接是否正常。
发送BGP消息的路由器称为BGP发言人(speaker),它不断的接收或产生新路由信息,并将它广告(advertise)给其它的BGP发言人。
当BGP发言人收到来自其他自治系统的新路由广告时,如果该路由比当前已知路由好、或者当前还没有可接受路由,它就把这个路由广告给自治系统内所有其它的BGP发言人。
一个BGP发言人也将同它交换消息的其它的BGP发言人称为同伴(peer),若干相关的同伴可以构成同伴组(group)。
一般情况下一条路由是从自治系统内部产生的,它由某种内部路由协议发现和计算,传递到自治系统的边界,由自治系统边界路由器(ASBR)通过EBGP连接传播到其它自治系统中。
路由在传播过程中可能会经过若干个自治系统,这些自治系统称为过渡自治系统。
如:
AS5。
若这个自治系统有多个边界路由器,这些路由器之间运行IBGP来交换路由信息。
这时内部的路由器并不需要知道这些外部路由,它们只需要在边界路由器之间维护IP连通性。
如:
AS2、AS3、AS4。
路由到达自治系统边界后,若内部路由器需要知道这些外部路由,ASBR可以将路由引入内部路由协议。
外部路由的数量是很大的,通常会超出内部路由器的处理能力,因此引入外部路由时一般需要过滤或聚合,以减少路由的数量,极端的情况是使用默认路由。
还有一种自治系统称为StubAS,如:
AS1、AS6、AS7。
其内部只有一个ASBR通过EBGP连接外部,同外部其他AS的通信要靠过渡自治系统来转接。
对一个具体的ASBR来说,其路由的来源有两种:
从对等体接收的或者从IGP引入的。
对于接收的路由,根据其属性(如AS路径、团体属性等)进行过滤,并设置某些属性(如本地优先、MED值等),之后若需要的话,将具体的路由聚合为超网路由。
BGP可能从多个对等体收到目的地相同的路由,根据规则选择最好的路由并加入IP路由表。
对于IGP路由,则要经过引入策略的过滤和设置。
BGP发送优选的BGP路由和引入的IGP路由给对等体。
BGP的两种邻居
BGP在路由器上以下列两种方式运行:
IBGP(InternalBGP)
EBGP(ExternalBGP)
如果两个交换BGP报文的对等体属于同一个自治系统,那么这两个对等体就是IBGP对等体(InternalBGP),如RTB和RTD。
如果两个交换BGP报文的对等体属于不同的自治系统,那么这两个对等体就是EBGP对等体(ExternalBGP),如RTA和RTB。
虽然BGP是运行于自治系统之间的路由协议,但是一个AS的不同边界路由器之间也要建立BGP连接,只有这样才能实现路由信息在全网的传递,如RTB和RTD,为了建立AS100和AS300之间的通信,我们要在它们之间建立IBGP连接。
IBGP对等体之间不一定是物理上直连的,但必须保证逻辑上全连接。
(TCP连接能够建立即可)。
为了IBGP对等体路由通告的可靠性,我们一般都是采用loopback接口建立IBGP邻居关系,同时必须指定路由更新报文的源接口。
peer{group-name|peer-address}connect-interfaceinterface-name
一般的路由器(包括Quidway系列路由器)都默认要求EBGP对等体之间是有物理上的直连链路,同时他们一般也提供改变这个缺省设置的配置命令。
允许同非直连相连网络上的邻居建立EBGP连接。
peer{group-name|peer-address}ebgp-max-hop[ttl]
BGP路由通告原则
BGP的路由通告原则:
多条路径时,BGPSpeaker只选最优的给自己使用;
BGPSpeaker只把自己使用的路由通告给相邻体;
BGPSpeaker从EBGP获得的路由会向它所有BGP相邻体通告(包括EBGP和IBGP);
连接一建立,BGPSpeaker将把自己所有BGP路由通告给新相邻体。
这些通告原则都是BGP的设计者在设计BGP路由协议时硬性规定的几条原则中比较容易理解的。
主要是结合前两条,即为:
BGPSpeaker只把最优路由通告出去在实际运用中,可能会疏忽。
BGP路由通告原则
若仅在RTD上import直连路由,RTA是无法接收到11.4.1.0/24网段的路由的。
因为尽管RTC上可以学到RTD通告的关于的直连路由,但是同时有一条关于的直连路由,直连路由显然比有IBGP邻居处学习来的路由更优。
因此,displaybgprouting-table时可以在BGP路由表中看到路由,但是在全局路由表中,displayiprouting-table时,显示的却是来源于直连的路由,显然不会通告给RTA。
BGP路由通告原则
BGPSpeaker从IBGP获得的路由是否通告给它的EBGP相邻体要依IGP和BGP同步的情况来决定。
如果没有这条路由通告规则,RTC从IBGP对等体RTA从学得的路由就会通告给RTD,RTD继而会通告给RTB,RTB在把这条路由通告回RTA。
这样就在AS内形成了路由环路。
所以,实际上这条路由通告原则是在AS内避免路由自环的重要手段。
BGP路由通告原则
BGP协议规定:
一个BGP路由器不将从内部BGP对等体得知的路由信息通告给外部对等体,除非该路由信息也能通过IGP得知。
若一个路由器能通过IGP得知该路由信息,则可认为路由能在AS中传播,内部通达已有了保证。
BGP的主要任务之一就是向其它自治系统发布该自治系统的网络可达信息。
如胶片所示,RTB会把去往10.1.1.1/24的路由信息封装在UPDATE报文中,通过由RTC、RTD建立的TCP连接通告给RTE,如果RTE不考虑同步问题,直接接受了这样一条路由信息并通告给RTF。
那么,如果RTF或RTE有去往的数据报文要发送,这个数据报文要想到达目的地必须径过RTD和RTC,由于先前没有考虑同步问题,RTD和RTC的路由表中没有去往的路由信息,数据报文到了RTD就会被丢弃。
因此,BGP必须与IGP(如RIP、OSPF等)同步。
同步是指BGP必须等待直到IGP在其所在自治系统中成功传播该选路信息,才向其它自治系统通告过渡信息。
也就是说,当一个路由器从IBGP对等体收到一个目的地的更新信息,在把它通告给其它EBGP对等体之前,要试图验证该目的地通过自治系统内部能否到达(即验证该目的地是否存在于IGP,非BGP路由器是否可传递业务量到该目的地。
若IGP认识这个目的地,才接受这样一条路由信息并通告给EBGP对等体,否则将把这个路由当作与IGP不同步,不进行通告。
如胶片所示,RTE通过IBGP邻居关系获得去往AS100内网络的路由,RTE不会马上将其添加到自己的路由表中,也不会向RTF通告。
RTE看OSPF是否也能获得去往路由。
如果OSPF能就说明IGP和BGP是同步的,RTE就把该路由添加到路由表中,并通告给RTF。
如OSPF没能获得去往路由,则IGP和BGP不同步,RTE不会把去往的路由添加到路由表中,也不会向RTF通告该路由。
解决的方法有很多,最简单的办法是RTB把BGP路由信息引入到OSPF路由表中,再由OSPF通告到RTE,这样就同步了。
但是一般不建议这样做,因为BGP路由表很大,引入到OSPF中来会给系统带来很大负担。
其它的解决办法如:
可以在RTB上配置一条去往的静态路由,再把该静态路由引入到OSPF中,这样也可以达到同步。
但不论是何种方法,都不适用于大规模的网络。
实际上,Quidway系列路由器缺省情况下BGP与IGP是同步的,并且是不可改变的。
但取消同步是有条件的。
当AS中所有的BGP路由器能组成IBGP全闭合网时,可以取消同步,在同步被取消以后,有一个新的问题需要考虑:
RTB去往的下一跳是s0:
,RTB在把该路由信息通告给RTE时,保持路由的下一跳不变,因为它们之间是IBGP。
这样对于RTE来说,去往的下一跳是s0:
。
下一跳s0:
是否可达成为关键问题。
对于RTE来说,如果下一跳s0:
可达,RTE就接受去往的路由,如果下一跳s0:
不可达,RTE就不接受去往的路由。
怎样才能让下一跳可达呢方法同样很多,通常可以通过配置强制改变下一跳来解决问题。
因为AS中所有的BGP路由器是IBGP全闭合连接,路由器在向IBGP邻居通告路由时强制下一跳为自己本身的接口,这样对于IBGP邻居来说,下一跳就是直连网段地址,可达性也就解决了。
胶片中讨论的情况是:
建立IBGP邻居关系的两台路由器之间是TCP连接的,在这种情况下,一般不能取消同步,因为在TCP连接的情况下下一跳可达很难满足。
如胶片所示,可以在RTB上配置RTB在向RTE通告路由信息时会强制改变下一跳为它本身接口。
对于RTE来说是直连的、可达的。
当然,也可以通过配置IGP路由协议和静态路由来解决下一跳可达的问题。
IBGP全连接
物理意义的全连接,在所有ASBR任意两点之间建立物理链路。
实际组网不能保证。
逻辑意义的全连接,即是,AS内所有的设备都运行BGP所有ASBR何所有其他的路由器间建立IBGP邻居关系通告路由。
这一点更不可能,只有存在理论的可能性。
大多数的实际情况也就是ASBR上同时运行BGP和IGP,其他路由器仅运行IGP。
所以通常在大规模的网络中,如果局部无法实现ASBR全连接的话,我们可以利用BGP路由反射器或者BGP联盟来解决这样的问题。
成为BGP路由的途径之一:
纯动态注入
BGP路由协议是运行在自治系统之间的路由协议,它的主要工作是在自治系统之间传递路由信息,而不是去发现和计算路由信息。
发现和计算路由信息的任务由IGP(如:
RIP、OSPF)路由协议来完成。
BGP的路由信息需要通过配置命令的方式注入到BGP中。
按照注入的方式可分为三类:
纯动态注入、半动态注入、静态注入。
纯动态注入是指:
路由器将通过IGP路由协议动态获得的路由信息直接注入到BGP中去。
纯动态注入方式没有对路由信息做任何过滤和选择,它会把路由器获得的所有IGP路由信息都引入到BGP系统中。
从另一角度来说,这样一种路由注入方式配置简单,一次性引入了所有的路由信息。
当然,在实际工程中可以根据需要选择。
成为BGP路由的途径之二:
半动态注入
半动态注入是指:
路由器有选择性的将IGP发现的动态路由信息注入到BGP系统中去。
它和纯动态注入的区别在于不是将IGP发现的所有路由信息注入到BGP中去。
如胶片所示,路由器B通过OSPF协议动态地发现去往网络18.0.0.0/8的路由,再通过配置命令静态将其引入到BGP中,我们称这样一种路由注入方式为半动态注入。
成为BGP路由的途径之三:
静态注入
静态注入是指:
路由器将静态配置的某条路由注入到BGP系统中。
如胶片所示,路由器B首先,建立一条去往网络18.0.0.0/8的静态路由,再通过配置命令将其静态引入到BGP中,我们称这样一种路由注入方式为静态注入。
BGP报文种类
BGP有4种类型的报文,分别为OPEN、UPDATE、NOTIFICATION和KEEPALIVE。
BGP对等体间通过发送OPEN报文来交换各自的版本、自治系统号、保持时间、BGP标识符等信息,进行协商。
UPDATE报文携带的是路由更新信息。
其中包括撤销路由信息和可达路由信息及其路径属性。
当BGP检测到差错(连接中断、协商出错、报文差错等)时,发送NOTIFICATION报文,关闭同对等体的连接。
KEEPALIVE报文在BGP对等体间周期地发送,以确保连接保持有效。
OPEN报文主要用于建立邻居(BGP对等体)关系,它是BGP路由器之间的初始握手消息,应该发生在任何通告消息之前。
其他在收到OPEN消息之后,即以KEEPALIVE消息作为响应。
一旦握手成功,则这些BGP邻居就可以进行UPDATE(更新)、KEEPALIVE(保持激活)以及NOTIFICATION(通知)等消息的交换操作。
BGP报文头
BGP报文头的格式如图所示,每行的宽度为4个字节。
Marker鉴权信息:
本16字节的字段包含消息接收者可以预测的值。
如果消息类型是OPEN,或者OPEN消息没有承载认证信息(作为可选参数),标记必须是全1。
否者,标记的值要使用认证机制来计算(认证机制是通过认证信息的一部分来指定的)。
标记可以用来探测BGP对端的同步丢失,认证进入的BGP消息。
Length消息的长度:
2字节,指示整个消息的长度,包括头标长度,最小的BGP消息长度是19字节(Keepalive报文),最大的长度是4096字节。
Type消息的类型:
1字节,指示报文类型,如OPEN、UPDATE报文等。
1:
OPEN
2:
UPDATE
3:
NOTIFICATION
4:
KEEPALIVE
Open报文
Version:
(1字节)发端BGP版本号
如果BGP对等体之前的OPEN报文中Version不一致,选择较大的Version。
MyAutonomousSystem:
(2字节无符号整数)本地AS号
HoldTime:
(2字节无符号整数)发端建议的保持时间BGPIdentifier:
(4字节)发端的路由器标识符
如果BGP对等体之前的OPEN报文中HoldTime时间不一致,选择较小的HoldTime。
OptionalparmetersLen:
(1字节)可选的参数的长度
OptionalParameters:
(变长)可选的参数
消息的开始部分包括BGP的版本号和发送方的自治系统编号。
接下来是保持时间(HOLDTIME)字段,这是发送方提供建议的保持定时器的设定秒数。
保持定时器规定了BGP邻居认为发送方信息有效的时间长度。
再下一个字段是BGP标识(BGPID),也就是BGP发送方的标识。
该值是在BGP对等体之间进行握手操作的过程中确定的,并且在每个本地接口及每个BGP对等体之间是保持不变的。
KeepAlive报文
KeepAlive报文主要用于对等体路由器间的运行状态以及链路的可用性确认。
KeepAlive报文的组成只包括一个BGP数据报头。
KeepAlive消息在对等路由器间的交换频度以保证对方保持定时器不超时为限。
当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送Keepalive报文,表明该连接是否还可保持。
缺省情况下,发送Keepalive的时间间隔为60秒,Holdtime是180秒。
每次从邻居处接收到Keepalive报文将重置holdtime定时器,如果holdtime定时器超时,peer就认为对等体down掉。
Update报文
UnfeasibleRoutesLen:
(2字节无符号整数)不可达路由长度
WithdrawnRoutes:
(变长)撤消路由
PathAttributeLen:
(2字节无符号整数)路径属性长
PathAttributes:
(变长)路径属性(以下详细说明)
NetworkLayerReachabilityInformation:
(变长)网络可达信息(目标)
其中撤消路由和目标地址的表示方法为一
length一个字节,指示地址前缀的长度。
prefix为地址前缀,长度1至4字节。
UPDATE报文是BGP系统中最重要的信息,用于在同伴之间交换路由信息,它最多由三部分构成:
不可达路由(unreachable)、路径属性(pathattributes)、网络可达性信息(NLRI,networklayerreachabilityinformation)。
BGP提供了机制告诉对端先前的路由通告不再能使用。
有三种方式供BGP发言者指示撤销某条路由的服务。
对于先前通告的路由,在UPDATE消息的WITHDRAWNROUTES字段内通告了到目的地IP前缀,这样相应的路由被标志为不再使用。
有相同网络层可达信息的替代路由能够被通告。
BGP发言者-发言者的连接能够关闭,这意味着从服务里撤销这一对发言者互相通告的所有的路由。
UPDATE消息可以向BGP对等体通告一条路由,也可以撤消多条“行不通”的路由。
不可达路由字段包括一个所撤消路由的IP地址前缀列表。
路径属性字段是一个路径属性的列表,包括:
属性类型、属性长度和属性值等。
网络可达字段包括了BGP路由器所知道的且可到达的IP地址前缀列表。
一个UPDATE消息一次只能通告一个路由,但它可以携带多个路径属性。
一个UPDATE消息一次也可通告多条路由,但它的路径属性必须相同。
一个UPDATE消息可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 路由 原理 设计 BGP 协议