背景
前面介绍的OSPF、ISIS都是使用于一般的中小型网络,但是如果是ISP那种网络,如果就是使用OSPF或者ISIS,那么是很难管理的,对于设备的性能和损耗也大,于是BGP(边界网关协议),一种针对AS的路由协议被定义出来
相关名词
- AS:自治系统,指的是在同一个组织管理下,使用统一选路策略的设备集合
- EGP:外部网关协议,是用于AS之间的路由协议,但是只会发布路由可达,而不对路由进行优选
- IGP:内部网关协议,是一种统称,例如ISIS、OSPF都是属于内部网关协议
- BGP:边界网关协议,基于TCP,只是传递路由信息,不会传递拓扑信息,同时是触发式更新
- 对等体:就是运行BGP的设备之间建立的邻居关系
- IBGP:就是在同一个AS内建立的BGP对等体关系
- EBGP:就是不在同一个AS内建立的BGP对等体关系
- router-ID:运行BGP协议的路由的唯一标识,可以手工指定,也可以设备选择,重新指定不需要重启
- 更新源地址:就是用来建立TCP连接的地址,loopback建立时需要修改
原理
基本原理
- 首先是确保底层的IGP协议可达,底层的主要就是使用OSPF或者ISIS建立成功
- 当底层的TCP连接建立成功后,会开始协商open报文,此时的状态是opensent
- 协商成功,那么就会进行Keeplive的交互,如果协商不成功,那么就会发送notification报文,状态重新回到idle
- 当所有的协商成功,会进入到最终的状态established状态,此时会发送update报文,进行路由操作
报文
- open报文:用来建立BGP邻居关系,以及协商BGP可选能力,里面携带一些重要字段,例如MY AS、router-ID、hold time、 AFI:协议标识符、SAFI:子协议标识符
- update报文: 只能触发时发送,没有周期,有三种情况会发送该报文,当存在某条路由更新时/当需要撤销某条路由时/当某条路由属性被修改时
- notification报文: 差错报文,用来通知设备邻居关系出现错误信息,需要断开BGP邻居,一旦收到这个报文,状态立马为idle
- Keeplive报文:60秒为一个周期发送,用来保活BGP邻居关系
- refresh报文:刷新报文,当需要刷新BGP状态时,这个报文会发送
状态机
- idle:BGP初始状态,收到start事件后,会进入connect状态
- connect:等待TCP连接完成,默认事件为32秒,完成连接,则进入opensent状态,如果连接失败,那么就进入active
- active:主动发起TCP的重连接,如果成功则发送open报文,进入opensen状态,连接失败保留在active,等超时时间到时,回到connect状态
- opensent:发出open报文,协商来自的邻居的open报文,协商成功,进入openconfirm状态
- openconfirm:发出Keeplive,等待对方的Keeplive,时间为5秒,如果收到,那么进入established状态,没有收到,回到idle
- established状态:表示邻居关系建立完成,开始发送update报文
通告原则
- 只会发布最优且可达的路由
- 从EBGP对等体收到的路由会发送给所有的BGP对等体邻居
- 水平分割:从IBGP对等体收到的路由不会发送给自己的IBGP对等体关系
- 路由同步:从IBGP收到的路由,如果EBGP又通过自己的IGP协议学习到该条路由,那么该EBGP可以收到来自IBGP发送的该条路由
BGP路由属性
- 公认必遵:必须是BGP可以识别,且存在于update报文中的
origin:起源属性,用于判断设备的路由来源
AS-path:是标识设备所经过的AS,可以用作AS间防环
nex-hop:下一跳,用于指导路由,同时建立邻居使用的更新源地址
- 公认任意:必须是BGP可以识别,但是不要求存在update报文中
Local——prf:本地优先级属性,用来判断离开本AS的最优路径,只在AS内生效
Atomic-Aggregate:是在聚合路由中的属性,标明该路由为聚合路由
- 可选过度:不要求BGP可以识别,但是需要保留在BGP设备中
community:团体属性,限制传播范围,默认是不会传递的
Aggregator:是在聚合路由中的属性,记录了聚合设备的AS号、Router ID
- 可选非过度:不要求BGP可以识别,同时也不要求保留在BGP设备中
MED:BGP开销值,用来判断进入本AS的最优路径,只能在两个AS间传递
Cluster-List:集群列表,在RR反射器的路由属性,会记录经过的每一个RR设备
Originator-ID :起源ID,是在RR中的路由属性,记录路由的产生者设备的Router-ID
选路原则(前提条件是丢弃下一跳不可达的路由)
- 优选Preferred-Value(华为设备独有的特性)属性值最大
- 优选Local_Preference属性值大的,适用于AS内
- 优选本地始发的BGP路由
- 优选AS-path短的路由,适用于两个AS间
- 优选起源属性最优的,i>e>?
- 优选MED最小的路由
- 优选从EBGP学习到的路由
- 优选nex_hop中的IGP开销最小的路由(MED值就是在这里的开销)
- 优选簇ID短的路由
- 优选起源ID短的路由
- 优选IP地址最小的路由
实验
要求
- 按照图中规划,同时使用loopback口建立邻居
- 只有AS200内运行ospf,其他两个AS不能使能ospf
- 最终实现设备全部可互通
建立成功的截图(display bgp peer)
查看Bgp路由(display bgp routing-table)
抓包--Keeplive
抓包--update报文
抓包--refresh报文
代码
bgp AS号//创建BGP进程,并且进入
router-id 1.1.1.1//指定运行BGP的router-ID
peer 2.2.2.2 as-number 200 //指定与AS200内的2.2.2.2建立邻居
peer 2.2.2.2 ebgp-max-hop 3 //修改EBGP邻居的最大跳数为3
peer 2.2.2.2 connect-interface LoopBack0//修改更新源地址为环回接口
peer 2.2.2.2 next-hop-local//修改下一跳为本地network 想要宣告的地址 掩码//注意这里的地址必须是存在与IP路由表中的
refresh bgp all export //刷新出方向的Bgp路由,在用户视图下
refresh bgp all import //刷新入方向的Bgp路由,在用户视图下
ps:BGP基础就是这些,但是如果想要完全懂得BGP,还是需要自己多看,多做实验,例如全互联、RR反射器、BGP联盟、路由选路等等