BGP
BGP
简介
BGP协议:边界网关协议(Border Gateway Protocol,BGP),是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议
BGP由TCP(端口号179)承载运行在OSI模型的应用层
BGP的报文都是通过单播的方式发送的
支持CIDR 无类域间路由
BGP本身只负责控制路由,数据转发依然靠静态或IGP路由
一台路由器上只能配置一个BGP进程
一、BGP路由规则
状态代码
>
表示该路由当前是最优的路由运行BGP的路由器,收到下一跳不可达的路由时,接收该路由,加入到BGP路由表中,但这条路由不会被BGP优选,不会加入IP路由表
缺省情况下, BGP对等体邻接关系的保持时间(Hold Time)是180秒,发送keepalive时间为60秒,是其三分之一
BGP路由不周期性更新,只会发生变化时更新,路由更新时,BGP设备只发送更新的BGP路由,大大减少了BGP传播路由所占用的带宽
通过import-route命令方式把IS-IS路由引入到BGP,必须指定进程号
当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
所有对等体发送的路由,BGP设备都会接收
BGP支持network和import-route两种方式注入路由
BGP只要能够建立TCP连接并不一定需要直连
当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
二、BGP对等体建立
在建立非直连EBGP邻居关系时,默认情况下EBGP更新报文的TTL(Time to Live)是1
建立IBGP对等体时要让下一跳可达
处于边界的IBGP对等体需要将下一跳指向自己
一般BGP建立对等体都是环回口来建,因为环回口比较稳定
三、IBGP
概念:运行于同一 AS 内部的 BGP 称为 IBGP
IBGP水平分割原则(AS内部防环):从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体
所有IBGP对等体在传递过程中下一跳不变
默认IBGP传递时TTL值为255
四、EBGP
概念:运行于不同 AS 之间的 BGP 称为 EBGP
AS间防环:从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体
所有EBGP对等体在传递过程中下一跳改变
BGP中建立EBGP邻居关系时,报文的默认TTL值是1
五、BGP的Router-ID(路由器号)
BGP的Router-ID是一个用于标识BGP设备的32位值,通常是IPv4地址的形式
在BGP会话建立时发送的Open报文中携带
每个BGP设备都必须有唯一的Router ID,否则对等体之间不能建立BGP连接
BGP的Router-ID在BGP网络中必须是唯一的,可以采用手工配置,也可以让设备自动选取
缺省情况下,Loopback接口为RID,没有则选择接口最大的作为RID,RID选举产生不可抢占
六、BGP报文
前言
BGP报文有5种消息类型
Keepalive报文为周期性发送,其余报文为触发式发送
1.Open
TCP连接后发送的第一个报文就是Open,用于建立对等体间连接关系
用于协商BGP对等体的各项参数,主要包括BGP版本(V4)、AS号等信息,建立BGP对等体连接
建立连接后,BGP邻居之间交换整个BGP路由表
主要携带参数:
Hold Time
Router ID
本地AS自治系统号
2.Update
BGP通过Update报文在对等体之间交换路由信息
Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息
连接建立后,路由需要发送或者路由变化时,发送Update通告对端可达或者撤销路由信息及路径属性
主要携带参数:
路由属性
撤销路由前缀信息
可达路由前缀信息
3.Keepalive
用于保持BGP连接(保活)
定时发送Keepalive报文以保持BGP对等体关系的有效性,响应收到的正确的Open报文
缺省情况下, Keepalive的时间间隔是60秒
Keepalive报文主要用于保持BGP对等体间的连接
Keepalive报文只包含一个BGP数据报头
Keepalive报文周期性在两个BGP邻居之间发送
4.Notification
用于中断BGP连接
Notification消息被用来在BGP Speaker间传递错误消息
当BGP在运行中发现错误时,发送Notification报文通告BGP对端,随后与之相关的BGP连接会随即中断
当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体
5.Route-Refresh
用来通知对等体自己支持路由刷新
通过OPEN消息告知BGP peer本地支持路由刷新能力
Route-refresh 报文不会改变 BGP 状态
连接建立过程图
七、BGP状态机
前言
BGP对等体建立的过程中,通常可见的3个状态是:Idle、Active和Established
1.Idle(空闲)
Idle 状态是 BGP 初始状态
在 Idle 状态下, BGP 拒绝邻居发送的连接请求
在收到本设备的 Start 事件后, BGP 才开始尝试和其它 BGP 对等体进行 TCP 连接
随后转到Connect状态
2.Connect(连接)
Connect 状态下, BGP 启动连接重传定时器(Connect Retry),等待 TCP 完成连接
如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,并转至 OpenSent 状态
如果 TCP 连接失败,那么 BGP 转至 Active 状态
如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 继续尝试和其它 BGP 对等体进行 TCP 连接,停留在 Connect 状态
3.Active(活跃)
Active 状态下, BGP 依旧在试图建立 TCP 连接
如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,关闭连接重传定时器,并转至 OpenSent 状态
如果 TCP 连接失败,那么 BGP 停留在 Active 状态
如果连接重传定时器超时, BGP 仍没有收到 BGP 对等体的响应,那么 BGP 转至 Connect状态
4.OpenSent(Open 报文已发送)
OpenSent 状态下, BGP 等待对等体的 Open 报文,并对收到的 Open 报文中的 AS 号、版本号、 认证码等进行检查
如果收到的 Open 报文正确,那么 BGP 发送 Keepalive 报文,并转至 OpenConfirm 状态
如果发现收到的 Open 报文有错误,那么 BGP 发送 Notification 报文给对等体,并转至Idle 状态
5.Open Confirm(Open 报文已确认)
OpenConfirm 状态下, BGP 等待 Keepalive 或 Notification 报文
如果收到 Keepalive 报文,则转至 Established 状态
如果收到 Notification 报文,则转至 Idle 状态
6.Established(连接已建立)
Established 状态下, BGP 可以和对等体交换 Update、 Keepalive、 Route-refresh 报文和Notification 报文
如果收到正确的 Update 或 Keepalive 报文,那么 BGP 就认为对端处于正常运行状态,将保持 BGP 连接
如果收到错误的 Update 或 Keepalive 报文,那么 BGP 发送 Notification 报文通知对端,并转至 Idle 状态
如果收到 Notification 报文,那么 BGP 转至 Idle 状态
如果收到 TCP 拆链通知,那么 BGP 断开连接,转至 Idle 状态
状态机建立过程图
八、BGP报文中的角色
1.Speaker
发送BGP报文的路由设备称为BGP发言者(Speaker)
用于接收和产生路由信息,并发给其他(Advertise)的BGP Speaker
2.peer
相互交换报文的BGP Speaker之间互称对等体(Peer)
九、BGP与IGP交互
BGP(外部网关协议)、IGP(内部网关协议)
BGP 与 IGP 在设备中使用不同的路由表
为了便于通讯,BGP需要与IGP交互
1.BGP引入IGP路由
Import引入
按照协议类型引入路由(将OSPF、IS-IS等路由引入,还可以引入静态路由和直连路由)
Network引入
将IP路由表已经存在的路由逐条引入,使路由引入更加精确
2.IGP引入BGP路由
引入过程中可以使用路由策略
十、路径属性
前言
1.公认必遵
公认必须遵循(Well-known mandatory):所有 BGP 设备都可以识别此类属性,且必须存在于 Update 报文中。如果缺少这类属性,路由信息就会出错
Origin
状态代码
代表有效
> 代表最优
i 代表的是内部BGP学习到的路由
起源代码
i 代表的是network注入的
?代表的是import注入的
i > ?
IGP>EGP>Incomplete
Origin code 属性的取值为 i ,说明该路由是以network的方式宣告的
通过import-route命令注入BGP的路由,其Origin属性为Incomplete
AS_Path
作用:前往目标网络的路由经过的AS号列表,确保路由在EBGP对等体之间传递无环
也作为路由优选的衡量标准之一
AS_Path属性仅在路由器离开AS时才会被更改,路由在被通告给EBGP对等体时,路由器会在该路由的AS_Path中追加上本地的AS号
路由被通告给IBGP对等体时,AS-path不会发生改变
可以使用route-policy在EBGP对等体之间改变EBGP路由的AS_Path属性,从而影响BGP路由的优选
AS号范围是1~65535
AS_Path越短的路径越优先
在BGP协议使用过程中:
^
表示的是一个as-path的开始;$
表示的是一个as-path 的结束;.∗
表示的是任意长度的任意的as号AS_Set属性用于解决路由聚合可能引起的路由环路问题,它是一种无序的AS路径集合,不保留AS号之间的顺序关系
运行BGP的设备收到一条BGP路由,发现AS号在自己AS_Path内,将会执行直接丢弃操作(防环)
BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路
Next hop
BGP在选择路由前首先会检查路由的下一跳是否可达,下一跳不可达的路由是不活跃路由,不能参与BGP选路
如果正在宣告的路由器和接收路由器在同一个AS内,并且UPdate消息中的路由前缀NLRI目的也是在同一个AS 中,则next_hop为宣告路由器的IP地址
如果宣告路由器和接收路由器是不同AS的路由器,那么所学到的路由的Next-Hop始终是宣告路由器的接口IP地址
2.公认任意
公认任意(Well-known discretionary):所有 BGP 设备都可以识别此类属性,但不要求必须存在于 Update 报文中,即就算缺少这类属性,路由信息也不会出错
Local_Preference
作用:用于告诉AS中的路由器,哪条路径是离开AS的首选路径
Local_Preference默认值是100
Local Preference只在IBGP对等体之间进行传递(除非做了策略否则Local_Preference值在IBGP对等体间传递过程中不会丢失)
如果在EBGP对等体间收到的路由的路径属性中携带了Local_Preference,则会触发Notifacation报文,造成会话中断
AS边界路由器上使用Import方向的策略可以来修改Local_Preference属性值,也就是在收到路由之后,在本地为路由赋予Local_Preference
ATOMIC_Aggregate
路由聚合产生的标记
S为抑制
收到携带Atomic_Aggregate属性的路由表示这条路由不能再度明细化
3.可选过渡
可选过渡(Optional transitive):BGP 设备可以不识别此类属性,如果 BGP 设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体
Community
community-filter只能匹配路由,不能直接过滤路由
将此BGP路由的团体属性设置成:No_export,则此路由不会发布到本地AS之外
将此BGP路由的团体属性设置成:No_Advertise,则此路由不会通告给其他任何BGP对等体
通过设置路由的Community属性可以将路由分类,然后根据类别设置不同路由选路的相关属性,比如Local_Preference、MED、as-path等(BGP选路中除了IBGP和EBGP类型外都可以),从而达到影响路由选择的目的
Aggreator
4.可选非过渡
可选非过渡(Optional non-transitive):BGP 设备可以不识别此类属性,如果 BGP 设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体
MED
作用:是一种度量值
本地直连或者静态路由通过network或import-route的方式引入BGP.那么这条BGP路由的MED为0
MED主要用于在AS之间影响BGP的选路
MED默认为0
MED的优先级要低于AS Path- Preferred-Value、 Local_Preference和Origin
MED类似Cost,越小越优
一般情况下,BGP设备只比较来自同一AS(不同对等体)的路由的MED属性值
可以通过配置命令
compare-different-as-med
来允许BGP比较来自不同AS的路由的MED属性值
Originator_ID
RR的RID集合
路由反射属性
见路由反射器RR
Cluster——list
路由产生者的RID
路由反射属性
5.BGP属性表格
十一、BGP安全
BGP使用BGP认证和GTSM保证BGP对等体间交互的安全
可以通过display bgp peer verbose命令查看BGP对等体的认证详细信息
1.BGP认证
BGP认证使用MD5和Keychain认证
MD5 认证只能为 TCP 连接设置认证密码
Keychain 认证除了可以为 TCP 连接设置认证密码外,还可以对 BGP 协议报文进行认证
配置MD5认证密码时,如果使用simple选项,密码将以明文形式保存在配置文件中,存在安全隐患
2.BGP GTSM
BGP GTSM 检测 IP 报文头中的 TTL(time-to-live)值是否在一个预先设置好的特定范围内,并对不符合 TTL 值范围的报文进行允许通过或丢弃的操作,从而实现了保护 IP 层以上业务,增强系统安全性的目的
十二、路由优选
如果此路由的下一跳不可达,忽略此路由
当到达同一目的地存在多条路由时, BGP 依次对比下列属性来选择路由:
1.优选协议首选值(Preferred-Value)最高的路由
协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效
BGP的Preferred-Value属性不会随着BGP的Update报文通告给邻居
该属性值只影响本设备的路由优选
2.优选本地优先级(Local-Preference)最高的路由
如果路由没有本地优先级, BGP 选路时将该路由按缺省的本地优先级 100 来处理
3.依次优选手动聚合路由、自动聚合路由、 network 命令引入的路由、 import-route 命令引入的路由、从对等体学习的路由
聚合路由优于非聚会路由
手动聚合优于自动聚合
Network引入的路由优于Imcomplete引入的路由
4.优选 AS 路径(AS_Path)最短的路由
5.依次优选 Origin 类型为 IGP、 EGP、 Incomplete 的路由
Origin的IGP优于EGP
Origin的EGP优于Imcomplete
6.优选MED值小的
对于来自同一 AS 的路由,优选 MED(Multi Exit Discriminator)值最小的路由
7.EBGP路由优于IBGP路由
依次优选 EBGP 路由、 IBGP 路由、 LocalCross 路由、 RemoteCross 路由
8.优选到 BGP 下一跳 IGP 度量值(metric)最小的路由
当以上全部相同,则为等价路由,可以负载分担(注意:AS_Path必须一致,当负载分担时,以下3条原则无效)
9.优选 Cluster_List 最短的路由
10.优选Originator_ID 值最小的
如果路由不携带Originator_ID属性,选路过程中将比较RouterID的大小,并优选RouterID最小的路由
11.优选从 IP 地址最小的对等体学来的路由
Hold Time
Hold Time时间不同需要向小协商
路由聚合
为了防止路由震荡,BGP可以采用路由聚合提高网络的稳定性
对于IPv6路由,BGP支持手工聚合,不支持自动聚合
可以通过summary automatic命令生成自动聚合路由
可以手动通过aggregate命令在BGP视图内生成聚合路由
负载分担
公网中到达同一目的地的IBGP和EBGP路由不能形成负载分担是对的,BGP选路中EBGP路由优于IBGP在等价之前
默认情况下设备只会对AS_Path相同的路由进行负载分担。不是长度相同,而是要完全相同
评论区