《路由原理与设计之三--BGP路由协议(18页).doc》由会员分享,可在线阅读,更多相关《路由原理与设计之三--BGP路由协议(18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-第一章第二章第三章第四章 路由原理与设计之三-BGP路由协议-第 18 页第五章 BGP路由协议原理 本课程详细介绍了BGP协议的基本原理和应用,学完之后相信您对BGP协议会有一个全面、深入的了解。1.1BGP协议概述BGP(Border Gateway Protocol)是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号(AS)序列属性的路径可达信息,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的路由策略。与OSPF和RIP 等在自治区域内部运行的协议对应,BGP是一类EGP(Exterior Gateway Proto
2、col)协议,而OSPF和RIP等为IGP(Interior Gateway Protocol)协议。BGP协议经常用于ISP之间。BGP协议从1989年以来就已经开始使用。它最早发布的三个版本分别是RFC1105(BGP-1)、RFC1163(BGP-2)和RFC1267(BGP-3),当前使用的是RFC1771(BGP- 4)。 随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,影响了网络的性能。BGP支持无类别域间选路CIDR(Classless Interdomain Routing),可以有效的减少日益增大的路由表。BGP-4正迅速成为事实上
3、的Internet边界路由协议标准。特性描述如下:BGP是一种外部路由协议,与OSPF、RIP等的内部路由协议不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最好的路由。通过携带AS路径信息,可以彻底解决路由循环问题。为控制路由的传播和路由选择,它为路由附带属性信息。 BGP-4支持无类别域间选路CIDR(Classless InterDomain Routing),有时也称为supernetting,这是对BGP-3的一个重要改进。CIDR以一种全新的方法看待IP地址,不再区分A类网、B类网及C类网。例如一个非法的C类网络地址192.213.0.0(255.255.0.0)采用
4、CIDR表示法192.213.0.0/16就成为一个合法的超级网络,其中/16表示子网掩码由从地址左端开始的16比特构成。CIDR的引入简化了路由聚合(Routes Aggregation),路由聚合实际上是合并几个不同路由的过程,这样从通告几条路由变为广告一条路由,减化了路由表。由于政治的、经济的原因,每个自治系统希望对路由进行过滤、选择和控制, 因此,BGP-4 提供了丰富的路由策略,它使得BGP便于扩展以支持因特网新的发展。与OSPF,RIP等IGP协议相比,BGP的拓扑图要更抽象和粗略一些。因为IGP协议构造的是AS内部的路由器的拓扑结构图。IGP把路由器抽象成若干端点,把路由器之间的
5、链路抽象成边,根据链路的状态等参数和一定的度量标准,每条边配以一定的权值,生成拓扑图。根据此拓扑图选择代价(两点间经过的边的权值和)最小的路由。这里有一个假设,即路由器(端点)转发数据包是没有代价的。而在BGP中,拓扑图的端点是一个AS区域,边是AS之间的链路。此时,数据包经过一个端点(AS自治区域)时的代价就不能假设为0了,此代价要由IGP来负责计算。这体现了EGP和IGP是分层的关系。即IGP负责在AS内部选择花费最小的路由,EGP负责选择AS间花费最小的路由。 BGP作为EGP的一种,选择路由时考虑的是AS间的链路花费、AS区域内的花费(由BGP路由器配置)等因素。为了减小路由表的体积和
6、发送路由的通信量,BGP还支持CIDR(Classless InterDomain Routing)。它使用带有较短的掩码(相对于自然掩码)的路由来在一条路由中表达更多的路由信息。如从202.112.1.0/24202.112.254.0/24可以使用202.112.0.0/16表示,从而减小了路由表的体积和发送路由信息时的网络流量。1.2BGP可靠的路由更新使用TCP作为其传输层协议,提高了协议的可靠性。路由更新时,BGP只发送增量路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。内部网关协议IGP需引入AS自治区域内部网络拓扑图其它各点的路由,同时向
7、其它端点发送本端点(路由器)所知的路由,如直接路由、静态路由等。作为外部网关协议,BGP发送和引入路由的单位是整个AS自治区域,即BGP要发送本地路由器所在的AS内部的所有路由,引入其它AS自治区域的所有路由(假设不使用路由策略控制发送和引入)。其路由数量显然要远远大于IGP发送和引入的路由数量。因此,类似于IGP那样定时对外广播路由信息是不可取的。BGP采用发送路由增量(Incremental)的方法,完成全部路由信息的通告和维护:初始化时发送所有的路由给BGP对等体(BGP Peer),同时在本地保存了已经发送给BGP对等体的路由信息。当本地的BGP收到了一条新路由时(如通过IGP注入了新
8、路由或加入了新的静态路由),与保存的已发送信息进行比较,如未发送过,则发送,如已发送过则与已经发送的路由进行比较,如新路由花费更小,则发送此新路由,同时更新已发送信息,反之则不发送。当本地BGP发现一条路由失效时(如对应端口失效),如此路由已发送过,则向BGP对等体发送一个撤消路由消息。总之,BGP不是每次都广播所有的路由信息,而是在初始化全部路由信息后只发送路由的变化量(增量)。这样保证了BGP和对端的最小通信量,但同时也增加了BGP的复杂程度。因为对于IGP,本地路由协议只需发送发送时刻所知的全部路由,而不保存任何已发送信息,路由选择的工作由对端来完成;而BGP必须为每个BGP对端保存已经
9、发送的路由信息,以便发送一条新路由前确认其是否真的应该发送。1.3自治系统(Autonomous System)自治系统指的是:由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。每个自治系统都有唯一的自治系统编号,这个编号是由因特网授权的管理机构分配的。引入自治系统的基本思想:就是通过不同的编号来区分不同的自治系统。这样,当网络管理员不期望自己的通信数据通过某个自治系统时,这种编号方式就十分有用了。或许,该网络管理员的网络完全可以访问这个自治系统,但由于它可能是由竞争对手在管理,或是缺乏足够的安全机制,因此,可能要回避它。通过采用路由协议和自治系统编号,路由器就可以确定彼此间的路径
10、和路由信息的交换方法。同时,作为AS自治区域间的路由协议,由于政治的、经济的等原因,BGP需要按照不同的路由的属性控制路由的发送和引入。因此,BGP有丰富的路由策略控制手段。自治系统的编号范围是1到65535,其中1到64511是注册的因特网编号,64512到65535是专用网络编号。1.4BGP路由传递BGP系统作为应用层协议运行在一个特定的路由器上。系统初启时通过发送整个BGP路由表交换路由信息,之后为了更新路由表只交换更新消息(update message)。系统在运行过程中,是通过接收和发送keep-alive消息来检测相互之间的连接是否正常。发送BGP消息的路由器称为BGP发言人(s
11、peaker),它不断的接收或产生新路由信息,并将它广告(advertise)给其它的BGP发言人。当BGP发言人收到来自其他自治系统的新路由广告时,如果该路由比当前已知路由好、或者当前还没有可接受路由,它就把这个路由广告给自治系统内所有其它的BGP发言人。一个BGP发言人也将同它交换消息的其它的BGP发言人称为同伴(peer),若干相关的同伴可以构成同伴组(group)。一般情况下一条路由是从自治系统内部产生的,它由某种内部路由协议发现和计算,传递到自治系统的边界,由自治系统边界路由器(ASBR)通过EBGP连接传播到其它自治系统中。路由在传播过程中可能会经过若干个自治系统,这些自治系统称为
12、过渡自治系统。如:AS5。若这个自治系统有多个边界路由器,这些路由器之间运行IBGP来交换路由信息。这时内部的路由器并不需要知道这些外部路由,它们只需要在边界路由器之间维护IP连通性。如:AS2、AS3、AS4。路由到达自治系统边界后,若内部路由器需要知道这些外部路由,ASBR可以将路由引入内部路由协议。外部路由的数量是很大的,通常会超出内部路由器的处理能力,因此引入外部路由时一般需要过滤或聚合,以减少路由的数量,极端的情况是使用默认路由。还有一种自治系统称为Stub AS,如:AS1、AS6、AS7。其内部只有一个ASBR通过EBGP连接外部,同外部其他AS的通信要靠过渡自治系统来转接。对一
13、个具体的ASBR来说,其路由的来源有两种:从对等体接收的或者从IGP引入的。对于接收的路由,根据其属性(如AS路径、团体属性等)进行过滤,并设置某些属性(如本地优先、MED值等),之后若需要的话,将具体的路由聚合为超网路由。BGP可能从多个对等体收到目的地相同的路由,根据规则选择最好的路由并加入IP路由表。对于IGP路由,则要经过引入策略的过滤和设置。BGP发送优选的BGP路由和引入的IGP路由给对等体。1.5BGP的两种邻居BGP在路由器上以下列两种方式运行:IBGP(Internal BGP)EBGP(External BGP)如果两个交换BGP报文的对等体属于同一个自治系统,那么这两个对
14、等体就是IBGP对等体(Internal BGP) ,如RTB和RTD。如果两个交换BGP报文的对等体属于不同的自治系统,那么这两个对等体就是EBGP对等体 (External BGP) ,如RTA和RTB。虽然BGP是运行于自治系统之间的路由协议,但是一个AS的不同边界路由器之间也要建立BGP连接,只有这样才能实现路由信息在全网的传递,如RTB和RTD,为了建立AS100和AS300之间的通信,我们要在它们之间建立IBGP连接。IBGP对等体之间不一定是物理上直连的,但必须保证逻辑上全连接。(TCP连接能够建立即可)。为了IBGP对等体路由通告的可靠性,我们一般都是采用loopback接口建
15、立IBGP邻居关系,同时必须指定路由更新报文的源接口。peer group-name | peer-address connect-interface interface-name一般的路由器(包括Quidway系列路由器)都默认要求EBGP对等体之间是有物理上的直连链路,同时他们一般也提供改变这个缺省设置的配置命令。允许同非直连相连网络上的邻居建立EBGP连接。peer group-name | peer-address ebgp-max-hop ttl 1.6BGP路由通告原则BGP 的路由通告原则:多条路径时,BGP Speaker只选最优的给自己使用;BGP Speaker只把自己使用
16、的路由通告给相邻体;BGP Speaker从EBGP获得的路由会向它所有BGP相邻体通告(包括EBGP和IBGP);连接一建立,BGP Speaker将把自己所有BGP路由通告给新相邻体。这些通告原则都是BGP的设计者在设计BGP 路由协议时硬性规定的几条原则中比较容易理解的。主要是结合前两条,即为:BGP Speaker只把最优路由通告出去在实际运用中,可能会疏忽。1.7BGP路由通告原则若仅在RTD上import直连路由,RTA是无法接收到11.4.1.0/24网段的路由的。因为尽管RTC上可以学到RTD通告的关于11.4.1.0/24的直连路由,但是同时有一条关于11.4.1.0/24的
17、直连路由,直连路由显然比有IBGP邻居处学习来的路由更优。因此,display bgp routing-table时可以在BGP路由表中看到11.4.1.0/24路由,但是在全局路由表中,display ip routing-table时,显示的却是来源于直连的11.4.1.0/24路由,显然不会通告给RTA。1.8BGP路由通告原则BGP Speaker 从IBGP获得的路由是否通告给它的EBGP相邻体要依IGP和BGP同步的情况来决定。如果没有这条路由通告规则,RTC从IBGP对等体RTA从学得的路由就会通告给RTD,RTD继而会通告给RTB,RTB在把这条路由通告回RTA。这样就在AS内
18、形成了路由环路。所以,实际上这条路由通告原则是在AS内避免路由自环的重要手段。1.9BGP路由通告原则BGP协议规定:一个BGP 路由器不将从内部BGP对等体得知的路由信息通告给外部对等体,除非该路由信息也能通过IGP得知。若一个路由器能通过IGP得知该路由信息,则可认为路由能在AS中传播,内部通达已有了保证。BGP的主要任务之一就是向其它自治系统发布该自治系统的网络可达信息。如胶片所示,RTB会把去往10.1.1.1/24 的路由信息封装在UPDATE报文中,通过由RTC、RTD建立的TCP 连接通告给RTE,如果RTE不考虑同步问题,直接接受了这样一条路由信息并通告给RTF。那么,如果RT
19、F 或RTE有去往10.1.1.1/24 的数据报文要发送,这个数据报文要想到达目的地必须径过RTD和RTC,由于先前没有考虑同步问题,RTD和RTC的路由表中没有去往10.1.1.1/24 的路由信息,数据报文到了RTD就会被丢弃。因此,BGP必须与IGP(如RIP、OSPF等)同步。同步是指BGP必须等待直到IGP在其所在自治系统中成功传播该选路信息,才向其它自治系统通告过渡信息。也就是说,当一个路由器从IBGP对等体收到一个目的地的更新信息,在把它通告给其它EBGP对等体之前,要试图验证该目的地通过自治系统内部能否到达(即验证该目的地是否存在于IGP,非BGP路由器是否可传递业务量到该目
20、的地。若IGP认识这个目的地,才接受这样一条路由信息并通告给EBGP对等体,否则将把这个路由当作与IGP不同步,不进行通告。如胶片所示,RTE 通过IBGP邻居关系获得去往AS100内网络10.1.1.1/24的路由,RTE 不会马上将其添加到自己的路由表中,也不会向RTF通告。RTE看OSPF是否也能获得去往10.1.1.1/24 路由。如果OSPF能就说明IGP 和 BGP是同步的,RTE 就把该路由添加到路由表中,并通告给RTF。如OSPF没能获得去往10.1.1.1/24 路由,则IGP 和BGP不同步,RTE不会把去往10.1.1.1/24 的路由添加到路由表中,也不会向RTF 通告
21、该路由。解决的方法有很多,最简单的办法是RTB把BGP路由信息引入到OSPF路由表中,再由OSPF 通告到RTE,这样就同步了。但是一般不建议这样做,因为BGP路由表很大,引入到OSPF中来会给系统带来很大负担。其它的解决办法如:可以在RTB上配置一条去往10.1.1.1/24 的静态路由,再把该静态路由引入到OSPF中,这样也可以达到同步。但不论是何种方法,都不适用于大规模的网络。实际上,Quidway 系列路由器缺省情况下BGP与IGP是同步的,并且是不可改变的。但取消同步是有条件的。当AS中所有的BGP 路由器能组成IBGP全闭合网时,可以取消同步,在同步被取消以后,有一个新的问题需要考
22、虑:RTB 去往10.1.1.1/24 的下一跳是s0:1.1.1.1/24 ,RTB在把该路由信息通告给RTE时,保持路由的下一跳不变,因为它们之间是IBGP。这样对于RTE来说,去往10.1.1.1/24 的下一跳是s0:1.1.1.1/24 。 下一跳s0:1.1.1.1/24 是否可达成为关键问题。对于RTE来说,如果下一跳s0:1.1.1.1/24 可达,RTE就接受去往10.1.1.1/24 的路由,如果下一跳s0:1.1.1.1/24 不可达,RTE就不接受去往10.1.1.1/24 的路由。怎样才能让下一跳可达呢?方法同样很多,通常可以通过配置强制改变下一跳来解决问题。因为AS
23、中所有的BGP 路由器是IBGP全闭合连接,路由器在向IBGP邻居通告路由时强制下一跳为自己本身的接口,这样对于IBGP邻居来说,下一跳就是直连网段地址,可达性也就解决了。 胶片中讨论的情况是:建立IBGP邻居关系的两台路由器之间是TCP连接的,在这种情况下,一般不能取消同步,因为在TCP连接的情况下下一跳可达很难满足。如胶片所示,可以在RTB上配置RTB在向RTE通告路由信息时会强制改变下一跳为它本身接口 2.1.1.2 。对于RTE来说2.1.1.2 是直连的、可达的。当然,也可以通过配置IGP 路由协议 和静态路由来解决下一跳可达的问题。1.10IBGP全连接物理意义的全连接,在所有AS
24、BR任意两点之间建立物理链路。实际组网不能保证。逻辑意义的全连接,即是,AS内所有的设备都运行BGP所有ASBR何所有其他的路由器间建立IBGP邻居关系通告路由。这一点更不可能,只有存在理论的可能性。大多数的实际情况也就是ASBR上同时运行BGP和IGP,其他路由器仅运行IGP。所以通常在大规模的网络中,如果局部无法实现ASBR全连接的话,我们可以利用BGP路由反射器或者BGP联盟来解决这样的问题。1.11成为BGP路由的途径之一:纯动态注入BGP 路由协议是运行在自治系统之间的路由协议,它的主要工作是在自治系统之间传递路由信息,而不是去发现和计算路由信息。发现和计算路由信息的任务由IGP (
25、如:RIP、OSPF)路由协议来完成。BGP 的路由信息需要通过配置命令的方式注入到BGP中。按照注入的方式可分为三类:纯动态注入、半动态注入、静态注入。纯动态注入是指:路由器将通过IGP路由协议动态获得的路由信息直接注入到BGP中去。纯动态注入方式没有对路由信息做任何过滤和选择,它会把路由器获得的所有IGP 路由信息都引入到BGP系统中。从另一角度来说,这样一种路由注入方式配置简单,一次性引入了所有的路由信息。当然,在实际工程中可以根据需要选择。1.12成为BGP路由的途径之二:半动态注入半动态注入是指:路由器有选择性的将IGP发现的动态路由信息注入到BGP系统中去。它和纯动态注入的区别在于
26、不是将IGP发现的所有路由信息注入到BGP中去。如胶片所示,路由器B通过OSPF 协议动态地发现去往网络18.0.0.0/8的路由,再通过配置命令静态将其引入到BGP中,我们称这样一种路由注入方式为半动态注入。1.13成为BGP路由的途径之三:静态注入静态注入是指:路由器将静态配置的某条路由注入到BGP系统中。如胶片所示,路由器B首先,建立一条去往网络18.0.0.0/8 的静态路由,再通过配置命令将其静态引入到BGP中,我们称这样一种路由注入方式为静态注入。1.14BGP报文种类BGP有4种类型的报文,分别为OPEN、UPDATE、NOTIFICATION和KEEPALIVE。BGP对等体间
27、通过发送OPEN报文来交换各自的版本、自治系统号、保持时间、BGP标识符等信息,进行协商。UPDATE报文携带的是路由更新信息。其中包括撤销路由信息和可达路由信息及其路径属性。当BGP检测到差错(连接中断、协商出错、报文差错等)时,发送NOTIFICATION 报文,关闭同对等体的连接。KEEPALIVE报文在BGP对等体间周期地发送,以确保连接保持有效。OPEN报文主要用于建立邻居(BGP对等体)关系,它是BGP路由器之间的初始握手消息,应该发生在任何通告消息之前。其他在收到OPEN消息之后,即以KEEPALIVE消息作为响应。一旦握手成功,则这些BGP邻居就可以进行UPDATE(更新)、K
28、EEPALIVE(保持激活)以及NOTIFICATION(通知)等消息的交换操作。1.15BGP报文头BGP报文头的格式如图所示,每行的宽度为4个字节。Marker 鉴权信息:本16字节的字段包含消息接收者可以预测的值。如果消息类型是OPEN,或者OPEN消息没有承载认证信息(作为可选参数),标记必须是全1。否者,标记的值要使用认证机制来计算(认证机制是通过认证信息的一部分来指定的)。标记可以用来探测BGP对端的同步丢失,认证进入的BGP消息。Length 消息的长度:2字节,指示整个消息的长度,包括头标长度,最小的BGP消息长度是19字节(Keepalive报文),最大的长度是4096字节。
29、Type 消息的类型:1字节,指示报文类型,如OPEN、UPDATE报文等。1 :OPEN2 :UPDATE3 :NOTIFICATION4 :KEEPALIVE1.16Open报文Version :(1字节) 发端BGP版本号如果BGP对等体之前的OPEN报文中Version不一致,选择较大的Version。My Autonomous System :(2字节无符号整数) 本地AS号Hold Time :(2字节无符号整数) 发端建议的保持时间 BGP Identifier :(4字节)发端的路由器标识符 如果BGP对等体之前的OPEN报文中Hold Time时间不一致,选择较小的Hold
30、Time。Optional parmeters Len :(1字节) 可选的参数的长度Optional Parameters :(变长) 可选的参数消息的开始部分包括BGP的版本号和发送方的自治系统编号。接下来是保持时间(HOLD TIME)字段,这是发送方提供建议的保持定时器的设定秒数。保持定时器规定了BGP邻居认为发送方信息有效的时间长度。再下一个字段是BGP标识(BGP ID),也就是BGP发送方的标识。该值是在BGP对等体之间进行握手操作的过程中确定的,并且在每个本地接口及每个BGP对等体之间是保持不变的。1.17KeepAlive报文KeepAlive 报文主要用于对等体路由器间的运
31、行状态以及链路的可用性确认。KeepAlive 报文的组成只包括一个BGP数据报头。 KeepAlive 消息在对等路由器间的交换频度以保证对方保持定时器不超时为限。当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送Keepalive 报文,表明该连接是否还可保持。缺省情况下,发送Keepalive 的时间间隔为 60 秒,Hold time是180秒。每次从邻居处接收到Keepalive 报文将重置hold time定时器,如果hold time定时器超时,peer就认为对等体down掉。1.18Update报文Unfeasib
32、le Routes Len :(2字节无符号整数) 不可达路由长度Withdrawn Routes :(变长) 撤消路由Path Attribute Len :(2字节无符号整数) 路径属性长Path Attributes :(变长) 路径属性(以下详细说明)Network Layer Reachability Information :(变长) 网络可达信息(目标)其中撤消路由和目标地址的表示方法为一 的二元组。length一个字节,指示地址前缀的长度。prefix为地址前缀,长度1至4字节。UPDATE 报文是BGP系统中最重要的信息,用于在同伴之间交换路由信息,它最多由三部分构成:不可达
33、路由(unreachable)、路径属性(path attributes)、网络可达性信息(NLRI,network layer reachability information)。BGP提供了机制告诉对端先前的路由通告不再能使用。有三种方式供BGP发言者指示撤销某条路由的服务。对于先前通告的路由,在UPDATE消息的WITHDRAWN ROUTES字段内通告了到目的地IP前缀,这样相应的路由被标志为不再使用。有相同网络层可达信息的替代路由能够被通告。BGP发言者-发言者的连接能够关闭,这意味着从服务里撤销这一对发言者互相通告的所有的路由。UPDATE 消息可以向BGP对等体通告一条路由,也可
34、以撤消多条“行不通”的路由。不可达路由字段包括一个所撤消路由的IP地址前缀列表。路径属性字段是一个路径属性的列表,包括:属性类型、属性长度和属性值等。网络可达字段包括了BGP路由器所知道的且可到达的IP地址前缀列表。一个UPDATE 消息一次只能通告一个路由,但它可以携带多个路径属性。一个UPDATE 消息一次也可通告多条路由,但它的路径属性必须相同。一个UPDATE 消息可以同时列出多个被撤消的路由。1.19Notification报文Notification 报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误代码(如定时器超时等),包括错误代码、辅助错误代码及错误信息。E
35、rrorcode :(1字节)错误代码: Errsubcode :(1字节) 辅助错误代码,略。Data :(变长) 依赖于不同的错误代码和辅助错误代码。用于诊断错误原因。1.20BGP协议的状态机BGP协议有限状态机有六个状态,它们之间的转换过程示意了BGP邻居关系建立的过程。首先是Idle 状态,BGP协议 一旦Start ,状态机就进入Connect 状态 ,在Connect 状态 ,如果Connect- Retry 定时器超时,BGP状态机会停留在Connect 状态 ,同时, BGP 试图建立TCP 连接,如果TCP 连接建立失败,BGP 状态机进入Active 状态。 如果TCP
36、连接建立成功,BGP状态机就直接进入OpenSent 状态。在Active 状态,如果TCP 连接依然不能建立起来,那么BGP状态机就会一直停留在Active 状态,直到TCP 连接建立成功,才会进入OpenSent 状态。在OpenSent 状态 ,BGP一旦收到了一个正确的Open 报文,就会进入OpenConfirm 状态。在OpenConfirm 状态 ,如果KeepAlive 定时器超时,BGP状态机就会停留在OpenConfirm状态。直到BGP收到KeepAlive 报文,BGP状态机才会进入Established 状态。 这时BGP连接才算建立起来。另外,在除Idle 状态以外
37、的其它五个状态出现任何Error 的时候,BGP状态机就会退回到Idle 状态。Idle(空闲):Idle 是BGP连接的第一个状态,在空闲状态,BGP在等待一个启动事件,启动事件出现以后,BGP初始化资源,复位连接重试计时器(Connect-Retry),发起一条TCP连接,同时转入Connect(连接)状态。Connect(连接):在Connect 状态,BGP发起第一个TCP连接,如果 连接重试计时器(Connect-Retry)超时,就重新发起TCP连接,并继续保持在Connect 状态,如果TCP 连接成功,就转入OpenSent 状态,如果TCP 连接失败,就转入Active 状态
38、。Active(活跃):在Active状态,BGP总是在试图建立TCP 连接,如果连接重试计时器(Connect-Retry)超时,就退回到Connect 状态,如果TCP 连接成功,就转入OpenSent 状态,如果TCP 连接失败,就继续保持在Active状态,并继续发起TCP连接。OpenSent(打开消息已发送):在OpenSent 状态,TCP连接已经建立,BGP也已经发送了第一个Open报文,剩下的工作,BGP就在等待其对等体发送Open 报文。并对收到的Open报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keep
39、alive 报文,并复位Keepalive 计时器,开始计时。同时转入OpenConfirm状态。OpenConfirm(打开消息确认)状态:在OpenConfirm状态,BGP等待一个Keepalive 报文,同时复位保持计时器,如果收到了一个Keepalive 报文,就转入Established 阶段,BGP邻居关系就建立起来了。如果TCP连接中断,就退回到Idle 状态。Established(连接已建立):在Established 状态,BGP 邻居关系已经建立,这时,BGP将和它的邻居们交换Update 报文,同时复位保持计时器。我们常常在display bgp peer为activ
40、e时,看到这样两种状态active和establish。当BGP的邻居状态是active时,BGP邻居之间还无法通告路由,主要是因为TCP连接还没有建立起来,大家可以注意一下,AS内的IGP是否可以让建立IBGP的两点互通。我们常常在display bgp peer为establish时,表明IBGP对等体之间可以通告IBGP路由信息了。1.21BGP协议中消息的应用BGP使用TCP 建立连接,本地监听端口为179。 和TCP建立相同,BGP连接的建立也要经过一系列的对话和握手。TCP通过握手协商通告其端口等参数,BGP的握手协商的参数有:BGP版本、BGP连接保持时间、本地的路由器标识(Ro
41、uter ID)、授权信息等。这些信息都在Open 消息中体现。BGP 连接建立后,如果有路由需要发送则发送Update 消息通告对端路由信息。Update消息主要用来通告路由信息,包括失效(撤消)路由。Update 消息发布路由时,还要指定此路由的路由属性,用以帮助对端BGP协议选择最佳的路由。关于路由属性在BGP选择路由时的应用,参见BGP协议路由属性的应用部分。在本地BGP路由变化时,也使用Update 消息修正对端BGP的路由表。经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定了。此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。对于本地BGP,
42、如果在超过保持时间的时间内,还未收到任何对端BGP消息,就认为此BGP连接已经无效,将此BGP连接断开。当本地BGP在运行中发现错误时,要发送NOTIFY消息通告BGP对端。如对端BGP版本本地不支持,本地BGP收到了结构非法的Update 消息等。本地BGP退出BGP连接时也要发送NOTIFICATION消息。BGP收到NOTIFICATION消息后,要作相应处理。第六章 BGP路由属性这一章我们重点介绍BGP协议路由属性。2.1BGP的路由属性对于企业和服务供应商所关心的问题,如:如何阻止我的私有网络不被通告出去?如何对来自某个邻居路由器的路由更新进行过滤?如何确定我是使用这条链路而不是另
43、外一条?通过使用路由属性,BGP 给出了对这些问题的答案。BGP路由属性是一套参数,它对特定的路由进行了进一步的描述,使得BGP能够对路由进行过滤和选择。在配置路由策略时我们将广泛地使用路由属性,但是不是所有路由属性都要被用上。事实上,路由属性被分为以下几类:必遵属性:在路由更新数据报文中必须存在的路由属性,这种属性域在BGP 路由信息中有着不可替代的作用,如果缺少必遵属性,路由信息就会出错。如AS-Path 就是必遵属性,BGP用它来避免路由环路,没有它路由就可能出问题。可选属性:它是可选的,不一定存在于路由更新数据报文中,我们设置它完全是根据需要。如MED属性,我们就用它来控制选路。过渡属
44、性:具有AS间可传递性的属性就是过渡属性,过渡属性的域值可以被传递到其他AS中去并继续起作用。如Origin属性,路由信息的起源一旦确定,域值会一直存在,无论此路由信息被传到哪个AS中去。非过渡属性:只在本地起作用,出了自治系统,域值就恢复成缺省值。如Local-preference 。以下列出几种常用属性的情况:每个属性都有特定的含义并可以灵活的运用,使得BGP的功能十分强大。BGP属性可以扩展到256种。2.2常见BGP路由属性Origin 起点属性:定义路径信息的来源,标记一条路由是怎样成为BGP路由的。如IGP、EGP、Incomplete等。As-Path AS 路径属性:是路由经过
45、的AS 的序列,即列出在到达所通告的网络之前所经过的AS 的清单。BGP发言者将自己的AS前置到接收到的AS 路径的头部,它可以防止路由循环,并用于路由的过滤和选择。Next hop 下一跳属性:包含到达更新消息所列网络的下一跳边界路由器的IP地址。BGP的下一跳与IGP有所不同,它可以是通告此路由的对等体的地址,如EBGP,这同IGP是相同的。而在其它情况下,BGP使用第三方的下一跳,如IBGP对从EBGP对等体获得的下一跳不加改变的在自治系统内传递;在多路访问媒体上,BGP以路由的实际来源为下一跳,即使它不是BGP对等体。MED (Multi-Exit-Discriminators)属性:
46、 当某个AS有多个入口时,可以用MED属性来帮助其外部的邻居路由器选择一个较好的入口路径。一条路由的MED值越小,其优先级越高。Local-Preference 本地优先属性: 本地优先属性用于在自治系统内优选到达某一个目的地的路由。反映了BGP发言人对每个外部路由的偏好程度。本地优先属性值越大,路由的优选程度就越高。Community 团体属性: 团体属性标识了一组具有相同特征的路由信息,与它所在的IP子网和自治系统无关。公认的团体属性值有:NO-EXPORT、NO-ADVERTISE、LOCAL-AS 和 INTERNET。2.3Origin属性起点属性是一个必遵过渡属性,它指示路由更新的起源。BGP允许三种类型的起源: BGP在其路由判断过程中会考虑起点属性来判断多条路由之间的优先级。具体来说,BGP优先选用具有最小起点属性值的路由,即:IGP 优先于EGP,EGP优先于INCOMPLETE。我们可以手工配置某条路由的起点属性。一般情况下:BGP 把聚合路由和用直接注入到BGP路由表的具体路由看成是AS内部的,起点类型设置为IGP。即用“network XXXX XXXX”命令注入的路由或者是聚合的路由。BGP把通过其它IGP协议引入的路由起点类型设置为Incomplete。即用“import”命令注入的路由。