5.BGP

第5章 BGP

边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。本章只讨论BGP-4。

5.1BGP概述

5.1.1BGP特点

  • BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新。
  • BGP能够承载大批量的路由信息,能够支撑大规模网络。
  • BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。
  • BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
  • BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性。

5.1.2BGP术语

  • 自治系统(AS):AS是指在一个实体管辖下的拥有相同选路策略的IP网络。BGP网络中的每个AS都被分配一个唯一的AS号,用于区分不同的AS。AS号分为2字节AS号和4字节AS号,其中2字节AS号的范围为1至65535,其中64512-65534为私有AS号。4字节AS号的范围为1至4294967295,其中4200000000-4294967294为私有AS号。
  • 对等体(Peer):两个建立BGP会话的路由器的关系
  • IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。
  • EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。

5.1.3 BGP报文类型

  1. BGP的包头

BGP存在5种类型的报文,不同类型的报文拥有相同的头部(header),BGP的包头格式如表5-1所示:

                                                    表5-1:BGP的包头格式

                                                         Marker(16字节)

Length (2字节)

Type(1字节)

  • 标记(Marker):用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。
  • 长度(Length):BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096。
  • 类型(Type):BGP消息的类型。Type有5个可选值,分别为Open报文、Update报文、Notification报文、Keepalive报文、Route-refresh报文。

  1. Open报文:用于建立BGP对等体连接。它的报文格式如表5-2所示:

                                       表5-2:Open包文格式

Version(8bit)

My AS(16bit)

Hold time(16bit)

BGP identifier(32bit)

opt parm len(8bit)

Optional parameters(可变长)

  • 版本(Version):表示协议的版本号,现在BGP的版本号为4。
  • 我的自治系统号(My AS):发送者自己的AS号
  • 保持时间(hold time):发送者自己设定的hold time值(单位:秒),用于协商BGP对等体间保持建立连接关系,发送KEEPALIVE或UPDATE等报文的时间间隔。BGP的状态机必须在收到对等体的OPEN报文后,对发出的OPEN报文和收到的OPEN报文两者的hold time时间作比较,选择较小的时间作为协商结果。Hold Time的值可为零(不发KEEPALIVE报文)或大于等于3,我们系统的默认为180。
  • BGP标识符(BGP identifier):发送者的router id。
  • 可选参数长度(opt parm len):可选参数的长度。如果此值为0,表示没有可选参数。
  • 可选参数(Optional parameters):每一个可选参数是一个TLV格式的单元

  1. Update报文:用于在对等体之间交换路由信息,它的报文格式如表5-3所示:

                                                             表5-3:Update报文格式

Unfeasible routes length(2Byte)

Withdrawn routes(NByte)

Total path attribute length(2Byte)

Path attributes(NByte)

NLRI(NByte)

  • Unfeasible routes length:不可达路由字段的长度,以Byte为单位。如果为0则说明没有Withdrawn Routes 字段。
  • Withdrawn routes(NByte):包含不可达路由的列表
  • Total path attribute length(2Byte):路径属性字段的长度,以Byte为单位。如果为0则说明没有Path Attributes 字段。
  • Path attributes(NByte):
  • NLRI(NByte):网络层可达信息,

  1. Keepalive报文:用于保持BGP连接。
  • 只有包头,没有其它内容
  • 每隔60S发一次
  1. Notification报文

当BGP检测到错误状态时,就向对等体发出 Notitication 消息,之后 BGP 连接会立即中断。BGP Notification 消息格式如表 5-4 所示:

                                            表5-4:Notification 消息格式

错误代码

错误子码

                                                           数据

  • 错误编码:1字节,错误类型。
  • 错误子码:1字节,错误类型更详细的信息。
  • 数据:可变长度,用于诊断错误的原因,它的内容依赖于具体的错误编码和错误子码。

  1. Route-refresh报文

用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。它的报文格式如表5-5所示:

                                                表5-5:Route-refresh报文格式

AFI(16bit)

Res(8bit)

