配色: 字号:
BGP路由协议讲解
2022-11-15 | 阅:  转:  |  分享 
  








课程

BGP路由协议









目 录

课程说明 1

课程介绍 1

课程目标 1

第1章 BGP协议概述 2

1.1 基本概念 2

1.2 自治系统 5

1.3 BGP的工作机制 6

1.4 BGP的两种邻居 8

1.5 BGP路由通告原则 9

1.6 BGP同步 10

1.7 如何成为BGP路由 12

第2章 BGP的报文和状态机 15

2.1 报文种类 15

2.2 报文内容及格式 16

2.3 BGP协议的状态机 21

2.4 BGP协议中消息的应用 23

第3章 BGP路由属性 24

3.1 路由属性概述 24

3.2 常见BGP路由属性 26

3.2.1 ORIGIN属性 28

3.2.2 AS-PATH属性 29

3.2.3 下一跳属性 30

3.2.4 本地优先属性 31

3.2.5 MED属性 32

3.2.6 团体属性 33

3.3 BGP路由选择过程 34



课程说明

课程介绍

本课程主要介绍BGP(Border Gateway Protocol)路由协议,BGP是Internet上最重要的路由协议之一, 它是目前自治系统之间采用的唯一一种路由协议BGP经历了不同的发展阶段,从1989年的最初版本BGP1,发展到了1993年开始发展的最新版本BGP4。 其功能也在随着Internet的增长不断地加强和扩大。

完成本课程的学习后,您应该能够:

掌握BGP的基本概念

掌握BGP的基本原理

掌握BGP的常用属性



BGP协议概述

基本概念



BGP(Border Gateway Protocol)是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号(AS)序列属性的路径可达信息,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的路由策略。与OSPF和RIP 等在自治区域内部运行的协议对应,BGP是一类EGP(Exterior Gateway Protocol)协议,而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正迅速成为事实上的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对等体发送一个撤消路由消息。

总之,BGP不是每次都广播所有的路由信息,而是在初始化全部路由信息后只发送路由的变化量(增量)。这样保证了BGP和对端的最小通信量,但同时也增加了BGP的复杂程度。因为对于IGP,本地路由协议只需发送发送时刻所知的全部路由,而不保存任何已发送信息,路由选择的工作由对端来完成;而BGP必须为每个BGP对端保存已经发送的路由信息,以便发送一条新路由前确认其是否真的应该发送。

为了减小路由表的体积和发送路由的通信量,BGP还支持CIDR(Classless InterDomain Routing)。它使用带有较短的掩码(相对于自然掩码)的路由来在一条路由中表达更多的路由信息。如从202.112.1.0/24-202.112.254.0/24可以使用202.112.0.0/16表示,从而减小了路由表的体积和发送路由信息时的网络流量。

同时,作为AS自治区域间的路由协议,由于政治的、经济的等原因,BGP需要按照不同的路由的属性控制路由的发送和引入。因此,BGP有丰富的路由策略控制手段。

自治系统



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

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

自治系统的编号范围是1到65535,其中1到65411是注册的因特网编号,65412到65535是专用网络编号。

BGP的工作机制



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

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

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

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

BGP的两种邻居



BGP在路由器上以下列两种方式运行:

IBGP(Internal BGP)

EBGP(External BGP)

如果两个交换BGP报文的对等体属于同一个自治系统,那么这两个对等体就是IBGP对等体(Internal BGP) ,如RTB和RTD。

如果两个交换BGP报文的对等体属于不同的自治系统,那么这两个对等体就是EBGP对等体 (External BGP) ,如RTA和RTB。

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

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

一般的路由器(包括Quidway系列路由器)都默认要求EBGP对等体之间是有物理上的直连链路,同时他们一般也提供改变这个缺省设置的配置命令。

BGP路由通告原则



BGP 的路由通告原则:

多条路径时,BGP Speaker只选最优的给自己使用;

BGP Speaker只把自己使用的路由通告给相邻体;

BGP Speaker从EBGP获得的路由会向它所有BGP相邻体通告(包括EBGP和IBGP);

