BGP
BGP基础
- BGP是什么:BGP是一种在自治系统AS之间传递并选中最佳路由的高级矢量路由协议,共有四个版本,现在使用的是BGP-4
- BGP将AS视为一个节点,以TCP作为底层传输机制
- AS内运行iBGP,AS之间运行eBGP
- AS_path中会记录报文经过的AS号,且当AS号改变时才会记录
- AS_path可以防止环路,出现环路时,数据报会被丢弃
- BGP和IGP之间区别
区别 | IGP | BGP |
---|---|---|
使用范围 | AS内使用 | AS间使用 |
收敛速度 | 迅速,只在邻居间工作 | |
功能 | 发现和计算路由 | 控制路由的传播和选中最佳路由 |
适用网络 | 中小心企业网 | 大型,超大型运营网络 |
其他 | 路由选择实施复杂 | 支持CIDR 只发送更新路由,减少带宽,适用于在互联网上传播大量路由信息 解决环路问题 下一跳地址可以是非直连路由器的接口IP |
-
无需用到BGP场景
- 单宿主自治系统: 用户和ISP之间只有一条线连接,直接用静态路由(缺省路由)就行
- 多宿主到单一的自治系统:一条主用链路,一条备用链路
-
需要用到BGP场景:跨运营商传递路由,且需要路由协议进行自动选路
邻居建立
-
邻居关系:eBGP和iBGP邻居关系
-
eBGP:不同AS之间的BGP,可防止AS间产生环路。
-
iBGP:AS内的BGP,为了防止AS内产生环路,在AS内需要保持全连接的iBGP邻居
-
邻居建立的属性
- 路由器标识(router-id):可手动设置,缺省情况下,选择loopback地址作为router-id
-
BGP状态:
状态 | 描述 | 接收事件 | 动作 | 备注 |
---|---|---|---|---|
idle | 空闲状态 | start | start事件之后 1.对资源初始化 2.重置连接计时器 3.发起TCP连接请求 4.开始侦听远端对等体发起连接的端口,并转至connect状态 | start状态由操作者配置/重启BGP过程 |
connect | 启动连接重传定时器,等待TCP完成连接 | 1.如果TCP连接成功,BGP向对等体发送Open报文,并转至OpenSent状态 2.如果连接失败 转至Active状态 3.如果连接重传定时器超时,继续尝试进行TCP连接 4.其他事件,退回Idle状态 | ||
Acitve | 1.试图建立TCP连接 | 1.如果连接成功,发送Open报文,并转至OpenSent状态 2.如果连接失败,停留在Active状态 3.连接重传定时器超时,转至Connect状态 4.其他事件,退回Idle | ||
OpenSent | 1.等待对等体的Open报文 2.对收到Open报文中的AS号,版本号,认证码进行检查 | 1.如果收到报文正确,发送Keepalive报文,并重置Keepalive定时器,转至OpenConfirm状态 2.如果收到报文有误,发送Notification状态,并转至Idle状态 | ||
OpenConfirm | 等待Keepalive报文或Notification报文 | 1.收到Keepalive报文,转至Established状态 2.收到Notification报文,Idle状态 | ||
Established | 与对等体交换Update,Keepalive,Route-refresh报文和Notification报文 | 1.收到正确的Update或Keepalive报文,保持BGP连接 2.错误的Update或Keepalive报文,发送Notification报文并转至Idle状态 3.Route-refresh报文不会改变BGP状态 4.Notification报文,转至Idle状态 5.TCP拆除通知,BGP断开连接,转至Idle状态 |
-
BGP邻居无法建立的原因(未处于Established状态)
- 地址不可达
- AS配置错误
- eBGP跳数问题
- 更新源问题
- BGP认证错误
- 报文协商失败
- Router_ID冲突
- 联盟和非联盟之间BGP连接配置错误
- 错误报文导致连接中断,如BGP的Marker值错误
-
BGP对等体之间交互原则
- BGP将最优路由加入BGP路由表
- 从iBGP对等体收到的路由,只发布给eBGP对等体
- eBGP收到的路由,发给所有对等体
- 只发送最优路由给对等体
- 只发送更新路由
- 接收所有对等体发送的路由
路径属性
-
属性分类
- 公认必遵(Well-known Mandatory):必须存在Update报文中,且所有BGP设备都可识别的
- 公认任意(Well-known Discretionary):都可以识别,但不一定存在在报文中
- 可选过渡(Optional Transitive):可以不识别,1.如果识别则转发该属性的更新,2.如果不识别,如果放置了过渡标记,则把该属性转发并通告给下游设备
- 可选非过渡(Optional Non-transitive):可以不识别,如果设备不识别,且过渡标记没有被设置,则更新中不通告该属性
-
属性
属性 | 描述 | 类型 | 备注 |
---|---|---|---|
origin | 表示BGP路由起源 | 1.IGP:从内部网关协议学习到的 2.EGP:通过EGP学习到的 3.incomplete:未知源,一般通过import引入路由表中 | 1.聚合路由可以是IGP,也可以是incomplete,这依赖于聚合路由的成员路由的origin属性。若有些成员路由是IGP,有些成员路由是incomplete,则生成的聚合路由是incomplete 2.优先顺序 IGP>EGP>incomplete |
AS_PATH | 记录路由沿途经过的AS |
-
BGP路由信息库:存放用于决策的BGP路由
- Adj-RIB-In:对等体接收到的更新,但没有经过处理
- Loc-RIB:经过BGP的输入策略引擎,运行策略之后存储的信息库,用于本地路径选择
- Adj-RIB-Out:经过BGP输出策略引擎,用于通告给其他对等体
-
决策过程
- 1.收到更新数据包,存储在RIB(Routing Information Base),并指明是来自哪个对等体的(Adj-RIB-In)
- 2.经过BGP输入策略引擎修改属性或路由过滤
- 3.路径选择算法,为每一条前缀确定最佳路径
- 4.最佳路径存储在Loc-RIB中,并加载到IP-RIB,用于路由选择
- 5.输出策略引擎,存储在Adj-RIB-Out,通告给其他对等体
-
选路规则
- PrefVal 大优
- Local_Pref 大优
- 手动聚合路由 > 自动聚合路由 > network通告路由 > import-route引入路由 > 对等体学习路由
- AS_PATH 短优
- Origin:IGP > EGP > incomplete
- MED 小优
- eBGP>iBGP
- Metric 小优
- Cluster_List 短优
- Router_ID 小优
- 邻居IP 小优
-
负载分担
- BGP路由等价条件:前八个属性相同,且AS_Path也相同
- 负载分担两种形式:1.BGP路由负载分担, 2.下一跳路由负载分担
-
BGP负载分担
- 若最优路由为iBGP,则只有iBGP形成负载分担,若最优路由为eBGP,则只有eBGP形成负载分担。
- 负载分担只对本设备有效,给其他对等体发送时会发送最优路由
-
下一跳路由负载分担
-
当BGP依赖下一跳转发数据,且下一跳是负载分担的,则也能算得上是BGP负载分担
-
-
路由聚合:手动聚合和自动聚合
- aggregate:手动聚合,对BGP本地路由表中路由进行聚合
- summary automatic:自动聚合
路由控制
- 介绍:定义路由器如何接收路由以及如何通告路由,选择合适的路径
- BGP最大优势:通过调整路由属性进行选路控制