BGP双栈原理Basic
BGP双栈原理Basic
BGP是一种用于自治系统(Autonomous System)之间的动态路由协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),主要用于交换AS之间的可达路由信息,构建AS域间的传播路径,防止路由环路的产生,并在AS级别应用一些路由策略。当前使用的版本是BGP-4(RFC4271)。
BGP作为事实上的Internet外部路由协议标准,被广泛应用于ISP之间。
BGP概述
BGP是一种外部网关协议(EGP),与OSPF、RIP等内部网关协议(IGP)不同,其着眼点不在于自动发现网络拓扑,而在于在AS之间选择最佳路由和控制路由的传播。
BGP使用TCP作为其传输层协议(监听端口号为179),提高了协议的可靠性,且不需要专门的机制来确保连接的可控性。
BGP进行域间的路由选择,对协议的稳定性要求非常高。因此用TCP协议的高可靠性来保证BGP协议的稳定性。
BGP的对等体之间必须在逻辑上连通,并进行TCP连接。目的端口号为179,本地端口号任意。
路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息。
BGP从设计上避免了环路的发生。
AS之间:BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃,从而避免了域间产生环路。
AS内部:BGP在AS内学到的路由不再通告给AS内的BGP邻居,避免了AS内产生环路。
BGP提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
BGP提供了防止路由振荡的机制,有效提高了Internet网络的稳定性。
BGP易于扩展,能够适应网络新的发展。主要是通过TLV进行扩展。
BGP概述
外部网关协议
使用TCP作为其传输层协议
支持CIDR
增量更新
路径矢量路由协议
无环路
路由策略丰富
可防止路由振荡
易于扩展
BGP工作原理—报文类型
Open报文
协商BGP参数
Update报文
交换路由信息
Keepalive报文
保持邻居关系
Notification报文
差错通知
Route-Refresh报文
用于在改变路由策略后请求对等体重新发送路由信息
BGP的运行是通过消息驱动的,共有Open、Update、Notification、Keepalive和Route-Refresh等5种消息类型。
Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。
Update消息:用于在对等体之间交换路由信息。一条Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
一条Update消息可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update消息里的路由属性适用于该Update消息中的NLRI(Network Layer Reachability Information)字段里的所有目的地(用IP前缀表示)。
一条Update消息可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚的定义了BGP Speaker之间先前通告过的路由。
一条Update消息可以只用于撤销路由,这样就不需要包括路径属性或者NLRI。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。
Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性。
Notification消息:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。
Route-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。在所有BGP路由器使能Route-Refresh能力的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-Refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。
BGP报文应用:
BGP使用TCP建立连接,本地监听端口为179。和TCP连接建立相同,BGP连接的建立也要经过一系列的对话和握手。TCP通过握手协商通告其端口等参数,BGP的握手协商的参数有:BGP版本、BGP连接保持时间、本地的路由器标识(Router ID)、授权信息等。这些信息都在Open消息中携带。
BGP连接建立后,如果有路由需要发送则发送Update消息通告对端。Update消息发布路由时,还要携带此路由的路由属性,用以帮助对端BGP协议选择最优路由。在本地BGP路由变化时,要通过Update消息来通知BGP对等体。
经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定状态。此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。对于本地BGP,如果在保持时间内,未收到任何对端发来的BGP消息,就认为此BGP连接已经中断,将断开此BGP连接,并删除所有从该对等体学来的BGP路由。
当本地BGP在运行中发现错误时(如对端BGP版本本地不支持、本地BGP收到了结构非法的Update消息等),要发送Notification消息通告BGP对等体。本地BGP退出BGP连接时,也需发送Notification报文。
BGP报头:
Marker(标记):16字节,固定为1。
Length(长度):两字节无符号整数。指定了消息的全长,包括头部。
Type(类型):1 字节,指示报文类型:
Open
Update
Keepalive
Notification
Route-Refresh
Open报文结构:
Version:BGP的版本号。对于BGPv4来说,其值为4。
My Autonomous System:本地AS编号。通过比较两端的AS编号可以确定是EBGP连接还是IBGP连接。
Hold Time:在建立对等体关系时两端要协商Hold time,并保持一致。如果两端所配置的Hold time时间不同,则BGP会选择较小的值作为协商的结果。如果在这个时间内未收到对端发来的Keepalive消息,则认为BGP连接中断。如果保持时间为0,则标识不发送Keepalive报文。
BGP Identifier:BGP路由器的Router ID,以IP地址的形式表示,用来识别BGP路由器。
Opt Parm Len(Optional Parameters Length):可选参数的长度。如果为0则没有可选参数。
Optional Parameters:是一个可选参数用于BGP验证或多协议扩展(Multiprotocol Extensions)等功能。每一个参数为一个(Parameter Type-Parameter Length-Parameter Value)三元组。
Update报文结构:
Withdrawn Routes Length :(2字节无符号整数) 不可达路由长度,表示Withdrawn Routes字段的数据长度。如果Withdrawn Routes Length字段数值为0,则表示Withdrawn Routes字段没有任何数据,在UPDATE消息中不会被显示。
Withdrawn Routes :(变长) 撤销路由。该字段包括一系列的IP地址前缀信息,以<length, prefix>的格式来表示,比如<19,198.18.160.0>表示一个198.18.160.0 255.255.224.0的网络。
Path Attribute Length :(2字节无符号整数) 路由属性长度,表示Path Attribute字段的数据长度。如果Path Attribute Length数值为0,则表示Path Attribute字段没有任何数据,在UPDATE消息中不会被显示。
Network Layer Reachability Information :(变长) 网络可达信息。包括一系列的IP地址前缀。格式与撤消路由字段一样<length, prefix>。
Keepalive报文结构:
KeepAlive 报文的组成只包括一个BGP数据报头。
缺省情况下,发送KeepAlive 的时间间隔为 60 秒,Hold Time是180秒。每次从邻居处接收到KeepAlive 报文将重置Hold Time定时器,如果Hold Time定时器超时,就认为对等体Down掉。
Notification报文结构:
Errorcode:错误码。1字节长的字段。每个不同的错误都使用唯一的代码表示,而每一个错误码都可以拥有一个或多个错误子码,但如果某些错误码并不存在错误子码的话,则该错误子码字段以全0表示。
Errsubcode:错误子码。
BGP工作原理—状态机
BGP有限状态机共有六种状态,分别是Idle、Connect、Active、OpenSent、OpenConfirm和Established。
Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
任何状态中收到Notification报文或TCP拆除链路通知等Error事件后,BGP都会转至Idle状态。
在Connect状态下,BGP启动连接重传定时器(Connect Retry,缺省为32秒),等待TCP完成连接。
此阶段主动发起TCP连接;
如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态;
如果TCP连接失败,那么BGP转至Active状态;
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
如果发生其他事件(由系统或者操作人员启动的),则退回到Idle状态。
在Active状态下,BGP总是在试图建立TCP连接。
此阶段等待对方发起TCP连接;
如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态;
如果TCP连接失败,那么BGP停留在Active状态;
如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态;
如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
在OpenConfirm状态下,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
在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工作原理—数据库
IP路由表 (IP-RIB)
全局路由信息库,包括所有IP路由信息
BGP路由表 (Loc-RIB)
BGP路由信息库,包括本地BGP Speaker选择的路由信息
邻居表
对等体邻居清单列表
Adj-RIB-In
对等体宣告给本地BGP Speaker的未处理的路由信息库
Adj-RIB-Out
本地BGP Speaker宣告给指定对等体的路由信息库
BGP工作原理—BGP路由信息处理
BGP路由信息处理:
当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(Routing Information Base, RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径。
得出的最佳路径被存储到本地BGP RIB (Loc-RIB)中,然后被提交给本地IP路由选择表(IP-RIB),以用作安装考虑。
除了从对等体接收来的最佳路径外,Loc-RIB也会包含当前路由器注入的(被称为本地发起的路由),并被选择为最佳路径的BGP前缀。Loc-RIB中的内容在被通告给其他对等体之前,必须通过输出策略引擎。只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB (Adj-RIB-Out)中。
BGP工作原理—对等体之间的交互原则
BGP对等体交互路由原则:
从IBGP对等体获得的路由,只发布给EBGP对等体
从EBGP对等体获得的路由,发布给所有EBGP和IBGP对等体
只将BGP的最优路由发布给对等体
只发送更新的BGP路由
IBGP与IGP的同步
BGP设备将最优路由加入BGP路由表,形成BGP路由。
从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体
从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体
当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
路由更新时,BGP设备只发送更新的BGP路由
从IBGP邻居学到的路由,只有当IGP中也存在相同的路由时才会宣告给EBGP对等体
BGP工作原理—IBGP与IGP同步
同步(Synchronization)
同步是指IBGP和IGP之间的同步,其目的是避免误导外部AS的路由器。
在IBGP路由加入路由表并发布给EBGP对等体之前,会先检查IGP路由表。只有在IGP也知道这条IBGP路由时,它才会被加入到路由表,并发布给EBGP对等体。
注意事项:
VRP平台缺省情况下BGP与IGP是取消同步机制的,并不可改变。但取消同步是有条件的,在以下两种情况下可以取消同步:
本AS不是过渡AS。
本AS内所有路由器建立IBGP全连接。
BGP属性特点—概述
BGP路由属性是一套参数,它是对路由的进一步的描述
公认必遵
所有BGP路由器都必须识别,且必须存在于Update消息中
如果缺少这种属性,路由信息就会出错
公认任意
所有BGP路由器都可以识别,但不要求必须存在于Update消息中
即就算缺少这类属性,路由信息也不会出错
可选过渡
在BGP对等体之间具有可传递性的属性
BGP路由器可以不支持此属性,但它仍然会接收这类属性,并传递给其他对等体
可选非过渡
如果BGP路由器不支持此属性,则相应的这类属性会被忽略,且不会传递给其他对等体
常用的属性类别如下所示:
Origin为公认必遵属性 AS_Path为公认必遵属性
Next_Hop为公认必遵属性
Local_Pref为公认任意属性 community为可选过渡属性
MED为可选非过渡属性 Originator_ID为可选非过渡属性
Cluster_List为可选非过渡属性
BGP属性特点—Origin
Origin属性用来定义路径信息的来源,该属性为公认必遵
IGP
通过路由始发AS的IGP得到的路由信息,如通过network命令注入BGP的路由
标识符为“i”
EGP
通过EGP得到的路由信息
标识符为“e”
Incomplete
通过其他方式学习到的路由信息,如通过import-route命令注入BGP的路由
标识符为“?”
Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:
IGP:具有最高的优先级。通过路由始发AS的IGP得到的路由信息,比如通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。
BGP属性特点—PrefVal
协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效,不会传递给BGP邻居。因为协议首选值是人为主动设置的,代表本地用户的意愿,因而在BGP进行选路时会优先比较协议首选值。
在BGP进行选路时会优先比较协议首选值。默认情况下均为0,该值越大越优先。
BGP属性特点—AS_Path
AS_Path属性按矢量顺序记录某条路由从本地到目的地址所要经过的所有AS编号。该属性为公认必遵。
AS_Path属性可以当做BGP选路的参考属性之一,AS_Path长度越短越优先。此外,当BGP路由器从EBGP对等体接收路由时,如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
当BGP Speaker本地通告一条路由时:
当BGP Speaker将这条路由通告到其他AS时,便会将本地AS号添加在AS_Path列表中,并通过Update消息通告给邻居路由器。
当BGP Speaker将这条路由通告到本地AS时,便会在Update消息中创建一个空的AS_Path列表。
当BGP Speaker传播从其他BGP Speaker的Update消息中学习到的路由时:
当BGP Speaker将这条路由通告到其他AS时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP路由器根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
当BGP Speaker将这条路由通告到本地AS时,不会改变这条路由相关的AS_Path属性。
BGP属性特点—Next_Hop
Next_Hop属性记录了路由的下一跳信息,该属性为公认必遵
Next_Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:
BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。
BGP属性特点—Local_Pref
Local_Pref属性表明BGP路由器的优先级,该值越大越优先。该属性为公认任意。
Local_Pref属性
该属性仅在IBGP对等体之间有效,不通告给其他AS。它表明路由器的BGP优先级。
当BGP路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由,缺省情况下该值为100。
BGP属性特点—MED
MED属性类似于IGP的代价值,用于AS间的路由选路。该属性为可选非过渡
当一个运行BGP的设备通过不同的EBGP对等体(EBGP对等体需属于同一AS)得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED 值较小者作为最佳路由。
MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。
BGP路由计算——选路规则
当到达同一目的地存在多条路由时,BGP依照如下策略顺序进行路由选择:
1、如果此路由的下一跳不可达,忽略此路由
2、优选协议首选值(PrefVal)最高的路由
3、优选本地优先级(Local_Pref)最高的路由
4、优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由
5、优选AS路径(AS_Path)最短的路由
6、比较Origin属性,依次优选Origin类型为IGP、EGP、Incomplete的路由
7、优选MED值最低的路由
8、优选从EBGP邻居学来的路由(EBGP路由优先级高于IBGP路由)
9、优选到下一跳IGP Metric较小的路由
10、优选Cluster_List最短的路由
11、优选Router ID最小的路由器发布的路由
12、比较对等体的IP Address,优选从具有较小IP Address的对等体学来的路由
BGP路径选择:
下一跳地址必须可达。
协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效。
如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。通过执行default local-preference命令可以修改BGP路由的缺省本地优先级。
本地生成的路由包括通过network命令或import-route命令引入的路由、手动聚合路由和自动聚合路由。
优选聚合路由(聚合路由优先级高于非聚合路由)。
通过aggregate命令生成的手动聚合路由的优先级高于通过summary automatic命令生成的自动聚合路由。
通过network命令引入的路由的优先级高于通过import-route命令引入的路由。
优选AS路径(AS_Path)最短的路由。
AS_Path的长度不包括AS_CONFED_SEQUENCE和AS_CONFED_SET。
AS_SET的长度为1,无论AS_SET中包括多少AS号。
执行bestroute as-path-ignore命令后,BGP选路时,忽略AS_Path的比较。
优选MED值最低的路由。
BGP只比较来自同一个AS(不包括联盟的子AS)的路由的MED值。即,只有两条路由的AS_SEQUENCE(不包括AS_CONFED_SEQUENCE)属性的第一个AS号相同时,BGP才会比较二者的MED值。
如果路由没有MED属性,BGP选路时将该路由的MED值按缺省值0来处理;执行bestroute med-none-as-maximum命令后,BGP选路时将该路由的MED值按最大值4294967295来处理。
执行compare-different-as-med命令后,BGP将强制比较来自不同自治系统中的邻居的路由的MED值。除非能够确认不同的自治系统采用了同样的IGP和路由选择方式,否则不要使用compare-different-as-med命令(可能产生环路)。
执行bestroute med-confederation命令后,只有当AS_Path中不包含外部AS号(不属于联盟的子AS),且AS_CONFED_SEQUENCE的第一个AS号相同时,才能比较MED值的大小。
执行deterministic-med命令后,将消除路由接收顺序对选路结果的影响。
负载分担
当到达同一目的地址存在多条等价路由时,可以通过BGP等价负载分担实现均衡流量的目的。
形成BGP等价负载分担的条件是:BGP选路规则中“到下一跳的IGP metric”这条规则之前所有需要比较的属性完全相同。
BGP 4+ 概述
BGP 4 的扩展版本
扩展能力自协商机制
支持传递多种地址族地址(IPv6、VPNv4、VPNv6等)
新增属性用以支持多地址族地址传递
BGP 4+ 扩展能力协商
当两台BGP对等体之间需要传输IPv6地址族的地址时,需要在OPEN Message 中进行扩展能力的协商
OPEN消息中的Capabilities Advertisement字段用于扩展能力的协商。
除了多地址族的能力协商外,还有4字节AS号能力、Route-Refresh支持能力、多层标签能力等能力都会在该字段列出来进行协商。
BGP 4 +扩展属性—MP_REACH_NLRI
MP_REACH_NLRI属性(Type Code=14)
BGP4+使用此属性来通告IPv6 路由。
地址族信息(Address Family Information)域:由2字节的地址族标识AFI(Address Family Identifier)和1字节的子地址族标识SAFI(Subsequent Address Family Identifier)组成。
下一跳长度(Length of Next Hop Network Address)域:1字节长度,表示下一跳地址的长度,通常情况下为16
下一跳地址(Network Address of Next Hop)域:长度由上一个字段决定,一般情况下为全球单播地址。
保留字段(Reserved)域:一字节,必须为0
网络层可达信息(Network Layer Reachability Information)域:表示含有匹配相同属性的路由信息。当此字段为0时,表示为缺省路由。
当传递IPv6路由时:
AFI=2 ,SAFI=1(Unicast) ,SAFI=2(Multicast)
下一跳地址长度字段决定了下一跳地址的个数
长度字段=16,下一跳地址为下一跳路由器的全球单播地址
长度字段=32,下一跳地址为下一跳路由器的全球单播地址和链路本地地址
保留字段,恒等于0
NLRI字段,可变长字段,表示路由前缀和掩码信息。
BGP 4 +扩展属性—MP_UNREACH_NLRI
MP_UNREACH_NLRI属性(Type Code= 15 )
BGP 4+用该属性撤销路由
地址族信息(Address Family Information)域:由2字节的地址族标识AFI(Address Family Identifier)和1字节的子地址族标识SAFI(Subsequent Address Family Identifier)组成。
撤销路由(Withdrawn Routes)域:表示撤销的路由条目。格式为<掩码长度,路由前缀> ,当此掩码长度为0时,表示为缺省路由。
当撤销IPv6路由时
AFI=2 ,SAFI=1(Unicast) ,SAFI=2(Multicast)
Withdrawn Routes 字段代表需要撤回的路由前缀及掩码。
配置BGP基本功能:
地址分配规则:
Rx和Ry(X<Y)直连接口的IPv4网段为:10.0.xy.0/24. Rx相应接口的地址为10.0.xy.x ,Ry为10.0.xy.y
Rx和Ry(X<Y)直连接口的IPv6网段为:2000::xy00/120. Rx相应接口的地址为2000::xy0x ,Ry为2000::xy0y
各路由器的LoopBack 0 接口的地址已给出,各LoopBack 0接口的IPv6地址为2000::z(z为相应路由器的编号)
提示:
AS内可运行OSPF,ISIS等协议来实现互通
稳定的IBGP关系可通过loopback接口来建立
EBGP邻居关系直接用物理接口建立即可
命令含义
peer as-number命令用来配置指定对等体(组)的对端AS号。
peer connect-interface命令用来指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。
peer next-hop-local命令用来设置向IBGP对等体(组)通告路由时,把下一跳属性设为自身的IP地址。
参数意义:
peer ipv4-address as-number as-number
ip-address:对等体的IPv4地址。
as-number:对等体的对端AS号。
peer ipv4-address connect-interface interface-type interface-number [ ipv4-source-address ]
ip-address:对等体的IPv4地址。
interface-type interface-number:接口类型和接口号。
ipv4-source-address:建立连接时的IPv4源地址。
peer ipv4-address next-hop-local
ip-address:对等体的IPv4地址。
注意事项:
在使用Loopback接口作为BGP报文的源接口时,必须注意以下事项:
确认BGP对等体的Loopback接口的地址是可达的。
如果是EBGP连接,还要配置peer ebgp-max-hop命令,允许EBGP通过非直连方式建立邻居关系。
peer next-hop-local和peer next-hop-invariable是两条互斥命令。
display bgp peer中的PrefRcv表示本端从对等体上收到路由前缀的数目。
IPv6的配置与IPv4基本一致,但是在指定完peer地址和as-number之后,需手工进入ipv6-family unicast视图,执行peer peer-ip-address enable 命令来激活。
配置BGP– PrefVal属性
命令含义
peer route-policy命令用来对来自对等体(组)的路由或向对等体(组)发布的路由指定Route-Policy,对接收或发布的路由进行控制。
apply preferred-value preferred-value 命令用来在路由策略中配置改变BGP路由的首选值的动作。
具体用法:
peer route-policy命令为BGP视图命令
参数意义
peer ipv4-address route-policy route-policy-name { import | export }
ipv4-address:对等体的IPv4地址。
route-policy-name:Route-Policy的名称。
import:对从对等体(组)来的路由应用Route-Policy。
export:对向对等体(组)发布的路由应用Route-Policy。
preferred-value:指定BGP的首选值。在选择路由时,协议优选首选值最高的BGP路由。整数形式,取值范围0~65535,默认为0
实验现象:
我们使用display bgp routing-table和display bgp ipv6 routing-table命令查看BGP路由表。
注意事项:
Preferred-value是BGP协议的私有属性,该命令只对BGP路由生效。Preferred-value是BGP选路规则中的weight值,不是RFC规定的标准属性,所以该命令仅在本地生效,在BGP的出口策略中不生效。
配置BGP–Local_Pref属性
命令含义:
apply local-preference preference 配置路由的本地优先级
参数含义:
Preference 指定的BGP路由的本地优先级,整数形式,取值范围是0~4294967295,默认情况下为100
注意事项:
策略生效后,将影响BGP路由选路。
本地优先级仅用于同一个AS域内的选路,不向域外发布这个属性,所以用于配置EBGP邻居的export方向的策略时,apply local-preference命令的设置不生效。
配置BGP– MED属性:
保留上一步local-preference的配置,其他不变。
需要解决上一步出现的来回路径不一致的问题,可通过R2宣告更高MED属性的路由,使得R5选择R3宣告的路由。
命令含义
apply cost [ + | - ] cost命 令用来在路由策略中配置改变路由的开销值的动作。
参数含义:
+ :表示增加开销值。
- : 表示减少开销值。
cost :指定路由的开销值。对路由的选路进行控制,需要将路由的开销设置为固定值时,可以通过调整开销值避免路由环路的产生。
注意事项:
在缺省情况下,BGP只比较来自同一AS的路由的MED值。这里的AS不包括联盟的子AS。为了使BGP在联盟内选择最优路由时能够比较MED值,可以配置bestroute med-confederation命令。
配置bestroute med-confederation命令后,只有当AS_Path中不包含外部自治系统(不在联盟内的自治系统)号时才比较MED值的大小。如果AS_Path中包含外部自治系统号,则不进行比较。
例如:自治系统65000、65001、65002和65004属于同一联盟。四条到达同一目的地址的待选路由如下所示:
path1:AS_Path=65000 65004,med=2
path2:AS_Path=65001 65004,med=3
path3:AS_Path=65002 65004,med=4
path4:AS_Path=65003 65004,med=1
在配置bestroute med-confederation命令后,因为path1、path2和path3的AS_Path中不包含同一联盟外的自治系统,所以当BGP需要通过比较MED值来选择路由时,将只比较path1、path2和path3的MED值。而path4的AS_Path中包含同一联盟外的自治系统,因此不比较path4的MED值。
配置BGP– BGP AS_Path属性1:
命令含义
apply as-path { { as-number-plain | as-number-dot } &<1-10> { additive } | none overwrite }
参数含义
as-number-plain:指定要替换或增加的整数形式的AS号。在同一个命令行中最多可以同时指定10个AS号。
as-number-dot :指定要替换或增加的点分形式的AS号。在同一个命令行中最多可以同时指定10个AS号。
additive :在原有的AS_Path列表中追加指定的AS号。
overwrite :用指定的AS号覆盖原有的AS_Path列表。
None :清空原来的AS_Path列表。
注意事项:
策略生效后,将会影响BGP路由选路。
配置该命令会直接影响网络流量所经过的途径,另外也可能造成环路和选路错误,请谨慎使用该命令。
配置BGP– BGP AS_Path属性2:
命令含义:
if-match as-path-filter { as-path-filter-number &<1-16> | as-path-filter-name }
参数含义:
as-path-filter-number :指定AS路径过滤器号。在一个命令行中可以配置多个此参数,但最大不能超过16。 整数形式,取值范围1~256。
as-path-filter-name指定AS路径过滤器名称。字符串形式,区分大小写,不支持空格,长度范围是1~51,且不能都是数字。
注意事项:
在一个命令行中可以配置多个AS-Path-filter值,但最多不能超过16个。它们之间是“或”的关系,即通过其中某一个AS路径过滤器的过滤就可以通过该命令的过滤。
配置BGP– BGP AS_Path属性2之as-path-filter:
AS路径过滤器(AS_Path-Filter)
AS路径过滤器是一组针对BGP路由的AS_Path属性进行过滤的规则
AS路径过滤器的默认行为是deny,即路由如果没有在某一次过滤中被permit则最终不能通过该过滤器的过滤。
AS路径过滤器的匹配条件使用正则表达式指定
举例:① ^10_ 匹配AS_Path属性以AS10开头的路由
② _20_ 匹配AS_Path属性中包含AS20的路由
③.* 匹配所有AS_Path属性
命令含义:
ip as-path-filter { as-path-filter-number | as-path-filter-name } { deny | permit } regular-expression命令用来创建AS路径过滤器。
参数含义:
as-path-filter-number 指定的AS路径过滤器号。 整数形式,取值范围1~256。
as-path-filter-name 指定的AS路径过滤器名称。 字符串形式,区分大小写,不支持空格,长度范围是1~51,且不能都是数字。当输入的字符串两端使用双引号时,可在字符串中输入空格。
deny 指定AS路径过滤器的匹配模式为拒绝。
permit 指定AS路径过滤器的匹配模式为允许。
配置BGP– BGP AS_Path属性2之正则表达式
BGP故障排除流程:
由于本章主讲BGP,假设网络中非BGP部分没有问题
BGP邻居状态无法到达Established状态:
1、IGP不通
2、ACL过滤了TCP的179端口
3、邻居的Router ID冲突
4、配置的邻居的AS号错误
5、用Loopback口建立邻居时没有配置peer connect-interface
6、用建立EBGP邻居时未配置peer ebgp-max-hop
7、peer valid-ttl-hops配置错误。
8、对端发送的路由数量是否超过peer route-limit命令设定的值。
9、对端配置了peer ignore
10、两端的地址族不匹配
BGP邻居关系正常的情况下,但是BGP路由表没有该表项
1、下一跳地址是否可达
2、入口是否进行了策略限制
3、接收前缀的条目是否进行了限制
4、对端出口是否进行了策略限制
5、该前缀在对端BGP路由表中是否最优
6、对端是否配置了active-route-advertise
BGP邻居关系正常的情况下,BGP路由表存在某些表项不是最优
1、根据选路原则,某些表项不是最优
2、某些前缀是否为抑制状态
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!