BGP Speaker从IBGP获得的路由不向它的IBGP相邻体通告;

BGP Speaker从IBGP获得的路由是否通告给它的EBGP相邻体要依IGP和BGP同步的情况来决定;

连接一建立,BGP Speaker将把自己所有BGP路由通告给新相邻体。

这些通告原则都是BGP的设计者在设计BGP 路由协议时硬性规定的,这里我们不深究其原因。

BGP同步



BGP协议规定:一个BGP 路由器不将从内部BGP对等体得知的路由信息通告给外部对等体,除非该路由信息也能通过IGP得知。若一个路由器能通过IGP得知该路由信息,则可认为路由能在AS中传播,内部通达已有了保证。

BGP的主要任务之一就是向其它自治系统发布该自治系统的网络可达信息。如胶片所示,RTB会把去往10.1.1.1/24 的路由信息封装在UPDATE报文中,通过由RTC、RTD建立的TCP 连接通告给RTE,如果RTE不考虑同步问题,直接接受了这样一条路由信息并通告给RTF。那么,如果RTF 或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路由器是否可传递业务量到该目的地。若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 通告该路由。解决的方法有很多,最简单的办法是RTB把BGP路由信息引入到OSPF路由表中,再由OSPF 通告到RTE,这样就同步了。但是一般不建议这样做,因为BGP路由表很大,引入到OSPF中来会给系统带来很大负担。其它的解决办法如:可以在RTB上配置一条去往10.1.1.1/24 的静态路由,再把该静态路由引入到OSPF中,这样也可以达到同步。

实际上,同步和不同步是可以配置的。Quidway 系列路由器缺省情况下BGP与IGP是同步的。

虽然同步是可以取消的,但取消同步是有条件的。当AS中所有的BGP 路由器能组成IBGP全闭合网时,可以取消同步,在同步被取消以后,有一个新的问题需要考虑: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中所有的BGP 路由器是IBGP全闭合连接,路由器在向IBGP邻居通告路由时强制下一跳为自己本身的接口,这样对于IBGP邻居来说,下一跳就是直连网段地址,可达性也就解决了。 胶片中讨论的情况是:建立IBGP邻居关系的两台路由器之间是TCP连接的,在这种情况下,一般不能取消同步,因为在TCP连接的情况下下一跳可达很难满足。

如胶片所示,可以在RTB上配置RTB在向RTE通告路由信息时会强制改变下一跳为它本身接口 2.1.1.2 。对于RTE来说2.1.1.2 是直连的、可达的。当然,也可以通过配置IGP 路由协议 和静态路由来解决下一跳可达的问题。

如何成为BGP路由



BGP 路由协议是运行在自治系统之间的路由协议,它的主要工作是在自治系统之间传递路由信息,而不是去发现和计算路由信息。发现和计算路由信息的任务由IGP (如:RIP、OSPF)路由协议来完成。BGP 的路由信息需要通过配置命令的方式注入到BGP中。

按照注入的方式可分为三类:纯动态注入、半动态注入、静态注入。

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



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

如胶片所示,路由器B通过OSPF 协议动态地发现去往网络18.0.0.0/8的路由,再通过配置命令静态将其引入到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报文头的格式如图所示,每行的宽度为4个字节。

Marker 鉴权信息:16 字节,全1。这个标记的作用主要是用来检测BGP对等体之间的同步是否丢失,并对进来的BGP消息进行验证。

Length 消息的长度:2 字节,指示整个消息的长度,包括头标长度,最小的BGP消息长度是19字节(Keepalive报文),最大的长度是4096字节。

Type 消息的类型:1 字节,指示报文类型,如OPEN、UPDATE报文等。

1 :OPEN

2 :UPDATE

3 :NOTIFICATION

4 :KEEPALIVE



Version :(1字节) 发端BGP版本号

My Autonomous System :(2字节无符号整数) 本地AS号

Hold Time :(2字节无符号整数) 发端建议的保持时间 BGP Identifier :(4字节)发端的路由器标识符

