×

【2022争霸赛*干货满满】路由协议之BGP路由
  

墨书 2227

{{ttag.title}}
BGP
BGP的概述
BGP协议基于TCP协议,使用端口号179号端口,以此来保证协议的稳定性,路由表更新只发增量的路由更新
用于自制系统AS之间的动态路由协议,用于AS之间选择最佳路由和控制路由的传播
BGP的邻居关系
EBGP邻居:运行在不同的AS之间的设备形成的
IBGP邻居:运行在同一AS的设备之间形成
建立EBGP邻居关系默认不能跨跳建立
建立BGP关系可跨跳建立
BGP路由的的传递
BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与对等体建立邻居关系后,采取以下交互原则:
IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。
EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。
当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。
BGP设备只发送更新的BGP路由。
所有对等体发送的路由,BGP设备都会接收。

BGP中报文交互的角色
BGP报文交互中分为Speaker和Peer两种角色

Speaker:发送BGP报文的设备称为BGP发言者(Speaker),它接收或产生新的报文信息,并发布(Advertise)给其它BGP Speaker。

Peer:相互交换报文的Speaker之间互称对等体(Peer)。若干相关的对等体可以构成对等体组(Peer Group)。

BGP中报文种类
BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送:

Open报文 用于建立BGP对等体连接。

Update报文 用于在对等体之间交换路由信息。

Notification报文 用于中断BGP连接。

Keepalive报文 用于保持BGP连接。

Route-refresh报文 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。

BGP中的状态机
BGP对等体的交互过程中存在6种状态机:

空闲(Idle)

连接(Connect)

活跃(Active)
Open报文已发送(OpenSent)

Open报文已确认(OpenConfirm)
连接已建立(Established)

BGP对等体建立的过程中,通常可见的3个状态是:Idle、Active和Established。
BGP邻居关系建立流程图
1.Idle状态
BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。

Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。

2. Connect状态
BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。

如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态

如果TCP连接失败,那么BGP转至Active状态。

如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态

3.Active状态

BGP总是在试图建立TCP连接

如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态

如果TCP连接失败,那么BGP停留在Active状态。

如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。

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报文

如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接

如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态

Route-refresh报文不会改变BGP状态

如果收到Notification报文,那么BGP转至Idle状态

如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态

BGP与IGP交互
BGP与IGP在设备中使用不同的路由表,为了实现不同AS间相互通讯,BGP需要与IGP进行交互,即BGP路由表和IGP路由表相互引入
BGP引入IGP路由
BGP协议本身不发现路由,因此需要将其他路由引入到BGP路由表,实现AS间的路由互通。当一个AS需要将路由发布给其他AS时,AS边缘路由器会在BGP路由表中引入IGP的路由。为了更好的规划网络,BGP在引入IGP的路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置MED值指导EBGP对等体判断流量进入AS时选路。

BGP引入路由时支持Import和Network两种方式
Import方式 是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。

Network方式 是逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确

IGP引入BGP路由
当一个AS需要引入其他AS的路由时,AS边缘路由器会在IGP路由表中引入BGP的路由。为了避免大量BGP路由对AS内设备造成影响,当IGP引入BGP路由时,可以使用路由策略,进行路由过滤和路由属性设置
BGP的路由优选规则和负载分担
BGP路由表中,到达同一目的地可能存在多条路由。此时BGP会选择其中一条路由作为最佳路由,并只把此路由发送给其对等体。BGP为了选出最佳路由,会根据BGP的路由优选规则依次比较这些路由的BGP属性。
BGP属性
路由属性是对路由的特定描述,所有的BGP路由属性都可以分为以下4类:

公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中。如果缺少这类属性,路由信息就会出错。

公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错。

