作者:flyfeng 2006-06-20
一、背景
路由包括两个基本的动作:确定最佳路径和信息群(通常称为分组)通过网络的传输。通过网络传输分组相对较简单, 而路径的确定可以分复杂。BGP就是当今网络中实现路径选择的一种协议。本文简述BGP的基本操作,并提供其协议组件的描述。
BGP在TCP/IP网中实现域间路由。BGP是一种外部网关协议(EGP),即它在多个自治系统或域间执行路由、 与其它BGP系统交换路由和可达性信息。>
BGP设计用以代替其前身(现在已不用了)外部网关协议(EGP)作为全球因特网的标准外部网关路由协议。 BGP解决了EGP的严重问题,能更有效地适应因特网的飞速发展。
注:EGP是外部网关协议(也叫EGP)的一种,这二者不要混淆。
下面是核心路由器用BGP在AS间路由数据的示意图。
BGP在多个RFC中规定:
RFC1771 - 描述了BGP4,即BGP的当前版本。
RFC1654 - 描述了第一个BGP4规范。
RFC1105,RFC1163和RFC1267 - 描述了BGP4之前的BGP版本。
二、BGP操作
BGP执行三类路由:AS间路由、AS内部路由和贯穿AS路由。
AS间路由发生在不同AS的两个或多个BGP路由器之间,这些系统的对等路由器使用BGP来维护一致的网络拓扑视图, AS间通信的BGP邻居必须处于相同的物理网络。因特网就是使用这种路由的实例,因为它由多个AS(或称管理域)构成, 许多域为构成因特网的研究机构、公司和实体。BGP经常用于为因特网内提供最佳路径而做路由选择。 AS内路由发生在同一AS内的两个或多个BGP路由器间,同一AS内的对等路由器用BGP来维护一致的系统拓扑视图。 BGP也用于决定哪个路由器作为外部AS的连接点。再次重申,因特网提供了AS间路由的实例。一个组织,如大学, 可以利用BGP在其自己的管理域(或称AS)内提供最佳路由。BGP协议既可以提供AS间也可以提供AS内部路由。
贯穿(pass-through)AS路由发生在通过不运行BGP的AS交换数据的两个或多个BGP对等路由器间。在贯穿AS环境中, BGP通信既不源自AS内,目的也不在该AS内的节点,BGP必须与AS内使用的路由协议交互以成功地通过该AS传输BGP通信, 下图所示为贯穿AS环境:
三、BGP路由
与其它路由协议一样,BGP维护路由表、发送路由更新信息且基于路由metric决定路由。 BGP系统的主要功能是交换其它BGP系统的网络可达信息,包括AS路径的列表信息,此信息可用于建立AS系统连接图, 以消除路由环,及执行AS级策略确定。
每个BGP路由器维护到特定网络的所有可用路径构成的路由表,但是它并不清除路由表, 它维持从对等路由器收到的路由信息直到收到增值(incremental)更新。
BGP设备在初始数据交换和增值更新后交换路由信息。当路由器第一次连接到网络时,BGP路由器交换它们的整个BGP路由表, 类似的,当路由表改变时,路由器发送路由表中改变的部分。BGP路由器并不周期性发送路由更新, 且BGP路由更新只包含到某网络的最佳路径。
BGP用单一的路由metric决定到给定网络的最佳路径。这一metric含有指定链路优先级的任意单元值, BGP的metric通常由网管赋给每条链路。赋给一条链路的值可以基于任意数目的尺度, 包括途经的AS数目、稳定性、速率、延迟或代价等。
四、BGP消息类型
RFC1771中规定了四种BGP消息类型:初始(open)消息,更新消息、通知消息和keep-alive消息。
初始消息在对等路由器间打开一个BGP通信会话,是建立传输协议后发送的第一个消息, 初始消息由对等设备发送的keep-alive消息确认,且必须得到确认后才可以交换更新、通知和keep-alive消息。
更新消息用于提供到其它BGP系统的路由更新,使路由器可以建立网络拓扑的一致视图。更新用TCP发送以保证传输的可靠性。 更新消息可以从路由表中清除一条或多条失效路由,同时发布若干路由。
通知消息在检查到有错误时发送。通知消息用于关闭一条活动的会话,并通知其它路由器为何关闭该会话。
keep-alive消息通知对等BGP路由器该设备仍然alive。keep-alive消息发布足够频繁以防止会话过期。
五、BGP分组格式
本节简述BGP初始、更新、通知和keep-alive消息类型及基本的BGP信头格式。
1、信头格式
所有的BGP消息类型都使用基本的分组信头。初始、更新和通知消息有附加的域,而keep-alive消息只使用基本的分组信头。
下图为BGP信头使用的域:
每个BGP分组都包含信头,其主要目的是标识该分组的功能。下面简述信头中的每个域。
标记 - 含有认证值。
长度 - 指示消息的总长度,以字节计。
类型 - 标识消息类型为下列类型之一:
初始
更新
通知
keep-alive
数据:为可选域,含有上层信息。
2、初始消息格式
BGP初始消息由BGP信头和附加域构成,下图为BGP初始消息的附加域:
在信头的类型域中标识为BGP初始消息的BGP分组包含下列各域,这些域为两个BGP路由器建立对等关系提供了交换方案:
版本 - 提供BGP版本号,使接收者可以确认它是否与发送者运行同一版本协议。
自治系统 - 提供发送者的AS号。
保持时间(Hold-time) - 在发送者被认为失效前最长的不接收消息的秒数。
BGP标识 - 提供发送者的标识(IP地址),在启动时决定,对所有本地接口和所有对等BGP路由器而言都是相同的。
可选参数长度 - 标识可选参数域的长度(如果存在的话)。
可选参数 - 包含一组可选参数。目前只定义了一个可选参数类型:认证信息。认证信息含有下列两个域:
认证码:标识使用的认证类型。
认证数据:包含由认证机制使用的数据。
3、更新消息格式
BGP更新消息由BGP信头和附加域构成,下图为BGP更新消息的附加域:
收到更新消息分组后,路由器就可以从其路由表中增加或删除指定的表项以保证路由的准确性。更新消息包含下列域:
失效路由长度 - 标识失效路由域的总长度或该域不存在。
失效路由 - 包含一组失效路由的IP地址前缀。
总路径属性长度 - 标识路径属性域的总长度或该域不存在。
路径属性 - 描述发布路径的属性,可能的值如下:
源:必选属性,定义路径信息的来源。
AS路径:必选属性,由一系列AS路径段组成。
下一跳:必选属性,定义了在网络层可达信息域中列出的应用作到目的地下一跳的边缘路由器的IP地址。
多重出口区分:可选属性,用于在到相邻AS的多个出口间进行区分。
本地优先权:可选属性,用以指定发布路由的优先权等级。
原子聚合:可选属性,用于发布路由选择信息。
聚合:可选属性,包含聚合路由信息。
网络层可达信息 - 包含一组发布路由的IP地址前缀。
4、通知消息格式:
下图为BGP通知消息使用的附加域:
通知消息分组用于给对等路由器通知某种错误情况。
错误码 - 标识发生的错误类型。下面为定义的错误类型:
消息头错:指出消息头出了问题,如不可接受的消息长度、标记值或消息类型。
初始消息错:指出初始消息出了问题,如不支持的版本号,不可接受的AS号或IP地址或不支持的认证码。
更新消息错:指出更新消息出了问题,如属性列表残缺、属性列表错误或无效的下一跳属性。
保持时间过期:指出保持时间已过期,这之后BGP节点就被认为已失效。
有限状态机错:指示期望之外的事件。
终止:发生严重错误时根据BGP设备的请求关闭BGP连接。
错误子码 - 提供关于报告的错误的更具体的信息。
错误数据 - 包含基于错误码和错误子码域的数据,用于检测通知消息发送的原因。