Optional parameters Len :(1字节) 可选的参数的长度

Optional Parameters :(变长) 可选的参数

消息的开始部分包括BGP的版本号和发送方的自治系统编号。接下来是保持时间(HOLD TIME)字段,这是发送方提供建议的保持定时器的设定秒数。保持定时器规定了BGP邻居认为发送方信息有效的时间长度。再下一个字段是BGP标识(BGP ID),也就是BGP发送方的标识。该值是在BGP对等体之间进行握手操作的过程中确定的,并且在每个本地接口及每个BGP对等体之间是保持不变的。



KeepAlive 报文主要用于对等体路由器间的运行状态以及链路的可用性确认。KeepAlive 报文的组成只包括一个BGP数据报头。 KeepAlive 消息在对等路由器间的交换频度以保证对方保持定时器不超时为限。

当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送Keepalive 报文,表明该连接是否还可保持。

缺省情况下,发送Keepalive 的时间间隔为 60 秒。



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 报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误代码(如定时器超时等),包括错误代码、辅助错误代码及错误信息。

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

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

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

BGP协议的状态机



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 状态。

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 报文,同时复位保持计时器。

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消息后,要作相应处理。

BGP路由属性

路由属性概述



对于企业和服务供应商所关心的问题,如:如何阻止我的私有网络不被通告出去?如何对来自某个邻居路由器的路由更新进行过滤?如何确定我是使用这条链路而不是另外一条?通过使用路由属性,BGP 给出了对这些问题的答案。

BGP路由属性是一套参数,它对特定的路由进行了进一步的描述,使得BGP能够对路由进行过滤和选择。在配置路由策略时我们将广泛地使用路由属性,但是不是所有路由属性都要被用上。

事实上,路由属性被分为以下几类:

必遵属性:在路由更新数据报文中必须存在的路由属性,这种属性域在BGP 路由信息中有着不可替代的作用,如果缺少必遵属性,路由信息就会出错。如AS-Path 就是必遵属性,BGP用它来避免路由环路,没有它路由就可能出问题。

可选属性:它是可选的,不一定存在于路由更新数据报文中,我们设置它完全是根据需要。如MED属性,我们就用它来控制选路。

过渡属性:具有AS间可传递性的属性就是过渡属性,过渡属性的域值可以被传递到其他AS中去并继续起作用。如Origin属性,路由信息的起源一旦确定,域值会一直存在,无论此路由信息被传到哪个AS中去。

非过渡属性:只在本地起作用,出了自治系统,域值就恢复成缺省值。如Local-preference 。

以下列出几种常用属性的情况:

类型代码 属性名 必遵/可选 过渡/非过渡 1 Origin 必遵 过渡 2 AS-Path 必遵 过渡 3 Next-hop 必遵 过渡 4 MED 可选 非过渡 5 Local-preference 可选 非过渡 8 Community 可选 过渡 每个属性都有特定的含义并可以灵活的运用,使得BGP的功能十分强大。

BGP属性可以扩展到256种。

常见BGP路由属性



Origin 起点属性:定义路径信息的来源,标记一条路由是怎样成为BGP路由的。如IGP、EGP、Incomplete等。

As-Path AS 路径属性:是路由经过的AS 的序列,即列出在到达所通告的网络之前所经过的AS 的清单。BGP发言者将自己的AS前置到接收到的AS 路径的头部,它可以防止路由循环,并用于路由的过滤和选择。

Next hop 下一跳属性:包含到达更新消息所列网络的下一跳边界路由器的IP地址。BGP的下一跳与IGP有所不同,它可以是通告此路由的对等体的地址,如EBGP,这同IGP是相同的。而在其它情况下,BGP使用第三方的下一跳,如IBGP对从EBGP对等体获得的下一跳不加改变的在自治系统内传递;在多路访问媒体上,BGP以路由的实际来源为下一跳,即使它不是BGP对等体。

MED (Multi-Exit-Discriminators)属性: 当某个AS有多个入口时,可以用MED属性来帮助其外部的邻居路由器选择一个较好的入口路径。一条路由的MED值越小,其优先级越高。