可选过渡(Optional transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体。

可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。

Origin属性
Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:

IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。

EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。

Incomplete优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。

AS_Path属性
AS_ Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。

BGP Speaker传播自身引入的路由时:

BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。

BGP Speaker将这条路由通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表。
BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时:

BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS _ Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_ Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。

BGP Speaker将这条路由通告给IBGP对等体时,不会改变这条路由相关的AS_Path属性。

Next_Hop属性
Next_ Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_ Hop属性遵循下面的规则:

BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。

BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。

BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。

Local_Pref属性

Local_ Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_ Pref属性值较高的路由。Local_ Pref属性仅在IBGP对等体之间有效,不通告给其他AS。Local_ Pref属性可以手动配置,如果路由没有配置Local_ Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理。

MED属性

MED(Multi-Exit Discriminator)属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。

MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。

团体属性

团体属性(Community)用于标识具有相同特征的BGP路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。

Originator_ID属性和Cluster_List属性

Originator_ ID属性和Cluster_ List属性用于解决路由反射器场景中的环路问题

BGP选择路由的策略
当到达同一目的地存在多条路由时,BGP依次对比下列属性来选择路由:
1. 优选协议首选值(PrefVal)最高的路由。
协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效。

2. 优选本地优先级(Local_Pref)最高的路由。
如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。

3. 依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由。

4.  优选AS路径(AS_Path)最短的路由。

5.依次优选Origin类型为IGP、EGP、Incomplete的路由。

6. 对于来自同一AS的路由,优选MED值最低的路由。

7. 依次优选EBGP路由、IBGP路由、LocalCross路由、RemoteCross路由。
PE上某个VPN实例的VPNv4路由的ERT匹配其他VPN实例的IRT后复制到该VPN实例,称为LocalCross;从远端PE学习到的VPNv4路由的ERT匹配某个VPN实例的IRT后复制到该VPN实例,称为RemoteCross。

8. 优选到BGP下一跳IGP度量值(metric)最小的路由。
IGP中,对到达同一目的地址的不同路由,IGP根据本身的路由算法计算路由的度量值。

9. 优选Cluster_List最短的路由。

10. 优选Router ID最小的设备发布的路由。
如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较Router ID),并优选Originator_ID最小的路由。


11. 优选从具有最小IP Address的对等体学来的路由。

BGP负载分担
当到达同一目的地址存在多条等价路由时,可以通过BGP等价负载分担实现均衡流量的目的。形成BGP等价负载分担的条件是“BGP选择路由的策略”的1至8条规则中需要比较的属性完全相同。

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

339015 发表于 2022-10-22 04:08
  
感谢楼主分享,文章介绍了BGP相关协议概念,期待更多分享
新手719320 发表于 2022-11-18 11:21
  
每天学习一点新知识,谢谢分享
小鱼儿 发表于 2023-3-27 20:01
  

感谢分享,有助于工作,学习了!!!
飞飞侠 发表于 2023-3-27 20:01
  

感谢分享,有助于工作,学习了!!!
朱墩2 发表于 2023-3-27 20:01
  

感谢分享,有助于工作,学习了!!!
唐三平 发表于 2023-3-27 20:01
  

感谢分享,有助于工作,学习了!!!
鲤鲤 发表于 2023-3-27 20:09
  

感谢分享,有助于工作,学习了!!!
蔺嘉宾 发表于 2023-3-27 20:09
  

感谢分享,有助于工作,学习了!!!
梦境人生 发表于 2023-3-27 20:09
  

感谢分享,有助于工作,学习了!!!
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
安全效果
每日一问
干货满满
【 社区to talk】
技术笔记
新版本体验
功能体验
产品连连看
技术咨询
GIF动图学习
2023技术争霸赛专题
标准化排查
每周精选
通用技术
信服课堂视频
秒懂零信任
自助服务平台操作指引
安装部署配置
排障笔记本
答题自测
原创分享
升级&主动服务
社区新周刊
POC测试案例
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
技术晨报
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高手请过招
高频问题集锦
全能先锋系列
云化安全能力

本版版主

12
185
6

发帖

粉丝

关注

121
315
352

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人