IE之路专题12.BGP专题
BGP协议有哪些特点
-
BGP时边界网关协议(EGP),是一种用在自治系统之间传递路由信息的路由协议;
-
提供了丰富的路由属性以及强大的路由过滤和路由策略,实现灵活选路和路由控制;
-
策略方式更改属性或根据更新信息中属性实现过滤和策略
-
-
BGP是工作在传输层TCP之上的,使用TCP的端口号179;提高了协议的可靠性,且不需要专门的机制来确保连接的可控性
-
BGP易于扩展,能够适应网络新的发展。主要是通过 TLV进行扩展(T:tag标签,L:length长度,V:value内容)
-
BGP 是路径矢量路由协议,从设计上避免了环路的发生(携带经过全部的AS路径列表)
-
只发送增量更新路由,邻居建立后通告全部信息给邻居;此后路由表有变化才将变化的部分发送给邻居;利于大量传播信息;
BGP的应用场景
-
BGP主要用于互联网AS自治系统之间的互联,BGP的最主要功能在于控制路由的传播和选择最好的路由。
-
运营商和一些大的企业都具有AS号,运营商借助 BGP 在不同 AS 间交换路由信息,实现跨网络互连与数据传输。BGP 的可靠性和可扩展性助其构建全球大规模网络,提供优质服务,且支持支持路由策略控制运行商按业务需求定制路由规则。
-
在数据中心互联场景中,BGP被广泛应用于实现多数据中心之间的高效路由。通过BGP,数据中心可以连接多个运营商网络,利用多条链路实现数据的高速传输和负载均衡。
-
对于有众多分支机构的大型企业,借助 BGP,企业能将各分支网络相连,构建统一网络,提升数据传输效率,便于资源共享与管理。
用什么机构分发的AS号
-
AS是指由同一个技术管理机构管理,使用统一选路策略的一些路由器的集合;通常AS指的是运营商或大型机构
-
BGP网络中每个AS都被分配一个唯一的AS号,用于区分不同的AS
-
由IANA(互联网数字分配机构)复制AS号的分发
BGP消息(报文)
BGP消息
-
BGP报文头部19byte
-
类型:1-open,2-update,3-notification,4-keepalive
-
-
Open报文:
-
TCP建立后双方开始交互Open包;用于建立BGP对等体之间的连接关系并进行参数协商
-
版本号;本地AS号;保持时间;路由器标识
-
-
接收方验证消息内容,检验通过后,发送KEEPALIVE消息,转入OpenConfirm状态。
-
-
Update报文:
-
在对等体之间交换路由信息;
-
一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRI中。同时Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。
-
信息:
-
撤销路由长度;
-
撤销路由条目(Withdrawn Routes):被撤销BGP路由前缀;不可达路由的列表。
-
路径属性Path;与NLRI相关的所有路径属性列表,每个路径属性由一个TLV构成。
-
网络层可达信息NLRI:被通告的BGP路由前缀;可达路由的前缀和前缀长度二元组。
-
-
-
接收方更新本地路由表,并根据策略选择最佳路径。选择的最佳路径传播给其他BGP对等体。
-
-
Keepalive报文:
-
1.对等体建立过程中用于对收到的Open包回应确认;
-
2.周期性的向对等体发出Keepalive消息,刷新保活计时器,让BGP邻居直到自己的存在,保持邻居稳定性;(发送周期默认1/3保活时间)保活时间180s,发送周期为180/3=60s
-
Keepalive报文格式中只包含报文头,没有附加其他任何字段。
-
接收方接收到KEEPALIVE消息后,状态机进入Established状态,表示BGP会话已建立
-
-
Notification报文:
-
作用为错误通知;当BGP检测到错误状态时(对等体关系建立时、建立之后都可能发生),就会向对等体发送Notification,告知对端错误原因。之后BGP连接将会立即中断关闭连接回到Idle状态。
-
消息内容包含错误信息
-
-
接收方关闭TCP连接,BGP状态机回到Idle状态
-
-
Route-refresh报文:
-
用来要求对等体重新发送指定地址族路由信息;
-
(BGP只在第一次建立好发送路由,后续有变化才更新,如果都没有变化就不会发送路由,特殊情况需要发送)
-
BGP如何更新路由?
-
Update报文用于在对等体之间交换路由信息;
-
Update消息可以发布多条属性值相同的可达路由信息,也可以撤销多条不可达的路由信息,在发布可达路由信息时,会携带相应的BGP路由属性,而在撤销路由更新时不携带BGP路由属性;
-
信息:
-
撤销路由长度;
-
撤销路由条目(Withdrawn Routes):被撤销BGP路由前缀
-
多条BGP路由要撤销使用:前缀长度+路由前缀
-
-
路径属性Path;
-
网络层可达信息NLRI:被通告的BGP路由前缀
-
多条BGP路由要通告:前缀长度+路由前缀
-
一个Updadte报文用于通告拥有相同路径属性的路由前缀
-
-
-
不做路由更新单纯建立BGP也会发送Update报文(无路由信息)
-
BGP发布路由和撤销路由的区别?
-
Update消息发布路由更新时携带路由属性,可以发布多条属性相同的可达路由信息
-
撤销路由时不携带BGP路由属性;
-
-
BGP状态机和邻居建立过程
BGP协议状态机
BGP的状态机有哪些?
active的下一个状态是什么
如果BGP建立起来,又断开了会处于什么状态
-
Idle状态(空闲)
-
BGP状态机的初始状态,BGP拒绝任何进入的连接请求;
-
任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。
-
只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并且转移到Connect状态;
-
Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
-
-
Connect状态(连接)
-
在Connect状态下,BGP启动连接重传定时器,等待TCP完成连接。本端为TCP被动方,等待对方和我握手;
-
如果TCP连接成功,BGP停止重传定时器,向对等体发送Open报文,并转至OpenSent状态。
-
如果TCP连接失败,BGP重置重传定时器,监听对方发起的TCP连接,并转至Active状态。
-
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
-
-
-
Active状态(活跃)
-
有启动事件,但是TCP连接未完成;BGP将尝试主动进行TCP连接的建立,主动发出握手请求同时重置重传计时器,是BGP的中间状态
-
如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,转至Open-Sent并状态启动Holdtime(保活计时器)。
-
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
-
如果BGP试图与一个未知的IP地址建立TCP会话,则TCP连接失败
-
连接重传定时器被重置,并且BGP保持在Active状态
-
-
-
-
Open-sent状态
-
BGP已经向对等体发送了一个Open消息,并且等待对等体的Open消息;对收到Open报文进行进行检查
-
如果BGP收到正确的Open消息
-
则向对端发送一个keepalive消息,并转移到Open-confirm状态
-
-
如果BGP收到的Open消息有错误
-
则给对等体发送一个notification消息,并且转移到Idle状态
-
-
-
Open-confirm
-
此状态下,BGP等待一个Notification消息,或keepalive消息;
-
如果BGP收到Notification消息或者TCP连接断开消息,则转移到Idle状态
-
如果BGP收到Keepalive消息,则转移到Established状态
-
-
Established状态(连接建立):
-
BGP对等体间可以交换Update消息,Notification消息,和keepalive消息
-
如果BGP收到update消息或者keepalive消息,则继续保持在Established状态
-
如果BGP收到Notification消息,则转移到Idle状态
-
-
Route-refresh报文不会改变BGP状态;
-
-
除了Idle状态以外的其他5个状态出现任何错误的时候,BGP状态会退回到Idle状态
如果两个BGP邻居一直处于IDLE状态,是什么原因
-
本BGP设备没有去往对等体的路由,TCP连接无法发起
-
收到TCP的结束连接报文(删除邻居或者邻居超时触发)
-
中间设备阻断了TCP179端口的通信
-
-
收到来自邻居的Notification报文
-
AS错误,RID重复,认证失败
-
-
地址家族没有激活邻居关系
-
EBGP邻居非直连(如通过环回口建立)没有设置多跳;
-
默认EBGP要求TTL=1(直连),非直连需配置ebgp-max-hop 2//允许2跳
-
-
Loopback口建立邻居没有指定更新源;使用物理接口IP,导致源IP不匹配。
-
MTU问题:路径中存在MTU不一致导致分片丢弃(较少见)
影响BGP邻居建立的因素
//万金油:验证,过滤,物理
-
指定的邻居地址没有路由可达
-
指定的邻居的 AS 编号错误
-
使用了 Loopback 口指邻居,但未修改更新源
-
使用非直连接网指定 EBGP 邻居,但未修改 EBGP 最大跳数。默认 EBGP 的 TTL为1
-
能力值协商未通过
-
身份验证未通过
-
RID 冲突
-
TCP 端口 179 不可达
-
未在地址家族激活对等体。
-
在 IPv6 场景中,如果没有手工指定 RID,也可能导致IPv6 的 BGP 邻居无法正常建立。
BGP建立之后又断开的原因:
-
物理层:
-
链路故障:网线,光纤,接口模块等故障
-
电源问题:电源供给不稳定,设备重启或者断电
-
-
协议层:
-
Keepalive:BGP 通过定期发送 Keepalive 消息来维持邻居关系
-
BGP版本不兼容:可能会出问题
-
-
配置问题:
-
认证配置不一致
-
配置变化
-
-
保护机制:
-
如果设置了一些资源保护机制,对 BGP 处理的路由条目数量、邻居会话数量等进行限制。达到设备设定的阈值时可能会断开
-
为了防止网络攻击设置了安全保护机制,限制 BGP 邻居的连接速率
-
-
MTU过大的数据包可能会在传输过程中被丢弃,导致 BGP 通信中断,邻居关系断开。
BGP是否有计算路由的能力
-
BGP没有路由计算的能力,BGP主要作用是支持庞大路由条目的处理,以及非常灵活的路由选路和控制,BGP基于路径矢量算法进行路由选择。
-
BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。
-
BGP为什么不能计算路由?
-
EGP在AS之间需要传递大量的路由信息,对EGP的可控性、可靠性要求高;BGP的主要作用是支持庞大路由条目的处理,以及非常灵活的路由选路和控制,BGP基于路径矢量算法进行路由选择。
-
-
距离矢量和路径矢量的区别:
-
BGP协议是路径矢量协议不同与距离矢量,路径矢量是以一个AS为单位,而距离矢量是以一个路由为单位,距离矢量是一种路由算法,而BGP不需要计算路由,它只需将以计算好的路由传递给了邻居即可。
-
BGP的路由来源
BGP路由来源:直连路由,静态路由,通过IGP学习到的路由
可以使用3种方式将路由发布到BGP
-
使用Network命令将路由发布到BGP
-
将路由表中直连路由,静态路由,通过IGP学习到的路由发布到BGP
-
和OSFP不同,不能在接口上激活BGP,是用于向BGP发布路由,对等体需要通过peer命令指定;
-
-
使用import-route命令将路由引入BGP
-
将路由表中直连路由,静态路由,通过IGP学习到的路由引入到BGP
-
如果要发布大量OSPF路由到BGP,使用引入比较高效
-
和Network的区别,Origin(起源)属性不同 I ?
-
-
使用aggregate向BGP发布路由聚合
-
在BGP已经学习到相应的明细路由前提下,设备会向BGP注入指定的聚合路由。
-
执行聚合之后,在本地的BGP路由表中除了原本的明细路由条目之外,还会多出一条聚合的路由条目。
-
-
BGP的network命令和OSPF的network命令的区别
-
RIP 和 OSPF 中的 Network 命令都是宣告一个网段,然后路由器会把所有接口的IP地址与宣告的网段进行匹配,匹配成功则该接口就参与协议运行,一方面该接口可以和对端建立邻居,另一方面该接口所在网段的路由能够传递出去
-
BGP 的 Network 命令宣告一个网段,路由器就会在自己的路由表中去匹配,检查是否有一条路由的目的网段和掩码和宣告的完全一致,只有完全一致才能把这条路由加入到 BGP:而且 BGP的邻居建立和宣告没有关系
BGP中使用network宣告路由的优缺点
-
BGP使用 Network命令宣告路由,是在路由表精确匹配路由,所以如果有大量路由需要加入到 BGP 的话就需要一条一条的配置宣告,操作很繁琐;而如果使用import引人的话,可以通过ACL定义路由策略来一次性引入多条路由,相对操作比较便捷
-
优点则是如果只有少量几条路由要加入到BGP时,Network 宣告可以快速准确的配置,而使用 lmpont 引入的话同样也需要定义 ACL 和路由策略来做精确匹配,比较繁琐
-
可以在 BGP network 路由时携带 route-policy,来实现在宣告路由时修改路由的相应属性。
BGP发布路由的策略
-
BGP 只发布自身可以使用的 BGP路由给其他对等体,对于下一跳不可达的,则不发送
-
从 IBGP 对等体获得的 BGP 路由,BGP 设备只发布给它的EBGP 对等体,BGP不会将来自IBGP 对等体更新的路由信息在发布给其他IBGP 对等体(AS内部防环)
-
从 EBGP 对等体获得的 BGP 路由,BGP 设备发布给它所有 EBGP 和IBGP 对等体
-
BGP 设备只将 BGP表中最优路由发布给对等体,可使用命令advertise-rib-active 命令使路由器只发布 IP 路由表中的最优路由(这时候就不考虑BGP路由表中的最优路由)
-
BGP 只在建立邻居后的第一次发送完整路由表,以后只在路由有变动才发送路由更新
-
所有对等体发送的路由,BGP设备都会接收 ; 不过,接收到的路由并不一定会被放入 BGP 路由表或用于数据包转发,还需要经过一系列的路由选择和过滤规则的处理。
BGP从对等体接收到路由的处理流程
-
BGP发言者从对等体收到路由后根据配置接收策略对接收到的BGP路由进行匹配与过滤,并设置相关的属性
-
完成接收策略后,如果有需要会对路由进行聚合,合并具体路由减少路由表规模
-
完成路由合并后,BGP对收到的路由进行优选,对到达同个目的地址的多条BGP路由,BGP发言者只选择最佳路由给自己使用,将此安装到IP路由表,成为有效路由
-
向BGP对等体发布路由时,依据一定的发布策略,对已经安装到自己IP路由表的部分有效路由进行发布
-
同时,BGP路由器需要执行发布路由与属性设置,将通过过滤的BGP路由发送给自己BGP对等体
BGP路由表
-
运行BGP的设备会维护BGP路由表,存储设备发现的所有BGP路由;
-
当设备从其他对等体收到BGP路由后,可以针对这些路由实施入放行(Import)的路由策略,这些策略执行完后,被处理过的路由才会被加载到BGP路由表中
-
当设备发现了多条到达相同目的网段的BGP路由时,会将这些路由都加载到自己的BGP路由表;最终只有一条最优的路由会被选择,加入到全局路由表(没有匹配负载分担的情况)
路由反射器反射规则
-
路由反射器用于替代IBGP 全连接来解决 BGP路由黑洞问题,可以减少IBGP 邻居数量
-
BGP路由反射器(RR)能够把从IBGP邻居学习的路由反射器给其他IBGP邻居,客户机只需要和路由反射器建立IBGP连接
-
反射规则如下:
-
从非反射客户端接收的路由,仅反射给客户端。非非不传,即来自非客户端的路由更新不会反射给其他非客户端(不反射给非客户端的原因是非客户端可能有自己的反射器,多次反射可能导致环路,因为与其他非客户端之间建立的是 IBGP 关系,执行常规的IBGP 水平分割)
-
从反射客户端收到的路由,反射给所有客户端和非客户端,路由始发者除外
-
从 EBGP 接收的路由,反射给所有的客户端和非客户端
-
RR 在反射路由时不会对 BGP 的属性进行变更。
-
当 RR从多个客户端学习到相同路由时,如何进行处理
-
默认情况下,RR 会根据 BGP 的路由选路原则选举其中一个最优的路由,然后只将这个最优的路由反射给其他对等体
-
在 BGP的地址家族中、使用balance和add-path 命令可以开启负载均衡的模式,开启负载均衡之后,RR 就可以把来自多个客户端的相同路由同时反射出去。
在BGP多路由反射器场景中有什么注意事项
一个骨干网被分成多个反射器集群,每个反射器将其他的反射器配置成非客户机,各反射器之间建立IBGP全连接;每个客户机只与所在集群的反射器建立IBGP连接,这样该自治系统内的所有BGP路由器都会收到反射路由信息
-
集群中可以配置一个以上的路由反射器,以增加网络的可靠性,防止单点故障
-
每个路由反射器都要配置相同的集群ID(Cluster_ID),以避免路由环路的产生。缺省情况使用自己的RID作为集群ID
-
存在多个 RR 反射集群的场景,RR 之间需要建立全互联,即 RR 之间执行常规的IBGP 水平分割原则
-
在冗余的环境里,客户机会收到不同反射器发来的到达同一目的地的多条路由,这时客户机应用 BGP选择路由的策略来选择最佳路由,选择 Cluster-list 短的。
多路由反射器防环原理
路由反射器路由反射中防环是怎么防的,class id字段抓包时候里面填的是什么
-
RR打破了BGP水平分割规则,可能使某个集群发出的路由在经过多次反射后回到该群,需要添加originator_id,和cluster_list属性防止环路
-
为了防止引入反射器后,在路由更新中引起环路,BGP引入两个 BGP 路径属性,分别为ORIGINATOR_ID属性,以及 CLUSTERLIST 属性。
-
Originator_id属性:(o rige netor)
-
路由反射器从某个对等体接收到路由后,在反射该路由之前为其添加Originator_id属性,标识该路由在本 AS 内的起Originator_id,属性的值为该对等体的 Router ID。
-
当路由器收到BGP路由时,对比本机Router-id和该路由的Originator-id,一致则丢弃路由,从而避免环路
-
Originator_id还用于路由优选,小的优先
-
-
Cluster_list属性:(ke la si t)
-
路由传递过程中,把经过的反射器的Cluster_id一次记录在Cluster_list中;缺省情况下,每个反射器使用自己的路由器ID 作为 CLUSTER_ID。
-
当反射器收到BGP路由时,如果本机的Cluster_id出现在Cluster_list中,则丢弃该路由
-
Cluster_list用于路由优选,短的优先
-
BGP联盟
-
BGP联盟将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接关系,子自治系统之间建立联盟内部EBGP连接关系。
-
在不属于联盟的BGP发言者看来,属于同一个联盟的多个子自治系统是一个整体,外界不需要了解内部的子自治系统情况,联盟ID就是标识联盟这一整体的自治系统号
-
在联盟内各个子系统使用AS号标识自己,该AS号仅在联盟内部可见;一个联盟最多可包括32个子自治系统;
-
联盟改变了标志AS内部结构,BGP通过扩展AS_PATH属性来避免联盟内部出现环路;
-
对于MED,NEXT_HOP,LOCAL_PREF属性的处理也和标准的BGP不同,它们被允许附加在路由更新信息中发送到联盟内部不同子AS的EBGP对等体
-
在大型BGP网络中,路由反射器和联盟可以被同时使用。
-
需要注意:子AS使用私有AS编号,内部路由器的BGP运行在子AS中,其他真实AS的路由器仍然和联盟AS建立EBGP邻居,跨越子AS的EBGP邻居仍然需要更改下一跳为本机
(64512-65534)
BGP反射器与联盟的对比
反射器 | 联盟 | |
---|---|---|
拓扑 | 不需要更改现有的网络拓扑,兼容性好 | 需要更改逻辑拓扑 |
配置 | 配置方便,客户机不知道自己是客户机 | 所有设备需要重新进行配置,且所有设备必须支持联盟功能 |
连接 | 集群与集群之间仍需要全连接 | 联盟的子AS之间的特殊的EBGP连接,不需要全连接 |
应用 | 在大型网络中应用广泛 | 应用较少 |
-
反射器(RR)
-
不需要更改现有的网络拓扑,兼容性好,
-
配置方便,客户机不知道自己是客户机,
-
集群与集群之间仍需要全连接,
-
在大型网络中应用广泛
-
-
联盟
-
需要更改逻辑拓扑
-
所有设备需要重新进行配置,且所有设备必须支持联盟功能
-
联盟的子AS之间的特殊的EBGP连接,不需要全连接
-
应用较少
-
BGP对等体过多的问题
-
CPU内存消耗过大,影响路由器性能
-
会话建立时间长,收敛慢(TCP179建立,大量的TCP连接)
-
配置复杂,维护难度大,扩展性差
BGP减少对等体的方法有哪些
-
1.使用路由反射器(RR)
-
在路由反射器的场景,客户端只需要跟RR之间建立对等体关系即可,无需对整个环境的AS重新规划,配置更加精简,实际应用中比较常见;
-
-
2.使用联盟的方式
-
在使用联盟的场景中,将一个大的AS分出多个小的AS,小AS内建立联盟内的全互联IBGP对等体关系,小AS之建立联盟的EBGP关系,联盟内的结构对外部网络不可见
-
但是使用联盟需要进行小AS的规划,以及需要将原有的BGP配置删除,进行重新配置,比较麻烦,应用比较少见
-
-
-
3.使用MPLS标签的方式
-
在PE之间建立IBGP关系,在AS内部启用MPLS
-
在PE之间建立隧道,在隧道上建立BGP邻居关系
-
-
4.在PE间建立隧道,在隧道上建立BGP邻居关系
什么是BGP路由黑洞以及BGP同步
-
路由黑洞是指路由器收到数据包时,查找路由表,因为没有前往目标的相应路由信息,导致将数据包丢弃的现象称为路由黑洞
-
BGP路由黑洞产生的原因:
-
BGP路由和IGP不同步
-
在MPLS VPN场景,MPLS域的某些设备接口没有正确的启用MPLS
-
-
BGP同步:
-
BGP同步指的是IGP和BGP表的同步,BGP在收到IBGP路由发送给外部EBGP对等体之前,要先判断发送的路由更新,在IGP表中是否存在,存在则发送,如果IGP表中不存在,则不发送,用来避免路由黑洞的产生
-
现在的设备默认是关闭同步,即使IGP和BGP表不同步,BGP在收到IBGP路由更新时可以直接发送给EBGP对等体;
-
-
解决路由黑洞方案:
-
将BGP引入到IGP:
-
因为BGP可以处理庞大的路由条目,而IGP不支持,所以对于大规模网络,不建议将BGP引入到IGP
-
-
建立全互联的 IBGP 对等体关系:
-
全互联IBGP 对等体只 AS内的所有路由两两之间都建立IBGP 对等体关系,对于大规模的网络环境,会导致需要消耗大量的资源去维护众多的IBGP 对等体关系,并且不利于网络的维护和扩展,可以采用路由反射器或联盟的方式进行优化。
-
-
可以采用 MPLS:
-
只需要在 PE之间建立IBGP 对等体关系,在 AS 内采用基于标签交换处理,通过这种方式可以无需启用 BGP 同步。
-
-
也可以在 PE之间采用隧道技术,基于隧道建立IBGP 关系,来传递 BGP 路由更新。
-
-
场景题目:
BGP的防环机制
-
AS 内部:
-
通过IBGP 水平分割防环。从一个IBGP邻居收到的路由不会传递至其他IBGP 邻居
-
-
AS 之间:
-
通过 AS-Path 检查机制防环;
-
-
反射集群内部多反射器的防环(对象RR):
-
通过Cluster-list防环。路由传递过程中,把经过的反射器的 Cluster_id 会依次记录在 Cluster-list 属性中。当反射器收到 BGP路由时,如果本机的 Cluster_id出现在 Cluster-list 中,则丢弃该路由
-
-
反射集群之间的防环(对象客户端):
-
通过 Originator_id 防环。当路由反射器反射一条路由时产生、使用 AS 内路由始发者的 Router-id 来标识。当路由器收到 BGP 路由时对比本机 Router-id 和该路由的 Originator_id,一致则丢弃路由
-
-
联盟环境:
-
可以通过联盟的 AS-PATH 来实现环路避免
-
-
BGP 汇总的场景:
-
执行汇总时添加 AS-SET 参数。汇总路由的 AS - Path 属性会包含所有被汇总的具体路由所经过的自治系统编号集合(以集合的形式表示)
-
AS-SET:无序的AS列表
-
AS-PATH:有序的AS列表
-
-
BGP的13条选路规则
-
丢弃下一跳不可达的路由。
-
(常见情况是 ASBR 没有配置对 IBGP 邻居下一跳变更为本机,导致 AS 内部的路由器由于下一跳不可达而丢弃路由)
-
-
优选首选值(Preferred-value)最大的路由
-
(Pre fe de)32768,(本地属性值)
-
-
优选本地优先级(Local-preference)最大的路由
-
(AS内部选路)100
-
-
依次优选 Network产生的路由, import-route命令引入的路由, 聚合路由
-
优选 AS路径(AS-path) 最短的路由
-
依次优选 Origin 属性为IGP,EGP,lncomplete(来源未知) 的路由(in com pete)
-
优选 MED(多出口鉴别器) 最小的路由
-
依次选择邻居类型:从 EBGP,联盟EBGP,联盟IBGP,IBGP 邻居学习的路由
-
优选到达下一跳在IGP路由中度量值最低的路由
-
优选 Cluster_list(集群列表) 最短的路由
-
优选 Originator_id 最小的路由
-
优选 Router-id 最小的路由器发布的路由
BGP的属性分类,每种类型分别有哪些属性
公认必遵 | 公认可选 | 可选传递 | 可选非传递 | |
---|---|---|---|---|
定义 | 所有路由器必须识别,BGP发布路由必须携带 | 所有路由器必须识别,但BGP发布路由不是必须携带 | 路由器可以不识别该属性,但是会继续向下传递 | 路由器可以不识别该属性,且不识别时不会线下传递 |
-
公认必遵属性:所有路由器能识别,且每条路由必须携带的属性;必须存在Update消息中,如果缺少这种属性,路由信息就会出错;
-
AS-Path
-
Next-hop(下一跳属性)
-
Origin(起源属性)
-
-
公认可选属性:所有路由器都能识别,但不是每条路由都会携带的属性;不要求必须存在Update消息中;
-
Local-preference:(本地优先级)
-
用来通告IBGP邻居离开本AS的最优路径;用于一个AS有多个出口的情况下判断流量离开AS时最佳路由
-
默认值100,大的优先,只对IBGP邻居传递,不对EBGP邻居传递;仅会影响离开该AS的流量,不会影响进入该AS的流量
-
-
Atomic_aggregate:自动聚合属性,聚合时未加as-set参数,则携带该属性表示该路由的明细属性未知,如果聚合时,添加as-set 参数,则不携带该属性,添加 as-set 会继承明细条目的属性,Atomic_aggregate 属性主要用于表示该路由的属性缺失
-
-
可选传递属性:不是所有的路由器都要识别,但如果某台路由器不识别该属性,仍会继续向下传递该属性
-
Community:团体属性
-
Aggregator:手动聚合属性,只要对BGP的路由进行聚合,无论加什么参数,都有这个属性,表示该路由是一个 BGP 的聚合路由
-
-
可选非传递属性;不是所有路由器都要识别,且如果某台路由器不识别该属性,就不会继续向下传递该属性
-
MED
-
Cluster_list
-
Originator_id
-
BGP的路由属性
Preferred-value属性
首选值,是H3C私有BGP属性,为从对等体收到的路由分配首选值,从而影响选路,只在本地有效,不随路由信息传播;越大越优
-
Preferred-value 为H3C 私有属性,为从对等体收到的路由分配首选值,从而影响选路,只在本地有效,不随路由信息传播;越大越优
-
首选值一般用于本路由器有多个链路连接到其他对等体,用于在本地控制选择哪个链路访问其他区域当一条路由进入 BGP时,在始发路由器上属性值为 32768,非始发路由器上看到的 Preferred-value 属性默认全为0
-
本地优先级(local-preference)
-
local-preference(本地优先级)属性是公认可选属性,用于AS内IBGP邻居选择离开本AS时的最佳路由,表明BGP路由器的优先级;仅在IBGP对等体之间交换,不传递或通告给其他EBGP对等体;
-
当BGP路由器从不同的IBGP路由器对等体得到目的地址相同但是下一跳不同的多条路由时,优先选择Local-Preference值较高的路由;属性值默认100
-
适用场景:
AS路径(AS-PATH)属性
-
AS_PATH(AS路径)属性是公认必遵属性,记录了某条路由从本地到目的地址所要经过的所有AS号。当BGP路由器将一条路由通告到其他AS时(EBGP),会把本地AS号添加在AS_PATH列表中,(最先经过的在最右边,最后经过的在最左边),收到此路由的BGP路由器根据AS_PATH属性就可以知道到达目的地址所要经过的AS。
-
用途
-
避免路由环路的形成:缺省情况下,如果BGP路由器接收到的路由的AS_PATH属性中已经包含了本地的AS号,则BGP路由器认为出现路由环路,不会接受该路由。
-
影响路由的选择:在其他因素相同的情况下,BGP会优先选择路径较短的路由。在IBGP 之间发送路由更新时,AS-PATH 保持不变,可以通过路由策略来手工的修改 AS-PATH(为了防环建议增加真实经过的AS编号)
-
对路由进行过滤:通过配置AS路径过滤列表,可以针对AS_PATH属性中所包含的AS号来对路由进行过滤。
-
-
有两种类型
-
AS_SEQUENCE(序列):AS号按照一定的顺序排列。
-
最先经过的在最右边,最后经过的在最左边
-
-
AS_SET:AS号只是经过的AS的简单罗列,没有顺序要求。
-
-
起源(Origin)属性
-
ORIGIN(起源)属性是公认必遵属性,定义了路由信息的来源,标记一条BGP路由是怎么生成的。有三种类型:
-
IGP:优先级最高,表示路由产生于本AS内,路由是通过 Network 或者聚合的方式进入的 BGP,显示为 i
-
EGP:优先级次之,路由是通过把 EGP 协议的路由引入进的 BGP,显示为 e
-
Incomplete:优先级最低,表示路由的来源无法确定。显示为? ( 从其它路由协议引入的路由信息。)
-
-
Origin 属性用于路由优选,IGP>EGP>Incomplete
下一跳(NEXT_HOP)属性
-
NEXT_HOP(下一跳)属性是公认必遵属性;为BGP发言中指示去往目的的下一跳;
-
BGP的NEXT_HOP属性取值不一定是邻居路由器的IP地址。分为以下几种:
-
BGP发言者把自己产生的路由发给所有邻居时,将该路由信息的NEXT_HOP属性设置为自己与对端连接的接口地址;
-
BGP发言者把接收到的路由发送给EBGP对等体时,将该路由信息的NEXT_HOP属性设置为自己与对端连接的接口地址;
-
BGP发言者把从EBGP邻居得到的路由发给IBGP邻居时,并不改变该路由信息的NEXT_HOP属性。
-
如果配置了负载分担,等价路由被发给IBGP邻居时则会修改NEXT_HOP属性。
-
-
对IBGP邻居发布的路由通过命令更改下一跳为本机
-
MED(多出口区分)属性
-
MED属性是可选非传递属性,相当于IGP协议的度量值,当一个AS有多个入口点时,用于判断流量进入AS时的最优路径;仅在相邻两个AS之间传递,收到此属性的AS一方不会再通告给其他任何第三方AS;
-
一个BGP路由器通过不同的EBGP对等体得到目的地址相同,但是下一跳不同的多条路由时,其他条件相同情况下,优先选择MED值小的作为最佳路由;network的路由,默认属性值0;引入的路由,默认属性值为原IGP协议中的cost;
-
MED属性仅在相邻两个AS之间交换,收到此属性的AS不会再将其通告给其它AS。
-
如果一条路由的MED属性是在本机被赋予的,该路由的MED属于会传递至IBGP和EBGP邻居
-
如果一条路由的MED属性不是在本机被赋予的,该路由的MED属性只会被传递至IBGP邻居
-
路由使本机发布进BGP或者在本机通过策略修改了med属性,都属于med属性在本机被赋予
-
-
适用场景:
-
通常情况下,BGP只比较来自同一个AS的路由的MED属性值。在某些特殊的应用中,用户也可以通过配置compare-different-as-med命令,强制BGP比较来自不同AS的路由的MED属性值。
Cluster_List
-
Cluster_list用于路由优选,短的优先
-
路由传递过程中,把经过的反射器的Cluster_id一次记录在Cluster_list中;缺省情况下,每个反射器使用自己的路由器ID 作为 CLUSTER_ID。
-
当反射器收到BGP路由时,如果本机的Cluster_id出现在Cluster_list中,则丢弃该路由
Originator_id
-
选路原则中,选择 Originator_id 最小的路由
-
在 RR (路由反射器)的场景,可以通过 Originator_id 来判断去往目标的真实下一跳,免次优路径
-
通过 Originator_id 实现环路的避免,如果在收到路由更新的 Originator_id 发现跟本地的 RID 一致,则不接收
-
对于 IPv4 地址族,Originator_id 这个属性是无法进行修改的。VPNv4 允许对 Originator_id 等一些属性进行操
Local-preference与Med属性对比
对比项 | Local-preference | MED(多出口鉴别器) |
---|---|---|
作用 | 控制本 AS 内设备选择离开 AS 的最优出口(出向流量)。 | 影响相邻 AS 选择进入本 AS 的最优路径(入向流量)。 |
作用范围 | 仅在 AS 内部生效(IBGP 邻居间传递)。 | 主要在 AS 之间生效(EBGP 邻居间传递)。 |
默认值 | 通常为 100 | 通过 network宣告的路由:0。 通过 import-route从 IGP 引入的路由:继承原 IGP 的 Metric。 |
优选规则 | 值越大越优先 | 值越小越优先 |
属性传递规则 | - 公认可选属性。 - 仅在 AS 内传递(IBGP)。 | - 可选非传递属性。 - 本机赋予的 MED:可传递至 IBGP 和 EBGP。 -非本机赋予的 MED:仅传递至 IBGP。 |
应用场景 | AS 内部有多个出口链路时,统一内部设备选择同一出口。 | 相邻 AS 间有多个互联链路时,引导对端 AS 选择指定入口。 |
-
Local-preference 是本地优先级。
-
用于通告IBGP 邻居离开 AS 的最优路径,本地优先级一般用于本 AS 有多个出口去访问其他 AS,用来控制本 AS 内的设备选择哪个出口去访问外部。
-
-
MED 是多出口鉴别器
-
相当于IGP 协议使用的度量值,当一个 AS 有多个入口点时,用于判断流量进入 AS 时的最优路径,MED 一般用于相邻的两个 AS 之间有多个链路互联,用于控制对端选择哪个链路访问本端。MED 的发送或传递的原则:
-
-
作用范围:
-
Local - preference:仅在自治系统内部起作用,是自治系统内部的一种路由选择策略。
-
MED: 主要影响相邻自治系统的路由器如何选择进入本自治系统的路径,作用于自治系统之间的边界。
-
-
默认值与优选规则:
-
Local - preference:默认值通常为 100。在进行路径选择时,本地优先级值越大,表示该路径越优。
-
MED:如果路由是通过 Network 命令宣告进 BGP 的,MED 值默认为 0;如果路由是把 IGP 协议引入到 BGP 的,MED 值默认为该路由原来的 Metric。
-
-
属性传递规则:
-
Local - preference:是公认可选属性;仅在自治系统内传播
-
MED:是可选非传递属性,如果路由的 MED 属性是在本路由器上被赋予的,则 MED 属性可传递至 IBGP 和 EBGP 邻居;如果路由的 MED 属性不是在本机被赋予的,则只传递给 IBGP 邻居。
-
-
应用场景:
-
Local - preference:用于自治系统内部有多个出口连接到外部网络的情况
-
MED:相邻自治系统之间有多个链路互联的场景
-
各种属性控制路由的使用场景
-
AS-Path:
-
由于 AS-Path 是公认必遵属性,所以该属性会传递至每台路由器。如果希望影响下游所有路由器的路由选择,可以使用在发送 BGP 路由的出方向通过修改 AS-Path 来实现,或者在本地希望影响本地的出方向路由选择,也可以在接收 BGP 路由的方向使用修改 AS-PATH 来实现
-
-
Local-preference:本地优先级
-
由于本地优先级只对IBGP 邻居传递,所以如果希望只影响本 AS 内部路由器的路由选择,建议使用 Local-preference,通常用于本AS有多个出口去往外部,可以在边界设置本地优先级,来影响内部设备访问外部的路由选择。
-
-
MED:
-
由于 MED会传递至 EBGP 邻居,但不传递至下下个AS,所以如果希望只影响下游某一个 AS 的路由选择,建议使用MED,通常用于相邻的两个 AS 有多条路劲的情况,在本端控制对端访问本端的网络出口。
-
-
Preferred-value:首选值
-
该属性不传递至任何邻居,所以如果希望只影响某一台路由器的路由选择,建议使用 Preferred-value
-
我如果要控制我公司访问运营商的路由的话,我应该在公司做这个med还是在运营商做这个med?
做这个MED会影响到其他区域的路由吗?
-
MED是多出口区分,当一个AS有多个入口点时,用于判断流量进入AS时的最优路径;仅在相邻两个AS之间传递,收到此属性的AS一方不会再通告给其他任何第三方AS;通常MED是在对端执行的 但是也是可以在公司这里接收方向做控制,不会影响其他区域路由
在多个不同的 MPLS VPN 站点或两个不同的站点 BGP AS 号相同要如何处理
-
可以在 BGP地址家族视图,使用peer xxxx allow-as-loop N,来实现允许接收 AS-PATH 中出现跟本地一样 AS号的 BGP 路由,N 代表允许重复出现同一个 AS 号的次数。
-
也可以在 BGP 视图,使用 peer x.x.x.x substitute-as 来将重复的 AS号改写成本地的 AS 号,前提条件是接收路由的 AS 号和该路由的 AS-PATH 中的第一个 AS 号一样的条件下,该命令才会生效。
AS-Path列表正则表达式常见举例
-
.*
:匹配所有路由-
表示匹配任意字符串,即AS_Path为任意,可以用来匹配所有路由。
-
在一个AS_Path列表中创建了一个或多个拒绝模式的AS_Path规则后,需要创建一个.*规则,来允许所有其他路由通过。
-
-
^$
:匹配本地始发路由-
表示匹配空字符串,即AS_Path为空,通常用来匹配本地始发路由。
-
-
^65001_
:匹配邻居AS65001发送的路由-
表示匹配字符串的开始为65001,字符串的后面为符号,也即AS_Path最左边AS(最后一个AS)为65001,可以用来匹配AS 65001邻居发送的路由
-
-
_65001_
:有经过AS65001的路由-
表示匹配字符串里有65001,即AS_Path中有65001,可以用来匹配经过AS 65001的路由。
-
-
_65001$
:匹配AS65001始发的路由-
表示匹配字符串的最后为65001,字符串前面是符号,即AS_Path最右边AS(第一个AS)为65001,可以用来匹配AS 65001始发的路由。
-
团体(COMMUNITY)属性的作用
-
团体属性是一组有相同特征的目的地址的集合
-
根据需要,一条路由可以携带一个或多个团体属性值接收到该路由的路由器可以通过比较团体属性值对路由作出适当的处理,而不需要匹配复杂的过滤规则(如ACL),从而简化路由策略的应用和降低维护管理的难度。
-
团体属性的作用:路由标识与统一操作
-
比如某企业的总部需要对全国所有分公司的市场部路由进行统一操作,但是由于IP规划的不合理,导致很难用ACL来进行路由的匹配。可以通过在每个分公司的出口对本地市场部的路由进行团体属性标记。最终在总部只需要检查该团体属性就能识别出所有分公司市场部的路由)
-
公认/私有团体属性
-
INTERNET:缺省情况下,所有的路由都属于它。具有此属性的路由可以被通告给所有的BGP对等体。
-
NO_EXPORT:具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS
-
NO_ADVERTISE:表示该路由不能发布给其他任何 BGP邻居,本路由器会接收该BGP 更新,但是接收之后,不会在发送给其他任何 BGP 对等体
-
NO_EXPORT_SUBCONFED:该路由不能发布到本AS之外,也不能发布到联盟中的其他子AS,一般用于存在联盟的环境,如果不存在联盟的环境,效果与No-export类似
-
私有团体属性:
-
私有团体属性是用户自定义的团体值,一般这些团体属性值使用数字来标识因,没有预定义的含义。因此需要网络管理员额外定义具体的动作,以决定如何处理带有这些私有团体属性的路由。
-
团体属性的携带与传递
-
团体属性默认不会携带在 BGP 的路由更新中,需要通过在 BGP 地址家族视图使用 peer x.x.x.x advertise-community来实现在发送 BGP 路由更新时携带团体属性。
-
没有额外的配置情况下默认无团体属性
团体属性与路由标记的区别
-
一个路由条目只能有一个路由标记,一个BGP路由条目可以同时携带多个团体属性;
-
路由标记传递有限制,不能无限制在网络中传播;团体属性可以随BGP更新消息给其他对等体
-
路由标记本身没有特殊含义,需要管理员额外定义相关策略,才能对带有该标记的路由进行控制;团体属性有公认属性
团体属性除了进行路由控制之外还有哪些应用场景
-
在 MPLS VPN 的场景,通过 RT来控制路由的选择和接收
-
在 MPLS VPN 的场景,通过 SOO 来实现环路的避免
-
在 SR的场景,通过团体属性设置 color 值来执行 SR-TE Policy
-
应用场景:
-
在R1上控制,要求R2上路由不能发送给R3
-
R2和R3同个AS的情况
-
R2和R3不同AS的情况
-
-
R2收到R1的更新,但是不能发送给R3的原因
-
BGP路由衰减机制
BGP惩罚机制/BGP阻尼
-
BGP路由衰减过程
-
路由不稳定的主要表现形式是路由振荡,即路由表中的某条路由反复消失和重现。发生路由振荡时,设备就会向邻居发布路由更新,收到更新报文的设备需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU 资源,严重时会影响到网络的正常工作
-
路由衰减用来解决路由不稳定的问题。多数情况下,BGP 协议都应用于复杂的网络环境中,路由变化十分频繁。为了防止持续的路由振荡带来的不利影响BGP 使用路由衰减来抑制不稳定的路由
-
BGP 衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。路由每发生一次振荡,BGP 便会给此路由增加1000惩罚值。如果只是路由的 BGP 属性发生变化,则只会增加500的惩罚值,当惩罚值超过抑制阈值时、此路由被抑制,不加入到路由表中,也不再向其他 BGP 对等体发布更新报文。
-
被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期,当惩罚值降到再使用阈值时,此路由变为可用并被加入到路由表中,同时向其他 BGP 对等体发布更新报文。抑制阈值和半衰期都可以手动配置。
-
路由衰减只适用于 EBGP 路由。对于从IBGP 收来的路由不能进行衰减,因为IBGP 路由经常含有本 AS 的路由,内部网络路由要求转发表尽可能一致,IGP快速收敛就是为了达到信息同步,转发一致。如果衰减对IBGP 路由起作用,不同设备的衰减参数不一致时,会导致转发表不一致;
BGP为什么需要使用loopback接口建立,有哪些场景必须使用loopback建立?
-
在同一个 AS 内,存在多个冗余的互联链路,通过 loopback 建立可以简化配置并且具备高可靠性,同时loopback 比较稳定,不会因为物理链路的变更而影响loopback 接口的状态。
-
在跨域 MPLS VPN Option C的方案中必须采用 loopback 接口;建立EBGP时
-
运营商SCS(软件定义云服务)中通常会使用 Loopback 接口来建立邻居关系,以提高邻居关系的稳定性,确保在网络拓扑变化时,BGP 会话能够持续保持。
使用Loopback口建立BGP的注意事项:
两台路由器建立ebgp对等体,可以通过环回口建立吗,是默认就可以吗,有什么条件
-
确保 Loopback 接口的可达性
-
正确修改BGP更新源
-
不修改更新源,可能导致对端路由器因源地址不一致而拒绝建立或维持邻居关系。
-
-
合理调整EBGP邻居的TTL值
-
默认 EBGP 更新消息的 TTL 值为 1,若经过跳数超过 1,数据包会因 TTL 值为 0 被丢弃,导致邻居关系无法建立。
-
BGP如何判断Router-ID冲突
-
查看设备日志信息
-
检查BGP邻居状态
-
抓包,分析情况
BGP是如何解决RID冲突的
-
BGP 在完成 TCP 连接之后,会发送Open 进行邻居的协商和建立,而 Open 报文中携带 BGP的 RID,如果 Open 报文中的 RID 与本地的一致,则会检测到冲突
-
BGP的 RID 冲突是通过收到的 Open 报文参数进行检查的
BGP路由聚合
-
BGP 支持路由自动聚合和手动聚合
-
自动聚合:按照自然分类对路由进行聚合,只能对从IGP 引入的路由进行自动聚合
-
手动聚合:可自行配置掩码长度来进行精准聚合,可以对任意来源的BGP路由进行聚合
-
AS编号规划的问题
-
AS 编号有 2字节和4字节两种类型。2字节的 AS 编号范围是1-65535; 4字节是1-4294967295
-
AS 0为保留编号,AS23456用于处理2字节和4字节 AS的兼性;AS64496-64511保留,AS64512-65534为私有AS:AS 65535-65551 保留
-
如果使用了 4 字节 AS 编号,在 Open 报文中,会以 AS 23456 来填充本机 AS编号字段(原因是 AS 编号字段最大长度只有2字节,无法填充4字节的编号),然后在 Optional-Paramters 中描述本机真正的4 字节长度 AS 编号
BGP如何形成等价路由
负载均衡
-
BGP 本身并没有路由计算的算法,它只是一个选路的路由协议,因此,不能根据一个明确的度量值决定是否对路由进行负载分担。
-
BGP 默认情况下不会产生等价,由于 13 条选路规则,所以最后一定能选出唯一的一条最优路由
-
在 BGP 上通过命令 balance 可以开启 BGP 支持等价路由并指定支持等价路由的最大数量。开启之后满足如下条件既可以产生等价路由:
-
ORIGIN 属性、LOCAL_PREF 属性、和 MED 属性完全相同。
-
需要对AS_PATH和属性和路由下一跳的 IGP 路由的 Metric 值进行一些修改
-
同为标签路由(具有对应 MPLS 标签值的路由)或同为非标签路由
-
AS_PATH 属性满足如下要求:(命令记不住可以直接答要进行配置修改)
-
只要配置了 balance as-path-neglect 命令,则 AS_PATH 属性可以不同。
-
如果配置了 balance as-path-relax 命令,但未配置 balance as-path-neglect 命令,则 AS_PATH 属性内容不同但长度相同的路由之间能够形成 BGP 负载分担。
-
如果未配置 balance as-path<neglect 和 balance as-path-relax 命令,则要求 AS_PATH 属性也必须相同。
-
-
路由下一跳的 IGP 路由的 Metric 值满足如下要求,
-
若未配置 bestroute igpametric-ignore 命令,则路由下一跳的 IGP 的Metric 值必须相同。
-
配置了 bestroute igp-metric-ignore 命令后,不同路由下一跳的 IGPMetric 值不同也能形成 BGP 负载分担。
-
-
-
BGP的下一跳会对下游造成什么影响
-
BGP 的路由在传递时,如果传递给EBGP邻居,路由的下一跳地址是邻居的IP地址,而如果是传递给IBGP 邻居,下一跳地址默认保持不变,仍保持为上一个EBGP 邻居的IP 地址。
-
所以如果一台既有 EBGP 邻居又有IBGP 邻居的路由器把从 EBGP 邻居学到的路由传递给IBGP邻居时,下一跳仍为EBGP 邻居的IP而这个地址对 IBGP 邻居来说是不可达的,会造成由于下一跳不可达而不学习该路由(下一跳不可达,不加表)
-
可通过对IBGP 邻居配置下一跳变更为本机来解决该问题
-
[R2-bgp-default]address-family ipv4 unicast [R2-bgp-default-ipv4]peer 4.4.4.4 next-hop-local
①还可以用静态路由指向边界设备②可以使用走标签的形式(Option B mpls)③边界用外部引入
-
-
为什么BGP路由器在收到 EBGP 路由更新发送给IBGP 对等体时默认保持下跳不变?
-
主要用于避免 MA 网络场景的次优路径。
-
BGP GR
-
BGP 的平滑重启 GR(GracefulRestart)和不间断路由 NSR(Non-Stop Routing)作为高可靠性的解决方案,其根本目的都是为了保证用户业务在设备故障的时候不受影响或者影响最小。
-
BGP GR 技术保证了在设备重启或者主备倒换过程中转发层面能够继续指导数据的转发,同时控制层面邻居关系的重建以及路由计算等动作不会影响转发层面的功能,从而避免了路由震荡引发的业务中断,提高了整网的可靠性。
-
BGP GR 的过程是:
-
1.利用 BGP 的能力协商机制,GR Restarter 和 GR Helper 了解彼此的 GR 能力,建立有 GR 能力的会话。
-
2.当 GR Helper 检查到 GR Restarter 重启或者主备倒换后,不删除和 GR Restarter 相关的路由和转发表项,也不通知其他邻居,而是等待重建 BGP连接。
-
3.GR Restarter 在 GR Time 超时前与重启前的所有 GR Helper 新建立好邻居关系。
-
OSPF,IS-IS和BGP的路由更新和撤销有什么区别
-
OSPF 和IS-IS 都是链路状态协议,它们的路由更新和撤销都是通过发送链路状态通告(LSA或 LSP)来实现的。不同的是,OSP有多种类型的LSA,而IS-IS只有两种类型的LSP(L1和L2)。OSPF 和IS-IS 的路由更新和撤销的方式如下:
-
OSPF 中,描述拓扑信息的LSA(如Type1和Type 2)通常通过序列号加一的方式来更新或撤销,即发送一条新的LSA,序列号比原来的LSA 大一,并且不再包含撤销的链路信息。描述路由信息的LSA(如Type 3,Type 5和 Type 7)通常通过老化时间为 3600 秒的方式来撤销,即发送一条新的LSA,老化时间为3600 秒,表示这条 LSA已经失效。
-
IS-IS 中,描述拓扑或路由信息的 LSP 都是通过序列号加一的方式来更新或撤销,即发送一条新的 LSP,序列号比原来的 LSP 大一,并且不再包含撤销的路由信息。
-
-
BGP 是路径向量协议,它的路由更新和撤销都是通过发送Update报文来实现的,不同的是,BGP有多种属性来描述路由信息,而且可以使用过滤策略来控制路由的通告或接收;BGP的路由更新和撤销的方式如下:
-
BGP中,路由更新是通过在Update报文中携带NLRI(网络层可达信息)和相关属性(AS_PATH,NEXT_HOP等)来实现的,即发送一个Update报文,包含要通告的目标网络和相关属性
-
BGP中,路由撤销是通过在Update报文中携带Withdrawn Routes字段来实现的,即发送一个Update报文,包含要撤销的目标网络
-
大中型网络中BGP规划有什么注意事项
-
IBGP 对等体过多,采用路由反射器或联盟方式。建议使用路由反射器(RR),并作分级反射
-
BGP 的路由发布,尽量使用聚合后手工注入的方式
-
当路由振荡比较频繁时,建议采用 BGP路由惩罚
-
可以设置团体属性,便于对不同的路由进行分类控制
-
可使用对等体组,来简化管理和配置。
BGP中FAKE-AS的应用场景
路由迁移
-
通过配置 FAKE-AS 功能,为对等体/对等体组指定一个虚拟的自治系统号,可以实现迁移 AS 的时候,不需要修改任何 BGP 相关配置。
-
配置了FAKE-AS后,设备发给对端的OPEN报文中的AS记录是所配置的FAKE-AS号,而非其真实AS号;而且设备发给对端路由中的 ASPATH 属性里面记录的第一个 AS 也是所配置的 FAKE-AS 号,而非其真实 AS 号。
BGP中SoO属性有什么应用场景
-
So0即 site-of-Origin(起源站点)属性,是 BGP 中的一个扩展团体属性扩展团体属性用来标识路由的原始站点
-
路由器不会将带有 SoO 属性的路由发布给该 SoO标识的站点,确保来自某个站点的路由不会再被发布到该站点,从而避免路由环路。
-
在 AS 路径信息丢失时,可以通过 SoO 属性来避免发生环路。
-
为 BGP 对等体/对等体组配置SoO属性后,从该 BGP 对等体/对等体组接收路由时设备会为路由增加SoO、属性,并且向该 BGP 对等体/对等体组发布路由时设备会检查路由的 SoO属性,如果路由中携带的 SoO属性与为对等体/对等体 组配置的 SoO属性相同,则不会将该路由发布给对等体/对等体组,从而避免路由环路;多归属性中的防环
BGP的快速重路由
-
当 BGP 网络中的链路或某台路由器发生故障时,报文将会丢失或产生路由环路,数据流量将会被中断。直到 BGP 根据新的网络拓扑路由收敛后,被中断的流量才能恢复正常的传输。
-
为了尽可能缩短网络故障导致的流量中断时间,可以开启BGP 快速重路由功能。当路由器检测到主路由的下一跳不可达后,BGP 会使用备份下一跳替换失效下一跳,通过备份下一跳来指导报文的转发,从而大大缩短了流量中断时间。
-
在 BGP地址族视图下执行 pic 命令开启当前地址族的 BGP 快速重路由功能。
BGP的Add-Path功能有什么作用
-
缺省情况下、BGP只发布一条最优路由。如果最优路由所在路径出现网络故障数据流量将会被中断,直到 BGP 根据新的网络拓扑路由收敛后,被中断的流量才能恢复正常的传输。
-
配置了 Add-Path(AdditionalPaths)功能后,BGP 可以向邻居发送本地前级相同下一跳不同的多条路由。网络出现故障后,次优路由可以成为新的最优路由这样就缩短了流量中断时间。
-
Add-Path 能力包括接收和发送两种。为了让对等体间的 Add-Path 能力协商成功,必须一端使能接收能力,另一端使能发送能力。
已经建立好的BGP邻居又失效了,有哪些可能的原因
-
除对端发生重启的情况外,已经建立好的邻居又失败一般是由于链路层的问题导致的。
-
MTU 问题。使用扩展的 ping 命令检查是否存在 MTU 问题ping-s可指定ping 包的包长。
-
QoS 问题。检查是否在接口上设置了流量整形或物理接口限速
-
MTU 和 QoS 设置不当可能导致大的 Update 报文被丢弃。由于 TCP 的重传机制,当发送多个大的 Update 报文时,可能产生大量等待重传的 Update 报文从而抑制了 keepalive 报文的正常发送,当连续收不到 keepalive 报文时,BGP认为邻居已经 Down。
-
网络拥塞问题。网络拥塞可能导致 Keepalive 报文收发失常,邻居状态不断改变;另外,如果到达邻居的路由是通过IGP(如 OSPF)发现的,网络拥塞可能导致路由丢失,从而使邻居间的连接中断。
-
BGP路由无法发布有哪些可能原因
-
使用 display bgp peer 命令查看 BGP 邻居是否已经建立。
-
查看路由表中是否存在所需的 IGP路由。
-
BGP 自己无法生成路由,只能由IGP学习路由,然后 BGP再引入。使用network命令引入路由时,在路由表中一定要存在该路由才能够引入。而且 network发布的路由必须与路由表中的路由精确匹配才能发布,即路由的掩码长度要匹配。
-
-
查看 BGP是否配置了路由引入,将IGP路由引入到 BGP 中。
-
查看 BGP是否配置了路由策略将路由过滤掉。
-
IBGP 对等体没有全连接造成路由无法发布。BGP规定从IBGP 对等体收到的路由信息不能向另一个IBGP 对等体发送。
BGP邻居成功建立,但是无法正常接收对端的路由有哪些可能原因
-
检查路由信息中的 AS_PATH 是否包含本路由器的 AS,如果路由信息中AS PATH 中包含本路由器的 AS,则该路由被丢弃。
-
检查路由信息中的 CLUSTER_LIST是否包含本路由器的 CLUSTER_ID,如果是的话,该路由被丢弃。
-
检查路由信息中的 ORIGINATOR_ID 是否包含本路由器的 ORIGINATOR_ID,如果是的话,该路由被丢弃。
-
查看是否是由于路由迭代造成的,例如选代后的下一跳不可达。
-
查看路由表中是否存在其它路由和 BGP路由相同,在路由的优先级中,BGP 的优先级最低,如果有其它路由存在,BGP路由不会生效。
-
查看 BGP的配置,看是否配置了入口路由策略将 BGP 路由信息过滤掉。
BGP路由表中有,但是IGP表中没有,有什么排错的思路嘛?
-
引入不正确
-
检查是否配置了BGP到IGP的引入
-
检查引入策略
-
检查BGP路由的属性
-
下一跳可达性:下一跳地址不可达,IGP也无法学习到该路由
-
IGP可能会根据自身的路由优先级规则选择最优路径,如果引入低,可能会被IGP忽略。
-
-
-
检查是否进行了过滤
-
检查IGP的路由过滤规则(如ACL或前缀列表),确认这些规则是否阻止了引入的BGP路由。
-
-
检查IGP邻居关系
-
确保IGP的邻居关系正常
-
检查IGP邻居的配置,确保邻居之间能够正常交换路由信息。
-
BGP和OSPF的区别
对比项 | BGP(边界网关协议) | OSPF(开放最短路径优先) |
---|---|---|
协议类型 | EGP(外部网关协议),用于 AS 间路由。 | IGP(内部网关协议),用于 AS 内部路由。 |
路由算法 | 路径矢量(Path Vector)协议,基于策略选路。 | 链路状态(Link-State)协议,基于 SPF 算法计算最短路径。 |
路由生成方式 | 不主动计算路由,传递和过滤其他协议(如 OSPF、静态路由)生成的路由。 | 主动发现链路状态,计算并生成路由表。 |
主要作用 | 控制路由的传播(如优选路径、路由聚合、策略过滤)。 | 发现和计算 AS 内部的最优路径。 |
传输协议 | 基于 TCP 179 端口,可靠性高。 | 直接基于 IP 协议(89 号),无传输层保障。 |
状态机 | 邻居状态复杂(Idle、Connect、Active、Established 等)。 | 邻居状态简单(Down、Init、2-Way、Full 等)。 |
选路规则 | 策略优先(如 Local-preference、AS-Path、MED 等)。 | 成本(Cost)优先(基于带宽计算)。 |
邻居建立条件 | 需手动指定邻居,不要求直连(可跨多跳)。 | 自动发现邻居,必须直连(除非配置虚链路)。 |
防环机制 | 通过 AS-Path 属性(记录途经 AS,拒绝重复 AS 的路由)。 | 通过 区域分层设计(Area 0 为骨干)和 SPF 算法防环。 |
收敛速度 | 慢(基于 TCP,依赖定时器)。 | 快(触发更新,平均秒级收敛)。 |
应用场景 | 大型网络(如运营商、互联网核心),需灵活控制路由策略。 | 企业内网、数据中心等 AS 内部网络,追求高效收敛。 |
-
OSPF是属于IGP 协议,BGP是属于EGP协议,OSPF运行在AS内部,BGP运行于 AS 之间。
-
OSPF属于链路状态路由协议,BGP属于路径矢量路由协议
-
OSPF 是基于链路状态计算并产生路由的,而 BGP本身是不会计算路由,而是将其他协议生成的路由进行发布。
-
OSPF 的主要作用是用来发现和计算路由的,而 BGP的主要作用是用来传递以及控制路由的。
-
OSPF 的数据包和 BGP 的数据包不同,基于的协议也不同,其中 OSPF 是基于IGP 协议 89、而 BGP 是基于 TCP 协议 179 的。
-
OSPF 和 BGP 的状态机也不同。
-
OSPF和 BGP的选路规则也不同,BGP 相比 OSPF 有更加灵活的选路规则
-
OSPF 和 BGP 邻居建立需要满足的条件也不同
-
OSPF 和 BGP 的防环机制也不同