Local-Preference 本地优先属性: 本地优先属性用于在自治系统内优选到达某一个目的地的路由。反映了BGP发言人对每个外部路由的偏好程度。本地优先属性值越大,路由的优选程度就越高。

Community 团体属性: 团体属性标识了一组具有相同特征的路由信息,与它所在的IP子网和自治系统无关。公认的团体属性值有:NO-EXPORT、NO-ADVERTISE、LOCAL-AS 和 INTERNET。

ORIGIN属性



起点属性是一个必遵过渡属性,它指示路由更新的起源。BGP允许三种类型的起源:

值 意 义 0 IGP-路由信息为起始AS内部 1 EGP-路由信息为起始AS通过EGP得来 2 INCOMPLETE-路由信息通过其它方法得来 BGP在其路由判断过程中会考虑起点属性来判断多条路由之间的优先级。具体来说,BGP优先选用具有最小起点属性值的路由,即:IGP 优先于EGP,EGP优先于INCOMPLETE。我们可以手工配置某条路由的起点属性。

一般情况下:

1)BGP 把聚合路由和用直接注入到BGP路由表的具体路由看成是AS内部的,起点类型设置为IGP。

2)BGP把通过其它IGP协议引入的路由起点类型设置为Incomplete。

3)BGP把通过EGP得到的路由的起点类型设置为 EGP。

在其它因素相同的情况下,按IGP、EGP、Incomplete 的顺序选择路由。

AS-PATH属性



AS-Path 属性也是一个必遵属性,它是路由到达某个目的地所经过的所有AS号码的序列。BGP使用AS 路径属性作为路由更新(更新数据包)的一部分来确保在Internet 上的一个无环路拓扑结构。BGP不会接受AS 路径属性中包含的本AS自治系统号的路由,因为此路由已经被本自治系统处理过了,从而避免了生成路由环路的可能。为此,BGP在向EBGP对等体通告一条路由时,要把自己的AS号加入到AS 路径属性中,以记录此路由通过的AS区域信息。

同时,AS 路径属性也在影响路由选择。在其它因素相同的情况下,选择AS路径较短的路由。如胶片所示,AS200内的网络D18.0.0.0/8经AS200、AS300、AS400到达AS100的路径为d1(400 300 200),经AS200、AS500到达AS100的路径为d2(500 200),这时BGP优先选择较短的路径d2。

注:路由的AS-Path域在记录AS-number 时,总是把新的AS-numbe 放在前面,如上图,路由先经过AS200,记录:d2(200);路由再经过AS500,记录:d2(500 200)。

我们可以通过加入伪AS号码的方法来增加路径长度,从而影响路径选择。例如,在胶片所示网络中,我们可以在RTA上配置在它将路由D 18.0.0.0/8发往30.0.0.2时,将其AS Path列表再加上两个自治系统号200、200,这样当这条路由被传递到RT胶片中的最终路由器时,其AS Path列表则为:d2(500 200 200 200),这样d2的AS Path就比d1的要长了,所以最终路由器就会认为d1为较优的路由了。

下一跳属性



下一跳属性也是一个公认必遵属性,BGP 中的下一跳不同于IGP 中的下一跳,BGP中的下一跳 概念稍微复杂,它可以是以下三种形式之一:

1)BGP在向IBGP通告从其它EBGP得到的路由时,不改变路由的下一跳属性,本地BGP将从EBGP得到的路由的下一跳属性直接传递给IBGP。如胶片所示,RTA通过IBGP向RTB通告路由18.0.0.0时,下一跳属性为10.0.0.2。

2)BGP在向EBGP对等体通告路由时,下一跳属性是本地BGP与对端连接的端口地址。如胶片所示,RTC在向RTA通告路由18.0.0.0/8时,下一跳属性为10.0.0.2 ;RTA在向RTC通告路由19.0.0.0/8 时,下一跳属性为10.0.0.1。

