注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 科普系列之-使用Windows的..
 帮助

BGP用户培训材料


2008-06-15 09:15:21
 标签:网络   [推送到技术圈]

 

                                          BGP用户培训材料
 

 

AS  --  Autonomous System       使用相同路由管理策略的区域 
BGP --  Border Gateway Protocol     Defined in RFC 1771
CIDR   --  Classless Interdomain Routing  无类型的域间选路
EGP --  Exterior Gateway Protocol      Defined in RFC 904
IGP --  Internal Gateway Protocol      AS内部的路由协议
EGP --  External Gateway Protocol      AS外部的路由协议,对应于IGP

一、概述

BGP是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息。与OSPFRIP等在自治区域内部运行的协议对应,BGP是一类EGP(Edge Gateway Protocol)协议,而OSPFRIP等为IGP(Interior Gateway Protocol)协议。
BGP是在EGP应用的基础上发展起来的。EGP在此以前已经作为自治区域间的路由发现协议,广泛应用于NFSNET等主干网络上。但是,EGP被路由环路问题所困扰。BGP通过在路由信息中增加自治区域(AS)路径的属性,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的策略。同时,随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,都影响了网络的性能。BGP支持无类型的区域间路由CIDR(Classless Interdomain Routing)可以有效的减少日益增大的路由表。
BGP运行时刻分别与本自治区域外和区域内的BGP伙伴建立连接(使用Socket)。与区域内伙伴的连接称为IBGP(Internal BGP)连接,与自治区域外的BGP伙伴的连接称为EBGP(External BGP)连接。本地的BGP协议对IBGPEBGP伙伴使用不同的机制处理。

二、BGP协议分析

1BGP协议的层次位置

 
BGPOSPFRIPTELNETSNMP
SOCKET
TCPUDP
IPIPX
PPPX.25
操作系统
硬件接口及驱动
 
BGP使用Socket服务建立连接,端口号为179

2BGP的消息结构

BGP4种类型的消息。分别为OPENUPDATEKEEPALIVENOTIFY。它们有相同的消息头。

OPEN消息结构:

消息头加如下结构:
Version (1字节) 发端BGP版本号
My Autonomous System (2字节无符号整数) 本地AS
Hold Time (2字节无符号整数) 发端建议的保持时间
BGP Identifier (4字节) 发端的路由器标识符
OptParmLen (1字节) 可选的参数的长度
Optional Parameters (变长) 可选的参数

KEEPALIVE消息结构

KEEPALIVE消息只有一个消息头。

 

NOTIFY消息结构

消息头加如下结构:
0                       1                      2                      3                   4
0 1 2 3 4 5 6 7  0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
Errorcode
Errsubcode
 
Data
 
Errorcode (1字节) 错误代码
错误代码
错误类型
1
消息头错
2
OPEN消息错
3
UPDATE消息错
4
保持时间超时
5
状态机错
6
退出
 
Errsubcode (1字节) 辅助错误代码,略。
Data (变长) 依赖于不同的错误代码和辅助错误代码。用于诊断错误原因。
 

UPDATE消息结构

Unfeasible Routes Len (2字节无符号整数) 不可达路由长度
Withdrawn Routes (变长) 退出路由
Path Attribute Len (2字节无符号整数) 路径属性长
Path Attributes (变长) 路径属性(以下详细说明)
Network Layer Reachability Information (变长) 网络可达信息(信宿)
 
其中退出路由和信宿地址的表示方法为一 <lengthprefix> 的二元组。length一个字节,指示地址前缀的长度。prefix为地址前缀,长度14字节。
 
 

3BGP协议路由属性的应用

路由是用信宿地址来标识的。路由的属性即UPDATE消息中的路由属性部分,是用来帮助BGP进行路由选择的。它们在本地BGP选择路由时有不同的作用。当BGP通过不同的路由源收到了相同信宿地址的路由时,需要进行路由选择。

(1)ORIGIN起点属性

起点属性表示路由相对于发出它的自治系统的路由更新起点。
IGP        BGP把聚合路由和用network定义的路由看成是AS内部的,起点类型设置为IGP
EGP        BGP把通过EGP得到的路由的起点设置为EGP
INCOMPLETE BGP把通过其它IGP协议引入的路由的起点设置为INCOMPLETE。这是因为引入的路由可能从任何地方来,如OSPFASE路由。
 
BGP在其它因素相同的情况下,按IGPEGPINCOMPLETE的顺序选择路由,因为IGP路由的位置更确定,EGP次之,而INCOMPLETE则很不确定。
 

(2)AS路径属性