SAFI(8bit)

  • AFI((地址族标识):可以是IPV4或者IPV6等。
  • Res(保留):全部为0
  • SAFI(子地址族标识):可以是单播或者组播路由等

5.1.4BGP的邻居状态

BGP建立邻居有限状态机

  • Idle(空闲)状态

这是初始状态,BGP 进程检查是否有前往指定邻居的路由。如果没有路由,则保持空闲

状态;如果有路由,则进入连接状态。

  • Connect (连接)状态

该状态下,BGP 等待完成 TCP 连接,若连接成功,则向对等体发送 Open 消息,然后进入OpenSent状态:如果连接失败,则继续侦听是否有对等体启动连接并进入 Active状态

  • Active(激活)状态

该状态下,BGP 试图建立 TCP 连接,如果连接成功,则向对等体发送 Open 消息,并转

至 OpenSent 状态。

  • OpenSent (打开发送)状态

该状态下,BGP 等待对等体的 Open 消息。收到 Open 消息后对其进行检查,如果发现错

误,本地发送 Notification 消息给对等体并进入空闲状态;如果消息没有错误,BGP 发送

Keepalive 消息并进入 OpenConfirm 状态。

  • OpenConfirm(打开确认)状态

该状态下,BGP 等待 Keepalive 消息或 Notification 消息。如果收到 Keepalive 消息,则

进入 Established 状态;如果收到 Notification 消息,则进入空闲状态。

  • Established(己建立)

该状态下,BGP 可以和其他对等体交换 Update、Notification 和 Keepalive 消息,开始路

由选择。如果收到了正确的 Update 和 Keepalive 消息,就认为对端处于正常运行状态,本地重置保持时间计时器;如果收到 Notification 消息,则进入到空闲状态;如果 TCP 连接中断,则关闭 BGP 连接并回到空闲状态。

5.1.5BGP路径属性

1、路径属性分类

  • 公认属性:所有BGP路由器都必须能够识别的属性
  1. 公认必遵(Well-known Mandatory):必须包括在每个Update消息里。
  2. 公认任意(Well-known Discretionary):可能包括在某些Update消息里。
  • 可选属性:不需要都被BGP路由器所识别
  1. 可选过渡(Optional Transitive):BGP设备不识别此类属性依然会接受该类属性并通告给其他对等体。
  2. 可选非过渡(Optional Non-transitive):BGP设备不识别此类属性会忽略该属性,且不会通告给其他对等体。
  • 常用的BGP属性分类如表5-6所示

                                                    表5-6:BGP属性分类

属性分类

属性

公认必遵

Origin、As_path、Next_hop

公认任意

Local_preference、Atomic_aggregate

可选过渡

Aggregator、Community

可选非过渡

MED、Cluster-List、Originator-ID

2、AS_PATH

用于记录路由所经过的路径上沿途经过的AS

3、Origin

BGP将按Origin的如下顺序优选路由:IGP > EGP > Incomplete,Origin属性类型如表5-7所示:

                                                   表5-7:Origin属性类型

起源名称

标记

描述

IGP

I

如果路由是由始发的BGP路由器使用network命令注入到BGP的,那么该BGP路由的Origin属性为IGP

EGP

E

如果路由是通过EGP学习到的,那么该BGP路由的Origin属性为EGP

Incomplete

?

如果路由是通过其他方式学习到的,则Origin属性为Incomplete(不完整的)。例如通过import-route命令引入到BGP的路由

4、Next_Hop

  • BGP路由器在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  • BGP路由器将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  • 路由器在收到EBGP对等体所通告的BGP路由后,在将路由传递给自己的IBGP对等体时,会保持路由的Next_Hop属性值不变。
  • 如果路由器收到某条BGP路由,该路由的Next_Hop属性值与EBGP对等体(更新对象)同属一个网段,那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体。

5、Local_Preference

  • Local_Preference即本地优先级属性,是公认任意属性,可以用于告诉AS中的路由器,哪条路径是离开本AS的首选路径。
  • Local_Preference属性值越大则BGP路由越优。缺省的Local_Preference值为100。
  • 该属性只能被传递给IBGP对等体,而不能传递给EBGP对等体。

5、community,公认团体属性如表5-8所示:

                                         表5-8:公认团体属性

团体属性名称

团体属性号

说明

Internet

0

设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。

No_Advertise


4294967042

设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。

No_Export

4294967041

设备收到具有此属性的路由后,将不向AS外发送该路由。

No_Export_Subconfed

4294967043

设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由。

6、MED

  • MED(Multi-Exit Discriminator,多出口鉴别器)是可选非过渡属性,是一种度量值,用于向外部对等体指出进入本AS的首选路径,即当进入本AS的入口有多个时,AS可以使用MED动态地影响其他AS选择进入的路径。
  • MED属性值越小则BGP路由越优。
  • MED主要用于在AS之间影响BGP的选路。MED被传递给EBGP对等体后,对等体在其AS内传递路由时,携带该MED值,但将路由再次传递给其EBGP对等体时,缺省不会携带MED属性。

7、Preferred-Value

  • Preferred-Value(协议首选值)是华为设备的特有属性,该属性仅在本地有效。当BGP路由表中存在到相同目的地的路由时,将优先选择Preferred-Value值高的路由。
  • 取值范围:0~65535;该值越大,则路由越优先。
  • Preferred-Value只能在路由器本地配置,而且只影响本设备的路由优选。该属性不会传递给任何BGP对等体。

5.1.6BGP的选路原则

当到达同一个目的网段存在多条路由时,BGP通过如下的次序进行路由优选:

      丢弃下一跳不可达的路由。

  • 优选Preferred-Value属性值最大的路由。
  • 优选Local_Preference属性值最大的路由。
  • 本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的。
  • 优选AS_Path属性值最短的路由。
  • 优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete。
  • 优选MED属性值最小的路由。
  • 优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)。
  • 优选到Next_Hop的IGP度量值最小的路由。
  • 优选Cluster_List最短的路由。
  • 优选Router ID(Orginator_ID)最小的设备通告的路由。
  • 优选具有最小IP地址的对等体通告的路由。

你可能感兴趣的:(网络,智能路由器)