3)对于可以多路访问的网络(如:以太网或帧中继),下一跳情况有所不同:如胶片所示,RTC在向EBGP路由器RTA通告路由20.0.0.0/8时,发现本地端口10.0.0.2同此路由的下一跳10.0.0.3为同一共享子网,因此使用10.0.0.3 作为向EBGP通告路由的下一跳,而不是10.0.0.2。

本地优先属性



本地优先级属性是可选属性,本地优先级属性是赋予一条路由的优先级程度,用以比较到相同目的地的不同路由。本地优先级属性值越大,路由的优选程度就越高。本地优先级属性只用于AS 内部,只在IBGP 对等体之间被交换,而不被通告给EBGP对等体。简单来说,本地优先级属性就是用来帮助AS区域内部的路由器选择到AS区域外部使用较好的出口。即,选择本地优先级较高的出口点。

需要注意的是:配置本地优先级的属性值仅仅会影响离开该AS的业务量,不会影响进入该AS的业务量。缺省情况下,本地优先级属性值为100 。

如胶片所示,RTB把通过RTD接收的路由的本地优先级设置为local-pref1 100,RTC把通过RTE接收的路由的本地优先级设置为local-pref2 200,这样RTA就会优先选择本地优先级高的local-pref2。

MED属性



MED属性是可选属性,它用于向外部邻居路由器指示进入某个具有多个入口的AS 的优先路径。 当某个AS有多个入口时,可以用MED属性来帮助其外部的邻居路由器选择一个较好的入口路径,即优先选择 MED 较小的入口路径。

如胶片所示,我们可以设置RTB通告的网络D的metric值为metric1 10,RTC通告的网络D的metric值为metric2 20,这样RTA就会优先选择 metric值较小的metric1。

一般情况下,路由器只比较来自同一AS中各EBGP 邻居路径的MED值,不比较来自不同AS的MED值。若一定要比较,Quidway 系列路由器提供特别的配置命令,可实现用户这一要求。

注:通常情况下,没有必要比较来自不同自治系统邻居的路径的MED属性值,除非能够确认不同的AS采用了相同的IGP和路由选择方式。

团体属性



在BGP的范围内,一个团体是一组有公共性质的目的地。一个团体不限于一个网络或一个自治系统,它没有物理边界。

团体属性是一个可选过渡属性,某些团体是是公认的,亦及具有全球意义。公认的团体有:

1)NO_EXPORT:带有这一团体值的路由在收到后,不应被通告给一个联盟之外的对等体。

2)NO_ADVERTISE:带有这一团体值的路由在收到后,不应被通告给任何的BGP对等体。

3)LOCAL-AS:带有这一团体值的路由在收到后,应该被通告给本地AS内的对等体,不应被通告给任何的EBGP对等体(包括联盟内的EBGP对等体)。

4) INTERNET: 带有这一团体值的路由在收到后,应该被通告给所有的其他路由器。

除了这些公认的团体属性值之外,私有的团体属性值也可以被定义来用于特殊用途。这些属性值被一些数字所标示。

一条路由可以具有一个以上的团体属性值,就像一条路由可以在其AS 路径属性中含有一个以上AS号码一样。在一条路由中看到多个团体属性值的BGP路由器可以根据一个、一些或所有这些属性值来采取行动。路由器在将路由传递给其他对等体之前可以增加或修改团体属性值。

BGP路由选择过程



综合起来,本地BGP路由选择的过程为:

(1)如果此路由的下一跳不可达,忽略此路由;

(2)选择本地优先级较大的路由;

(3)选择本地路由器始发的路由(本地优先级相同);

(4)选择AS 路径较短的路由;

(5)依次选择起点类型为IGP,EGP,INCOMPLETE类型的路由;

(6)选择MED 较小的路由;

(7)选择RouterID 较小的路由。



















1





BGP路由协议 目 录



i











BGP路由协议 课程说明



1



DA000011 BGP路由协议 ISSUE1.0 第1章 BGP协议概述



14



BGP路由协议 第2章 BGP的报文和状态机



BGP路由协议 第3章 BGP路由属性







献花(0)
+1
(本文系通信农民工原创)