一.BGP简介:
边界网关协议(Border Gateway Protocol,BGP)是一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议。由于不同的管理机构分别控制着他们各自的路由选择域,因此,路由选择域经常被称为自治系统AS(Autonomous System)。现在的Internet是一个由多个自治系统相互连接构成的大网络,BGP作为事实上的Internet外部路由协议标准,被广泛应用于ISP(Internet Service Provider)之间。
早期发布的三个版本分别是BGP-1、BGP-2和BGP-3,主要用于交换AS之间的可达路由信息,构建AS域间的传播路径,防止路由环路的产生,并在AS级别应用一些路由策略。当前使用的版本是BGP-4。
二.BGP报文中的角色
Speaker:发送BGP报文的路由设备称为BGP发言者(Speaker),它接收或产生新的路由信息,并发布(Advertise)给其它BGP Speaker。当BGP Speaker收到来自其它AS的新路由时,如果该路由比当前已知路由更优、或者当前还没有该路由,它就把这条路由发布给所有其他BGP Speaker(发布该路由的BGP Speaker除外)。
Peer:相互交换报文的BGP Speaker之间互称对等体(Peer)。
BGP的报文
BGP的运行是通过报文驱动的,共有Open、Update、Notification、Keepalive和Route-refresh五种报文类型。
- Open报文:是TCP连接建立后发送的第一个报文,用于建立BGP对等体之间的连接关系。对等体在接收到Open报文并协商成功后,将发送Keepalive报文确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-refresh报文的交换。
- Update报文:用于在对等体之间交换路由信息。Update报文可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
- Notification报文:当BGP检测到错误状态时,就向对等体发出Notification报文,之后BGP连接会立即中断。
- Keepalive报文:BGP会周期性地向对等体发出Keepalive报文,用来保持连接的有效性。
- Route-refresh报文:Route-refresh报文用来请求对等体重新发送所有的可达路由信息。
BGP处理过程
因为BGP的传输层协议是TCP协议,所以在BGP对等体建立之前,对等体之间首先进行TCP连接。BGP邻居间会通过Open报文协商相关参数,建立起BGP对等体关系。建立连接后,BGP邻居之间交换整个BGP路由表。BGP会发送Keepalive报文来维持邻居间的BGP连接,BGP协议不会定期更新路由表,但当BGP路由发生变化时,会通过Update报文增量地更新路由表。当BGP检测到网络中的错误状态时(例如收到错误报文时),BGP会发送Notification报文进行报错,BGP连接会随即中断。
邻居建立过程图
BGP有限状态机
BGP有限状态机共有六种状态,分别是Idle、Connect、Active、Open-Sent、Open-Confirm和Established。
在BGP对等体建立的过程中,通常可见的三个状态是:Idle、Active、Established。
- Idle状态下,BGP拒绝任何进入的连接请求,是BGP初始状态。
- Connect状态下,BGP等待TCP连接的建立完成后再决定后续操作。
- Active状态下,BGP将尝试进行TCP连接的建立,是BGP的中间状态。
- Open-Sent状态下,BGP等待对等体的Open报文。
- Open-Confirm状态下,BGP等待一个Notification报文或Keepalive报文。
- Established状态下,BGP对等体间可以交换Update报文、Route-refresh报文、Keepalive报文和Notification报文。
BGP对等体双方的状态必须都为Established,BGP邻居关系才能成立,双方通过Update报文交换路由信息。
BGP属性
BGP路由属性是一套参数,它对特定的路由进一步的描述,使得BGP能够对路由进行过滤和选择。事实上,所有的BGP路由属性都可以分为以下4类:
- 公认必须遵循的(Well-known mandatory):所有BGP设备都可以识别,且必须存在于Update报文中。如果缺少这种属性,路由信息就会出错。
- 公认任意(Well-known discretionary):所有BGP设备都可以识别,但不要求必须存在于Update报文中,可以根据具体情况来选择。
- 可选过渡(Optional transitive):在AS之间具有可传递性的属性。BGP设备可以不支持此属性,但它仍然会接收这类属性,并通告给其他对等体。
- 可选非过渡(Optional non-transitive):如果BGP设备不支持此属性,则相应的这类属性会被忽略,且不会通告给其他对等体。
下面介绍几种常用的BGP路由属性:
- Origin属性,属于公认必须遵循属性,用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的,包含IGP、EGP和Incomplete三种类型。
- AS_Path属性,属于公认必须遵循属性,按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。
- Next_Hop属性,属于公认必须遵循属性。
- MED,属于可选非过渡属性,MED(Multi-Exit-Discriminator)属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。
- Local_Pref属性,属于公认任意属性,仅在IBGP对等体之间有效,不通告给其他AS,用于表明路由设备的BGP优先级。
三.BGP作用
IGP(Interior Gateway Protocol,内部网关协议)被设计用来在单一的路由选择域内提供可达性信息并不适合提供域间路由选择功能,BGP(Border Gateway Protocol,域间路由协议)作为优秀的域间路由协议得以产生并发展。
当今的网络通常使用以下类型的IGP:
- 距离矢量协议,例如路由信息协议(Routing Information Protocol, RIP)。
- 链路状态协议,例如开放式最短路径优先(Open Shortest Path First, OSPF)协议和中间系统到中间系统(Intermediate System to Intermediate System, IS-IS)协议。
BGP有两种运行方式,当BGP运行于同一AS内部时,被称为IBGP(Internel BGP,内部边界网关协议);当BGP运行于不同AS之间时,称为EBGP(Externel BGP,外部边界网关协议)。如图1 BGP的运行方式所示:
四.BGP选路
1.优选Preferred-Value属性值最大的路由-Preferred-Value为华为设备的特有属性,该属性仅在本地有效,默认为0,越大越优先
2.优选Local Preference属性值最大的路由
- 默认100,越大越优,传播范围为本地(IBGP)
- 用来指示离开AS的最佳路径
3.优选本地始发的BGP路由
- 优于从其他对等体学习到的路由
- 本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的
4.优选AS Path属性值最短的路由
- 修改AS_Path三种方式:添加(addtive)、替换(overwrite)、清空(none )
- 若要忽路AS Path,在bgp进程下使用bestroute as-path-ignore
5.优选Origin属性最优的路由(Ongin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete)
- 具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP,Origin显示为e
- EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP,Origin显示为i
- Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete,Origin显示为?
- 用于BGP路由的路径选择(i>e>?)
- i:标识通告network生成的BGP路由
- e:从EGP协议中引入到BGP的路由
- ?:标识通过import-route命令,引入到BGP中的IGP路由
6.优选MED属性值最小的路由
- 用于判断流量进入AS时的优选路由,将优先选择MED值较小者作为优选路由
- MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS
- MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理
- 默认情况下BGP只会对来自同一个AS的相同路由比较MED值,可以通过命令compare-diferent-as-med开启来自不同AS的相同路由也比较MED值
7.优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)-EBGP>IBGP
8.优选到Next Hop的IGP度量值最小的路由
负载分担:
- 前提是前面8条规则完全相同时(AS号也要完全相同)
- 在bgp进程下(如bgp 100)
- 启用-maximum load-balacing(ibgp/ebgp)2或者更大
9.优选Cluster List最短的路由
10.优选RouterID最小的设备通告的路由
11.优选具有最小IP地址的对等体通告的路由