BGP基础
BGP基本概述
基本作用
1.AS之间使用BGP来传递和控制路由
2.AS编号1-64511为公有AS,64512-65534为私有AS。
3.BGP相比EGP,可以:
邻居的发现与邻居关系的建立;
路由的获取,优选和通告;
提供路由环路避免机制,并能够高效传递路由,维护大量的路由信息;
在不完全信任的AS之间提供丰富的路由控制能力。
协议特点
1.BGP可以跨越多跳路由器建立邻居关系
2.BGP设计了诸多属性携带在路由中
邻居关系建立
1.先启动BGP的一端先发起TCP连接,使用TCP封装建立邻居关系,端口号为179,TCP采用单播建立连接,单播建立连接也使BGP只能手动指定邻居。
2.运行在不同AS之间的BGP路由器建立的邻居关系为EBGP关系
3.运行在相同AS内的BGP路由器建立的邻居关系为IBGP邻居关系
4.建立EBGP邻居关系时,一般使用直连接口的IP地址;建立IBGP邻居关系时,一般使用Loopback接口的IP地址。
5.BGP通过报文交互完成邻居建立、路由更新等操作,共有open、keepalive、update、notification、route-refresh等五种报文类型。
1.Open报文:用于建立BGP邻居之间的连接关系,邻居收到Open报文并协商后,将发送keepalive报文确认并保持连接的有效性。确认后,BGP邻居间可以进行update、notification、keepalive和route-refresh报文的交换。
2.Update报文:用于在BGP邻居之间交换路由信息。Update报文可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
3.Notification报文:当BGP路由器检测到错误状态时,就向邻居发出Notification报文,之后BGP连接会立即中断。
4.Keepalive报文:BGP路由器会周期性的向邻居发出Keepalive报文,用来保持连接的有效性
5.Route-refresh报文:Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。
BGP路由器报文交互过程
在TCP建立阶段
Idle状态是BGP初始状态。在Idle状态下,BGP路由器拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP路由器才开始尝试与其邻居进行TCP连接,并转至Connect状态。
在Connect状态下,BGP路由器启动连接重传定时器(Connect Retry),等待TCP完成连接。
如果TCP连接成功,那么BGP路由器向邻居发送Open报文,并转至OpenSent状态。
如果TCP连接失败,那么BGP路由器转至Active状态。
如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器继续尝试与其邻居进行TCP连接,停留在Connect状态。
在Active状态下,BGP路由器总是在试图建立TCP连接。
在TCP建立完成阶段
如果TCP连接成功,那么BGP路由器向邻居发送Open报文,关闭连接重传定时器,并转至OpenSent状态
在OpenSent状态下,BGP路由器等待邻居的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
如果收到的Open报文正确,那么BGP路由器发送Keepalive报文,并转至OpenConfirm状态。
如果发现收到的Open报文有错误,那么BGP路由器发送Notification报文给邻居,并转至Idle状态。
在OpenConfirm状态下,BGP路由器等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
在Established状态下,BGP路由器可以和邻居交换Update、Keepalive、Route-refresh报文和Notification报文。
BGP路由生成方式
生成BGP路由的方式有两种,第一种是network,第二种是import
1.network命令是逐条将IP路由表中已经存在的路由引入到BGP路由表中
2.import是根据运行的路由协议将路由引入到BGP路由表中,同时import可以引入直连和静态路由。
import-route DIR route-policy import
route-policy import permit node 10
if-match ip-prefix import
ip ip-prefix import index 10 permit x.x.x.x x
BGP通告原则与路由处理
Update报文
1.BGP路由封装在Update报文中通告给邻居。BGP在邻居关系建立后才开始通告路由信息
2.Update消息主要用来公布可用路由和撤销路由,Update中包含以下信息:
1)网络层可达信息(NLRI):用来公布IP前缀和前缀长度。
2)路径属性:为BGP提供环路检测,控制路由优选。
3)撤销路由:用来描述无法到达且从业务中撤销的路由前缀和前缀长度。
通告原则
在通告BGP路由时,由于各种因素的影响,为了避免路由通告过程中出现问题,BGP路由通告需要遵守一定的规则。
1.仅将自己最优的路由发布给邻居
BGP路由表中的状态含义
Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? – incomplete
Network:显示BGP路由表中的网络地址
NextHop:报文发送的下一跳地址
MED:路由度量值
LocPrf:本地优先级
PrefVal:协议首选值
Path/Ogn:显示AS路径号及Origin属性
Community:团体属性信息
2.通过EBGP获得的最优路由发布给所有BGP邻居
3.通过IBGP获得的最优路由不会发布给其他的IBGP邻居
4.BGP与IGP同步
路由信息处理
1.当从BGP邻居接收到Update报文时,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径;
得出的最佳路径被存储到本地BGP路由表(Local_RIB)中,然后被提交给本地IP路由表(IP_RIB),以用作安装考虑;
2.被选出的有效的最佳路径路由将会被封装在Update报文中,发送给对端的BGP邻居。
IP路由表(IP_RIB):全局路由信息库,包括所有的IP路由信息。
BGP路由表(Local_RIB):BGP路由信息库,包括本地BGP路由器选择的路由信息,邻居表,邻居清单列表。
BGP常用属性
Origin
定义路径信息的来源,标记一条路由是怎么成为BGP路由的。
3种属性:
i表明BGP路由通过network命令注入;
e表明BGP路由是从EGP学来的,EGP协议在现网中很难见到,但可以通过路由策略将路由的Origin属性修改为e;
? 即Incomplete表明BGP路由通过其它方式学到路由信息,如使用import命令引入的路由。
3种Origin属性的优先级为:i>e>Incomplete(?)。
AS_Path
首先引入一个问题
为了解决这两个问题,BGP设计了AS_Path属性,该属性记录了路由经过的所有AS编号。
1.图中RTA从RTB收到100.0.0.0/24的路由时,AS_Path为(2,4),RTA从RTC收到100.0.0.0/24的路由时,AS_Path为(3,5,4)。规定AS_Path越短(记录的AS编号越少),路径越优,因此RTA会优选从RTB收到的100.0.0.0/24的路由。
2.以RTE为例,通过BGP发布100.0.0.0/24的路由,路由可能通过RTE->RTB->RTC->RTD->RTE形成环路。为了防止环路的产生,RTE在收到RTD发来的路由时会检查AS_Path(该路由携带的)属性,如果发现该路由的AS_Path中包含自己的AS号,则丢弃该路由。
AS_Path的4种类型:
AS_Sequence
AS_Set
AS_Confed_Sequence
AS_Confed_Set
Next_hop
1.BGP路由器将本端始发路由发布给IBGP邻居时,会把该路由信息的Next_hop设为本端建立邻居关系所使用的接口IP(如果两端使用loopback建立IBGP邻居,则Next_hop为loopback接口IP)
2.BGP路由器在向EBGP邻居发布路由时,会把路由信息的Next_hop设置为本端与对端建立BGP邻居关系的接口IP。
3.BGP路由器在向IBGP邻居通告从EBGP学来的路由时,不改变该路由下一跳属性。
Local_Preference
仅在IBGP邻居之间有效,不通告给其他AS。它表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。
1.Local_Pref属性仅在IBGP邻居之间有效,不通告给其他AS。它表明路由器的BGP优先级,值越大越优。
2.Local_Pref属性用于判断流量离开AS时的最佳路由。当BGP路由器通过不同的IBGP邻居获得目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由,其默认值为100。
MED
仅在相邻两个AS之间传递,收到此属性的AS不会再将其通告给任何其他第三方AS,用于判断流量进入AS时的最佳路由。
1.MED属性相当于IGP使用的度量值(Metric),它用于判断流量进入AS时的最佳路由。当一个运行BGP的路由器通过不同的EBGP邻居获得目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由,其默认值为0。
Community
1.限定路由的传播范围。
2.打标记,便于对符合相同条件的路由进行统一处理。
3.Community属性分为两类,一类是公认团体属性,另一类是扩展的团体属性。
Internet:缺省属性,所有路由都属于Internet,此属性的路由可以通告给所有BGP邻居;
No_Export:收到此属性的路由后,不将该路由发布到其他AS。如图,RTB上希望10.1.11.0/24的路由发布给AS 12之后,不再发布给其他AS,则可将10.1.11.0/24的Community属性设置为No_Export;
No_Advertise:收到此属性的路由后,不将该路由通告给任何其他的BGP邻居。如图,RTB上希望只将10.1.11.0/24的路由发布给RTC,并且不再通告给任何其他的BGP邻居,则可将10.1.11.0/24的Community属性设置为No_Advertise;
No_Export_Subconfed:在联盟中使用,这里不做介绍
扩展的团体属性用一组4字节为单位的列表来表示,路由器中扩展的团体属性格式为aa:nn或团体号:
aa:nn中,aa通常为AS编号,nn是管理员定义的团体属性标识;
BGP的十三步选路原则
BGP路由器将路由通告给邻居后,每个BGP邻居都会进行路由优选,路由选择有三种情况:
该路由是到达目的地的唯一路由,直接优选。
对到达同一目的地的多条路由,优选优先级最高的。
对到达同一目的地且具有相同优先级的多条路由,必须用更细的原则去选择一条最优的。
一般来说,BGP计算路由优先级的规则如下:
1.丢弃下一跳不可达的路由。
2.优选Preference_Value值最高的路由(私有属性,仅本地有效)。
3.优选本地优先级(Local_Preference)最高的路由。
4.优选手动聚合>自动聚合>network>import>从对等体学到的。
5.优选AS_Path短的路由。
6.起源类型IGP>EGP>Incomplete。
7.对于来自同一AS的路由,优选MED值小的。
8.优选从EBGP学来的路由(EBGP>IBGP)。
9.优选AS内部IGP的Metric最小的路由。
10.优选Cluster_List最短的路由。
11.优选Orginator_ID最小的路由。
12.优选Router_ID最小的路由器发布的路由。
13.优选具有较小IP地址的邻居学来的路由。
Preference_Value是BGP的私有属性(华为私有属性),Preference_Value相当于BGP选路规则中Weight值,仅在本地路由器生效。Preference_Value值越大,越优先。
聚合路由的优先级:手动聚合>自动聚合
知识点参考于华为Hedx文档