路由的AS路径属性记录了此路由所穿过的所有AS区域,它可以避免路由环路的出现,即当BGP把一条路由通告给一个此路由曾穿越过的AS自治区域时,此AS又把这条路由当作新路由来处理了,这也正是困扰EGP问题。
在加入了AS路径属性后,BGP可以根据AS路径属性中的信息来消除路由环路。BGP不会接受AS路径属性中包含了本AS自治区域号的路由,因为此路由已经被本自治区域处理过了,从而避免了生成路由环路的可能。为此,BGP在向EBGP对端,即向本AS外部通告一条路由时,要把本AS自治区域的AS号加入的AS路径属性中,以记录此路由通过的AS区域信息。
同时,AS路径属性也在影响路由选择。显然,在其它因素相同的情况下,应该选择AS路径较短的路由,因为它穿过了较少的自治区域。这一点并不一定精确,因为穿过了的3个由高速网络构成的AS区域的路由,有可能比穿过了2个低速网络的AS区域的路由更好。这种情况要求恰当的配置,以在其它的因素中影响路由的选择。
协议不可能自动完成一切,有经验的工程师的合理的配置对优化网络更重要。
AS路径属性中,AS_SEQUENCE属性的AS路径值表示此AS路径是有顺序关系的。通过它可以在本生成AS自治区域的拓扑结构图。当路由被发送到AS自治区域外时,一般要把本区域AS号加入到AS_SEQUENCE序列后。AS_SET属性是用于路由聚合的,它的AS路径信息无顺序关系,无法生成拓扑结构图,但用于检测AS路由环路是足够用的。

(3)NEXTHOP下一跳属性

对于EBGP,下一跳属性是本地BGP与对端连接的端口地址。如上图,RTCRTA通过EBGP通告路由170.10.0.0时,下一跳属性为170.10.20.2RTARTC通告150.10.0.0的路由时,下一跳为170.10.20.1
对于IBGP,本地BGP将从EBGP得到的路由的下一跳属性,直接注入IBGPUPDATE路由更新消息。上图中,RTA通过IBGPRTB通告路由170.10.0.0时,下一跳仍然为EBGP中的170.10.20.2,而不是150.10.30.1。对于RTB,此下一跳信息最终应该通过IGP得到。
对于可以多路访问的网络,下一跳情况有所不同。
在上图中,RTARTC运行BGPAS300IGPOSPFOSPF通告RTC通过下一跳170.10.20.3可以到达网络180.20.0.0RTC在通过EBGP通告RTA路由180.20.0.0时,发现本地端口170.10.20.2和此路由的下一跳170.10.20.3为同一共享子网,因此使用170.10.20.3作为EBGP通告路由的下一跳,而非170.10.20.2
这种情况,对于NBMA非广播多点可达网络不适用。
将以太网替换为FrameRelay桢中继网和其它NBMA网络,箭头指示方向有PVC永久虚电路。此时,RTC也发送下一跳为170.10.20.3180.20.0.0路由给RTA,就会出现问题:RTARTD无可达链路!
为了避免此问题,请使用Next-hop-self命令,强制RTA将路由180.20.0.0的下一跳设置为本地BGP端口地址170.10.20.2

(4)MED属性

MULTI_EXIT_DISCRIMINATOR就是一条路由的Metric。当某AS自治区域有多个人口点时,此属性用来帮助选择一个较好的人口点。即,选择MED较小的人口点。
如上图,网络路由180.10.0.0RTCRTDRTB出发,通过EBGP通告给RTA。其中RTCMED120RTDMED200RTBMED50。缺省情况下,BGP只比较同一AS区域发送的MED,这是因为不同AS自治区域的度量Metric的方法可能不同,只有相同AS区域的Metric才有可比性。因此RTA选择MED较小的RTC发送的路由,将2.2.2.1作为路由180.10.0.0的下一跳(RTBMED更小,但AS路径较长)MED属性不会通过AS区域传播,因此,RTA发送路由180.10.0.0时的MED设置为其缺省的0
也可以使用always-compare-med命令来强制比较同一路由的所有的MED。上例中,最终会选择RTB作为路由180.10.0.0的下一跳,因为它具有最小的MED
总之,MED可以帮助本地BGP选择到达某一个AS区域的人口点。

(5)LOCALPREFERENCE本地优先级属性

本地优先级属性用来帮助AS区域内部的路由器,选择到AS区域外部使用的较好的出口。
如上图例,当路由170.10.0.0通过RTCRTD发送到AS256内部时,RTC将本地优先级设置为150RTD将本地优先级设置为200。这可能是因为RTC连接的AS区域具有较高的速度或收费较低。因此,AS256内部的路由器选择本地优先级较高的RTC作为得到网络170.10.0.0的下一跳。
MED相反,较高的本地优先级的路由被选择。
MED对应,本地优先级用来帮助本地BGP在不同的相邻AS区域中选择较好的退出路由。
在一个自治区域中的所有BGP路由器必须使用IBGP连通起来,已相互通过比较某条路由的本地优先级来就到达此信宿的AS出口点达成一致。

