概述

自治系统之间的EGP路由协议,基于TCP 179端口,因IGP协议路由承载数量有限,不容易维护,所以通过BGP搬运IGP的路由。BGP有灵活的属性(类似ISIS的TLV字段)增加功能,适应不同的应用场景。

报文

主要有5种报文

open

主要负责协商一些属性参数,如果协商失败邻居建立无法建立,比如公认必遵属性,AS号,AS-PATH,router-id等,公认过渡属性 local-preference等等。

keeplive

主要负责邻居之间的保活。

update

负责更新路由或者撤销路由。

notification

差错报文,主要用于报错

refresh

用户改变策略之后,通过此报文进行更新

状态

主要有6种状态

idle

初始化状态,会有一个start事件(32S),start事件结束后开始建立TCP连接

connect

建立TCP三次握手,如果建立成功会进入到opensent状态,失败则到active

active

TCP建立失败,会进行start事件调整后,再次重连,如果重连成功会进入到opensent,失败则会回到connect再次重连

opensent

TCP建立成功,会相互发送open协商属性,如果收到了对方的open,并且协商成功,则会进入openconfirm,失败则回到idle

openconfirm

属性协商完成,双方会相互发送keeplive,如果收到对方的keeplive,则会进入established

established

邻居建立成功,周期性发送keeplive保活,update和notification,refresh都是在这个状态下发送

选路原则

选路原则共有11条,主要作用对BGP路由做优化,选路原则存在的前提是下一跳可达。

1)pref-value

协议首选值,华为的私有属性

越大越有优先,默认值=1,只能在import方向做,因为pre-value无法带出路由器,只能干预路由如何离开本设备。

2)local-preference

本地优先级,只能在AS内传递

越大越优先,可以在EBGP的入和IBGP的入或出方向做,默认是100

3)local

本地始发最优先,如果都是本地产生的,则遵守:

aggregate > auto aggregate > network > import

4)as-path

描述经过了哪些AS路径(只有EBGP会比较)

可以在IBGP和EBGP的出入方向做,一般添加AS-PATH都会添加自己的AS号,如果随便添加,比如100,假如这个AS存在,则可能会造成路由丢失。

5)origin

起源,IGP(network)> EGP > import(?),可以在IBGP和EBGP的出方向与入方向做

6)med

用来选择怎么进入AS,在IBGP和EBGP的出入方向

MED实际是从IGP的cost中copy过来的,可以从EBGP学习到,并且会传给自己的IBGP邻居,但是无法再传给EBGP邻居了

7)EBGP优于IBGP

8)下一跳的IGP的开销

负载分担

如果前8条无法判断路由的优先级,并且AS-PATH完全相同,则可以实现负载分担,但是best永远只有一条

9)clust-list

只在有BGP反射器中存在,越短越优先,默认是自己router-id

若收到和自己相同的clust-list,则不会再进行计算

10)original-id

主要用来放环,如果某路由器收到路由的original-id和自己的router-id相同,则不会再接收此路由。

11)router-id

前面10条比不出的情况。则比较route-id,越小越优先

路由控制

通过router-policy ,前缀列表,filter-policy,as-path-filter 进行路由的优化。

ORF

出向路由过滤

假如从运营商传过来2条路由,8.8.8.8和9.9.9.9,我们只想要9.9.9.9的话,只能在自己公司的出口路由器配置入方向策略。

BGP的匹配顺序为adj-in--> 入方向策略--->bgp-rib,所以公司出口路由器会先接收,然后在匹配策略,然后再删除,放到bgp-rib

消耗路由器性能的同时,如果存在路由震荡,公司出口路由器也会。

所以通过ORF来解决:

ORF会在refresh报文告诉运营商路由器,哪些路由他要,哪些不要(前提二者都要支持,在open报文中会协商这个属性)

运营商路由器收到后,在传递路由前,会先看出策略,看到ORF后就不会将8.8.8.8路由发给对方了,这样9.9.9.9无论怎样震荡都不会影响公司出口路由器了。

BGP基础和高级特性_BGP

路由汇总

将多个明细聚合成一条,减少路由表大小(和IGP的汇总是一样的)

汇总时,要添加detail-suppressed ,否则汇总了也不会对明细进行抑制

四字节AS号

主要是负责老旧设备兼容

原始AS号只有2位,范围是0~65535,后期因为AS号不够用,所以有了4位

范围变成了1~4294967295,但是很长很难记,所以用X . Y 的方式,方便记忆

X . Y (X的范围是X*65535,Y是几就是几)
eg:2.3 ,对应的AS号为2*65535+3 = 1311075

如果一段设备不支持。则用通用AS和四字节的建立邻居

peer X.X.X.X as 23456