BGP边界网关协议
一、BGP的概述
BGP 是一种实现自治系统(AS)之间的路由可达,并选择最佳路由的距离矢量路由协议。它是外部网关协议。
二、BGP的基础
1.BGP的特点:
(1)BGP是使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而非周期性路由更新。
(2)BGP能够承载大批量的路由信息,可以支撑大规模网络;
(3)BGP能够支撑MPLS/VPN的应用,传递客户VPN路由;
(4)BGP提供了路由聚合和路由衰减功能用于防止路由震荡,同股票这两项功能有效地提高了网络稳定性。
2.BGP的特征
BGP通常被称为路径矢量路由协议;
每条BGP路由都携带多种路劲属性,BGP可以通过这些路径属性控制路径选择,而不像IS-IS、OSPF只能通过cos值控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最适合的路径控制方式。
3.BGP的工作原理
(1)BGP的报文
BGP对等体间通过以下5种报文进行交互,其中Keepalive报文周期性发送,其余报文为触发式发送:
1)Open报文:用于建立BGP对等体连接。
2)Update报文:用于在对等体之间交换路由信息。
3)Notification报文:用于中断BGP连接。
4)Keepalive报文:用于保持BGP连接。
5)Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
(2)BGP状态机
BGP对等体的交互过程中存在6种状态机:空闲(Idle)、连接(Connect)、活跃(Active)、Open报文已发送(OpenSent)、Open报文已确认(OpenConfirm)和连接已建立(Established)。
1)Idle(空闲)状态
Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
2)Connect(连接)状态
BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态;如果TCP连接失败,那么BGP转至Active状态;如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
3)active(激活)状态
在active状态下,BGP试图建立TCP连接,如果连接成功,则向对等体发送open消息,并进行下一状态。
4)OpenSent(打开发送)状态
BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
5)OpenConfirm(打开确认)状态
BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
6)Established(已建立)状态
BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。
(3)BGP对等体之间交互原则
BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与对等体建立邻居关系后,采取以下交互原则:
1)从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。
2)从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。
3)当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。
4)路由更新时,BGP设备只发送更新的BGP路由。
5)所有对等体发送的路由,BGP设备都会接收。
(4)BGP引入IGP交互
BGP引入路由时支持Import和Network两种方式:
Import方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。
Network方式是逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。
三、BGP路径属性
路径属性分类
四、BGP路由反射器
1.路由反射宣告原则(1)
2.路由反射宣告原则(2)
3.路由反射簇(cluster)
如图所示:当一个AS内存在多台RR为Client提供冗余时,RR间的路由更新很有可能会形成环路,为防止该现象,引入了Cluster的概念。
什么是簇:通过4字节的Cluster_ID来标识Cluster,通常会使用Loopback地址作为Cluster_ID。一个Cluster里可以包括一个或多个RR;一个Client可以同时属于多个Cluster。
4.路由反射环路防止机制-Originator_ID
5.路由反射环路防止机制-Cluster_List
五、BGP选路原则
当到达同一个目的网段存在多条路由时,BGP通过如下的次序进行路由优选:
丢弃下一跳不可达的路由
【1】优选Preferred-Value属性值最大的路由
【2】优选Local Preference属性值最大的路由。
【3】本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的。
【4】优选AS Path属性值最短的路由。
【5】优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete。
【6】优选MED属性值最小的路由。
【7】优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)。
【8】优选到Next Hop的IGP度量值最小的路由。
【9】优选Cluster List最短的路由。
【10】优选RouterID(Orginator ID)最小的设备通告的路由。
【11】优选具有最小IP地址的对等体通告的路由。
总结以上规律就会发现,【1】和【2】取值越大越优,其余的取值越小越优。
注意:前八条属性全部相同时可形成路由负载分担。
六、BGP路由聚合概述
BGP在AS之间传递路由信息,随着AS数量的增多,单个AS规模的扩大,BGP路由表将变得十分庞大,因此带来如下两类问题:
存储路由表将占用大量的内存资源,传输和处理路由信息需要消耗大量的带宽资源;
如果传输的路由条目出现频繁的更新和撤销,对网络的稳定性会造成影响。
七、BGP的简单实验拓扑(配置IBGP和EBGP)
实验要求:
1.基本的配置
2.配置IGP(R1与R2运行OSPF协议)
3.配置IBGP和配置EBGP
4.查看TCP连接和查看对等体的状态
5.在R3上用network宣告的方式产生一条BGP路由、在R1上引入的方式产生一条BGP路由
6.在R1上查看路由表和配置下一跳本地 配置后再次查看路由表
7. 查看R2的BGP路由表//
实验步骤:
1、基本的配置
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]ip add 12.1.1.1 24
[AR1-GigabitEthernet0/0/0]q
[AR1]int LoopBack 0
[AR1-LoopBack0]ip add 1.1.1.1 32
[AR1-LoopBack0]q
[AR2]int g0/0/1
[AR2-GigabitEthernet0/0/1]ip add 12.1.1.2 24
[AR2-GigabitEthernet0/0/1]q
[AR2]int g0/0/0
[AR2-GigabitEthernet0/0/0]ip add 23.1.1.2 24
[AR2-GigabitEthernet0/0/0]q
[AR2]int LoopBack 0
[AR2-LoopBack0]ip add 2.2.2.2 32
[AR2-LoopBack0]q
[AR3]int g0/0/1
[AR3-GigabitEthernet0/0/1]ip add 23.1.1.3 24
[AR3-GigabitEthernet0/0/1]q
[AR3]int LoopBack 0
[AR3-LoopBack0]ip add 3.3.3.3 32
[AR3-LoopBack0]q
2、配置IGP(AR1和AR2运行OSPF)
[AR1]ospf router-id 1.1.1.1
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255
[AR1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]q
[AR1-ospf-1]q
[AR2]ospf router-id 2.2.2.2
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255
[AR2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]q
[AR2-ospf-1]q
3、配置IBGP
[AR1]bgp 100 //启动BGP进程,进程号为100
[AR1-bgp]undo synchronization //关闭同步,默认配置
[AR1-bgp]undo summary automatic //关闭自由汇总
[AR1-bgp]router-id 1.1.1.1 //设置BGP的route-id
[AR1-bgp]peer 2.2.2.2 as-number 100 //指定邻居和邻居AS号
[AR1-bgp]peer 2.2.2.2 connect-interface loopBack 0 //用环回口创建邻居
[AR1-bgp]q
[AR2]bgp 100
[AR2-bgp]undo synchronization
[AR2-bgp]undo summary automatic
[AR2-bgp]router-id 2.2.2.2
[AR2-bgp]peer 1.1.1.1 as-number 100
[AR2-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[AR2-bgp]q
4、配置EBGP
[AR2]bgp 100
[AR2-bgp]peer 23.1.1.3 as-number 200 //EBGP用直连接口创建邻居
[AR2-bgp]q
[AR3]bgp 200
[AR3-bgp]undo synchronization
[AR3-bgp]undo summary automatic
[AR3-bgp]peer 23.1.1.2 as-number 100
[AR3-bgp]q
5、查看TCP的连接情况
可以看到TCP是连接成功的
6、查看对等体的状态
7、产生BGP路由
[AR3]bgp 200
[AR3-bgp]network 3.3.3.3 32
[AR3-bgp]q
[AR1]bgp 100
[AR1-bgp]import-route ospf 1
[AR1-bgp]q
8、在AR1上查看路由表
*:代表路由条目有效;
>:代表路由条目最优,可以被传递。只有下一条可达路由才会最优
i:代表路由是从IBGP学习到的
可以看到3.3.3.3不是最优的,如果不优就不会再加载进全局路由表,也不会传递给其它路由器,本例不优的原因为下一条不可达,用以下方法
[AR2]bgp 100
[AR2-bgp]peer 1.1.1.1 next-hop-local //配置下一条为本地
[AR2-bgp]q
再次查看AR1的路由表
扩展:什么情况下采用next-hop-local命令?
对从EBGP邻居收到的路由,在传递给IBGP邻居时,修改下一条地址为本地的connect-interface。
9.查看AR2的BGP了路由表
可以看到1.1.1.1这条路由虽然下一条可达,但不是有效和最优的,其原因是为如果IGP路由表里宣告了这条路由,然后再在IBGP里面宣告,路由只能本地有效,二不会传递给邻居。