(6)ATOMIC_AGGREGATE元聚合属性

此属性用来表示一条路由是在某处被聚合形成的,丢失了部分信息。

(7)AGGREGATOR聚合者属性

此属性记录了一条路由被聚合的路由器的AS号和IP地址。
 
综合起来,本地BGP路由选择的过程为:
(1)如果此路由的下一跳不可达,忽略此路由;
(2)选择本地优先级较大的路由;
(3)选择本地路由器始发的路由(本地优先级相同)
(4)选择AS路径较短的路由;
(5)依次选择起点类型为IGPEGPINCOMPLETE类型的路由;
(6)选择MED较低的路由;
(7)选择RouterID较低的路由。

4BGP协议的特点

BGP是一种AS(自治区域)外部路由协议,主要负责本自治区域和外部的自治区域间的路由可达信息的交换。因此,它所关心的拓扑结构是AS(自治区域)的拓扑结构,BGP通过UPDATE消息中路由的AS属性来构造AS的拓扑结构图,进一步通过此结构图来选择路由。
OSPFRIPIGP协议相比,BGP的拓扑图要更抽象和粗略一些。因为IGP协议构造的是AS内部的路由器的拓扑结构图。IGP把路由器抽象成若干端点,把路由器之间的链路抽象成边,根据链路的状态等参数和一定的度量标准,每条边配以一定的权值,生成拓扑图。根据此拓扑图选择代价(两点间经过的边的权值和)最小的路由。这里有一个假设,即路由器(端点)转发数据包是没有的代价的。而在BGP中,拓扑图的端点是一个AS区域,边是AS之间的链路。此时,数据包经过一个端点(AS自治区域)时的代价就不能假设为0了,此代价要由IGP来负责计算。这体现了EGPIGP是分层的关系。即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/24202.112.254.0/24可以使用202.112.0.0/16表示,从而减小了路由表的体积和发送路由信息时的网络流量。
同时,作为AS自治区域间的路由协议,由于政治的、经济的等原因,BGP需要按照不同的路由的属性控制路由的发送和引入。因此,BGP有丰富的路由策略控制手断。
在本地BGP路由变化时,也使用UPDATE消息修正对端BGP的路由表。
经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定了。此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。对于本地BGP,如果在超过保持时间的时间内,还未收到任何对端BGP消息,就认为此BGP连接已经无效,将此BGP连接断开。
当本地BGP在运行中发现错误时,要发送NOTIFY消息通告BGP对端。如对端BGP版本本地不支持,本地BGP收到了结构非法的UPDATE消息等。本地BGP退出BGP连接时也要发送NOTIFY消息。BGP收到NOTIFY消息后,要作相应处理。

三、BGP配置任务列表

BGP配置任务主要包括:
Ÿ       启动和关闭BGP
Ÿ       配置BGP本地参数
Ÿ       复位BGP连接
Ÿ       定义访问列表、AS路径列表和路由映射
Ÿ       配置neighbor
Ÿ       配置BGP同伴组
Ÿ       BGPIGP交互
以下各节中引用的参数范围如下表所示:
 
7-59  BGP配置参数范围
参数名称
参数范围
as-number
065535
metirc
0 4294967295
perference
2147483648 2147483647
holdtime
6065535
asp-list-number
1200
list-number
1200
version-number
24
seq-number
065535
as-regular-expression
参见RFC1164 section 4.2
names
字符串(有效长度32位)
 

3.  启动和关闭BGP

启动BGP协议时应指定本地的自治区域号(AS号)。启动BGP后,本地路由器不接收相邻路由器的BGP连接请求。要使本地路由器主动向相邻路由器发出BGP连接请求,请参照Neighbor的配置。
关闭BGP协议时,BGP协议将切断所有已经建立的BGP连接。
 
 
 
7-60  启动和关闭BGP
操作
命令
启动BGP,并进入BGP协议配置模式
router bgp as-number
退出BGP协议配置模式
exit
关闭BGP
no router bgp
 

4.  配置BGP本地参数

BGP协议完成的主要任务之一是向其它的自治区域(AS)广播本自治区域中的网络可达信息。为了完成此任务,BGP需要和内部网关协议(IGP,如RIPOSPF等)协同工作。一个简单的方法是将特定的IGP协议发现的网络路由全部注入到BGP的路由表中,再由BGP发送出去(请参见BGPIGP交互)。