• 理解IGP与EGP的区别及工作场景。
• 理解BGP基本概念(AS的概念、协议特征、报文类型、状态机、对等体类型、同步规则、路由黑洞问
题、IBGP水平分割规则、BGP的各种表项等)。
• 理解BGP的基础工作机制。
• 掌握BGP的基础配置
小编这里会分两个方面带你走进BGP的世界
BGP是一种运行在AS与AS之间的动态路由协议,主要作用是在AS之间自动交换无环路由信息
以此来构建AS的拓扑图,从而消除路由环路并实施用户配置的路由策略。目前公网网络条目众多,
IGP协议无法承载,而BGP可以轻松应对,通常BGP协议用于ISP和ISP之间或跨域地域总、分公司之间
的路由信息交换。
• 自治系统(Autonomous System,AS),指的是在同一个组织管理下、使用相同策略的设备的集合。
• 不同AS通过AS号区分,AS号取值范围1-65535,其中64512-65535是私有AS号。IANA负责AS号的分发。
• 中国电信163 AS号:4134。
• 中国电信CN2 AS号:4809。
• 中国网通AS 号:9929。
• 边界网关协议(Border Gateway Protocol,BGP)是一种实现自治系统AS之间的路由可达,并选择最
佳路由的矢量性协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP- 3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(
RFC4271),其他网络使用的版本是MP-BGP(RFC4760)。
• BGP能够承载大批量的路由信息,能够支撑大规模网络。
• BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
• BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性。
• BGP使用TCP作为其传输层协议(端口号为179),并支持BGP与BFD联动、BGP Tracking、BGP
Auto FRR和BGP GR和NSR,提高了网络的可靠性。
• BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。
• 运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。
• 两个建立BGP会话的路由器互为对等体(Peer)。BGP对等体之间交换BGP路由表。
• BGP路由器只发送增量的BGP路由更新,或进行触发更新(不会周期性更新)。
• BGP具有丰富的路径属性和强大的路由策略工具。
• BGP能够承载大批量的路由前缀,用于大规模的网络中。
• BGP通常被称为路径矢量路由协议(Path-Vector Routing Protocol)。
• 每条BGP路由都携带着多种路径属性(Path attribute),在各种路径属性中,AS_Path属性是非常关键
的一个。AS_Path属性记录了BGP路由传递过程中所经过的AS号,实际上它是一个AS号的列表。
• BGP路由器不接受AS_Path中包含其自身AS号的路由更新。AS_Path属性值的长短(AS号的个数)会
作为一个比较的依据,影响BGP路由选择的决策。
Open :协商BGP邻居的各项参数,建立邻居关系。
BGP对等体之间需先建立TCP连接,如果TCP连接成功,那么BGP向对等体发送Open报文。
Update: 用于发送BGP路由信息。
连接建立后,有路由需要发送或路由变化时,发送UPDATE通告对端路由信息。
Notification :报告错误,中止对等体关系。
当BGP在运行中发现错误时,要发送NOTIFICATION报文通告BGP对端。
Keepalive: 维持BGP对等体关系。 定时发送Keepalive报文以保持BGP对等体关系的有效性。
Route-refresh:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文。
当路由策略发生变化时,触发请求对等体重新通告路由。
Idle :尝试建立TCP连接 开始准备TCP的连接并监视远程peer启动TCP连接,启用BGP时,要准备足够的资源。
Connect: 发TCP包,正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态,反复尝试连接
Active :发TCP包 TCP连接没建立成功,反复尝试TCP连接。
OpenSent :发Open包 TCP连接建立已经成功,开始发送Open包,Open包携带参数协商对等体的建立
OpenConfirm :发Keepalive包 参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包。
Established :发Update包已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息。
• 运行BGP的路由器被称为BGP发言者,或者BGP路由器。
• BGP对等体也叫BGP邻居,与OSPF、RIP等协议不同,BGP的会话是基于TCP建立的。建立BGP对等
体关系的两台路由器并不要求必须直连。
• BGP存在两种对等体关系类型:EBGP及IBGP。针对这两种对等体类型,BGP处理路由的操作存在较
大差异。
位于不同自治系统的BGP路由器之间的BGP邻接关系。
• 两台路由器之间要建立EBGP对等体关系,必须满足两个条件:
• 两个路由器所属AS不同(也即AS号不同)。
• 在配置BGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。
位于相同自治系统的BGP路由器之间的BGP邻接关系。
• 两台路由器之间要建立IBGP对等体关系,必须满足两个条件:
• 两个路由器所属AS需相同(也即AS号相同)。 • 在配置BGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。
在传输AS(TransitAS)65102中,BCDE四台路由器运行了OSPF,确保AS内部路由实现互通。 B与E运行BGP,并且两者建立IBGP对等体关系(两者并非直连,但是对于BGP,这是允许的,仅需
确保两者之间能够正确建立TCP连接即可)。C与D并未运行BGP
A将本地路由1.1.1.0/24通告到BGP,最终F能够通过BGP学习到该条路由。C、D由于并未运行BGP,因此无
法通过BGP学习到1.1.1.0/24路由。
如此一来,F发往1.1.1.0/24网络的数据包在到达C/D后将被丢弃,在C及D路由器这里,就出现了黑洞。
• 若路由器从IBGP对等体学习到一条BGP路由,它不能使用该条路由,更不能将路由传递给自己的EBGP
对等体,除非它又从IGP学习到该条路由,这就是BGP的同步规则。
• 同步规则的存在,可以防止数据在传输AS内由于转发设备没有目标网络的路由而被丢弃的问题,也就
是所谓的黑洞问题。
• 为了使得BGP路由能够正常交互,我们就不得不在该传输AS内所有路由器上都运行BGP,且构建全互
联的IBGP对等体关系;或者在AS边界上将BGP路由引入IGP。显然这两种方法各有利弊,尤其是后者,
盲目地将BGP路由引入IGP是非常危险的。
• 同步规则的存在意义是避免出现黑洞问题,而如果AS内路由问题已经解决,那么同步规则也就没有必
要再开启了。华为路由交换产品缺省关闭同步规则
传输AS中的黑洞问题 解决办法1 • 将BGP路由引入到IGP,并关闭同步规则。
传输AS中的黑洞问题 解决办法2 • 传输AS内所有路由器均运行BGP,实现BGP对等体关系的全互联,并关闭同步规则。
你们觉得哪一种方式更好一些?评论区欢迎你
• BGP路由在AS之间的防环依赖于AS_Path路径属性,当路由器收到BGP路由后,发现该路由所携带的
AS_Path属性中出现了其自己所处的AS号,则路由器认为出现了路由环路,它将忽略该条路由。
• AS_Path属性仅在路由离开AS时才会被更改,而BGP路由在AS内部传递时,路由的AS_Path属性值不
会发生改变,如此一来,IBGP路由的防环就无法依赖AS_Path了。
• 为了防止BGP路由在AS内部传递时发生环路,BGP要求:“路由器不能将自己从IBGP对等体学习到的
路由再传递给其他IBGP对等体”,这就是IBGP水平分割规则。
• 由于IBGP水平分割原则的存在,BGP要求AS内须保证IBGP对等体关系的全互联,因为只有这样,才能够确保每一个路由器都能学习到路由。
C从E学习到的IBGP路由,由于水平分割规则的限制,不能够传递给B路由器,这将导致B
无法学习到F通告的BGP路由。
• 考虑到IBGP水平分割规则的限制,为了使得AS内的路由器都能够正常学习到BGP路由,我们不得不建
立一个全互联的IBGP对等体关系(如图所示)。
• 然而在AS内的所有BGP路由器之间维护全互联的IBGP对等体关系是需要耗费大量资源的,网络的可扩
展性、可维护性也非常差。解决方案:
• 路由反射器
• 联邦
• 当存在多条路径时,路由器只选取最优(Best)的BGP路由来使用(没有激活负载均衡的情况下)。
• BGP只把自己使用的路由,也就是自己认为最优的路由传递给对等体。
• 路由器从EBGP对等体获得的路由会传递给它所有的BGP对等体(包括EBGP和IBGP对等体)。
• 路由器从IBGP对等体获得的路由不会传递给它的IBGP对等体(存在反射器RR的情况除外)。
• 路由器从IBGP对等体获得的路由是否通告给它的EBGP对等体要视IGP和BGP同步的情况来决定。
BGP相关的几张表
这里的命令都是华为ensp软件的
BGP邻居表
BGP路由表
• 启动BGP进程,并指定BGP Router-ID:
[Router] bgp as-num
[Router-bgp] router-id x.x.x.x
• As-num参数为设备所处的AS号;
• 为了增加网络的可靠性,建议将BGP Router-ID手工配置为设备Loopback接口的地址。如果没有配
置,则BGP会自动选取系统视图下的Router-ID作为BGP协议的Router-ID。系统视图下的Router-ID
选择规则,请参见命令router-id中的描述。
[Router-bgp] peer x.x.x.x as-number as-num
• Peer关键字后面的x.x.x.x为对等体的IP地址,本设备与该IP地址之间必须路由可达。
• 在BGP中,对等体需要通过peer命令手工指定,无法像IGP那样通过协议自动发现。
• AS号码决定了与对等体建立的是EBGP会话还是IBGP会话。
• (可选)指定用于建立BGP会话(也就是TCP连接)的源接口或源地址:
[Router-bgp] peer x.x.x.x connect-interface intf [ ipv4-src-address ] • 缺省情况下,BGP使用报文出接口的IP地址作为与对等体建立会话的源地址
• 需注意的是:BGP本身不发现路由,因此需要将其他路由引入到BGP路由表。
• BGP引入路由时支持Import和Network两种方式:
• Import方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。Import方式还
可以引入静态路由和直连路由。
• Network方式是逐条将IP路由表中已经存在的路由引入到BGP路由表中。
• BGP在引入IGP的路由时,可以使用路由策略进行路由过滤和路由属性设置。
[router-bgp] network ipv4-address [ mask | mask-length ] • 使用network命令将路由表中的路由通告到BGP。路由必须存在于路由表中才能够被成功通告到
BGP。 • 如果上述命令没有指定mask或mask-length参数,则按有类地址处理。指定了mask,则仅当路由选
择表中有与该网络完全匹配的条目时才被通告出去。 • BGP中的network命令与IGP中的network是大不相同的,BGP中的network命令用于将路由通告到
BGP,而不是在接口上激活BGP。 • 在执行上述命令时,可以关联route-policy从而更为灵活的控制所引入的路由。
模拟大网工作场景,如图所示,电信公司需要将无锡的整个网络注入到省骨干网,此时,需要使用BGP技术,连接市干跟省干;模拟省干内部使用ospf以及内部使用IBGP,将业务层面R5的数据传输到省干网络中
1、配置各路由器接口IP地址以及虚拟环回口的ip地址
2、R1 R2 R5在area0骨干区域运行OSPF
3、将ospf注入到BGP内
4、R1 R2 R5使用IBGP通信,R2 R3用EBGP通信
具体如下:
配置R5的各接口IP地址以及loopback地址
[Huawei]sysname r5
[r5]int g0/0/1
[r5-GigabitEthernet0/0/1]ip add 15.0.0.2 30
[r5-GigabitEthernet0/0/1]un sh
[r5]int LoopBack 0
[r5-LoopBack0]ip add 5.5.5.5 32
[r5]int LoopBack 1
[r5-LoopBack1]ip add 202.0.0.1 24
[r5]int LoopBack 2
[r5-LoopBack2]ip add 202.0.1.1 24
配置R1的各接口IP地址以及loopback地址
[Huawei]sysname r1
[r1]int g0/0/0
[r1-GigabitEthernet0/0/0]ip add 12.0.0.1 30
[r1-GigabitEthernet0/0/0]un sh
[r1]int g0/0/1
[r1-GigabitEthernet0/0/1]ip add 15.0.0.1 30
[r1-GigabitEthernet0/0/1]un sh
[r1]int LoopBack 0
[r1-LoopBack0]ip address 1.1.1.1 32
配置R2的各接口IP地址以及loopback地址
[Huawei]sysname r2
[r2]int g0/0/1
[r2-GigabitEthernet0/0/1]ip add 23.0.0.1 30
[r2-GigabitEthernet0/0/1]un sh
[r2]int g0/0/0
[r2-GigabitEthernet0/0/0]ip add 12.0.0.2 30
[r2-GigabitEthernet0/0/0]un sh
[r2]int LoopBack 0
[r2-LoopBack0]ip add 2.2.2.2 32
配置R1的各接口IP地址以及loopback地址
[Huawei]sys
[Huawei]sysname r3
[r3]int g0/0/1
[r3-GigabitEthernet0/0/1]ip add 23.0.0.2 30
[r3-GigabitEthernet0/0/1]un sh
[r3]int LoopBack 0
[r3-LoopBack0]ip add 3.3.3.3 32
配置R1 R2 R5的ospf
这里202.0.0.1和202.0.1.1网段是业务层网段
[r5]ospf 1 router-id 5.5.5.5
[r5-ospf-1]area 0
[r5-ospf-1-area-0.0.0.0]network 5.5.5.5 0.0.0.0
[r5-ospf-1-area-0.0.0.0]network 202.0.0.0 0.0.0.255
[r5-ospf-1-area-0.0.0.0]network 202.0.1.0 0.0.0.255
[r5-ospf-1-area-0.0.0.0]network 15.0.0.0 0.0.0.3
[r2]ospf 1 router-id 2.2.2.2
[r2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[r2-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.3
[r1]ospf 1 router-id 1.1.1.1
[r1-ospf-1]area 0
[r1-ospf-1-area-0.0.0.0]network 15.0.0.0 0.0.0.3
[r1-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0
[r1-ospf-1-area-0.0.0.0]network 15.0.0.0 0.0.0.3
配置各路由的BGP
[r1]router id 1.1.1.1 -------这里是在接口模式下配置
[r1-bgp]peer 2.2.2.2 as-number 100--------与2.2.2.2建立邻居关系
[r1-bgp]peer 2.2.2.2 connect-interface LoopBack 0--------用自己的loopback 0 接口与2.2.2建立关系
[r1-bgp]peer 5.5.5.5 as-number 100
[r1-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r2]router id 2.2.2.2
[r2]bgp 100
[r2-bgp]peer 1.1.1.1 as-number 100
[r2-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[r2-bgp]peer 5.5.5.5 as-number 100
[r2-bgp]peer 5.5.5.5 connect-interface LoopBack 0
----与自己的EBGP之间的跳数,这里我是直接用接口与对方接口建立的关系,实际生产环境一般是要用自己的loo接口与对方的loo接口建立,如果是这样,跳数就必须是2(直连),也就是说,你要先到达对方的逻辑接口后再进入到虚拟接口,这就是两跳!!!
[r5]router id 5.5.5.5
[r5]bgp 100
[r5-bgp]peer 1.1.1.1 as-number 100
[r5-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[r5-bgp]peer 2.2.2.2 as-number 100
[r5-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[r5-bgp]import-route direct------- R5引入直连是为了将自己的loo1 和loo2通过r1转发给r2
R2和R3建立EBGP关系
[r3]router id 3.3.3.3
[r3]bgp 200
[r3-bgp]peer 23.0.0.1 as-number 100----这里的number不要弄混了,写对方的AS号
[r3-bgp]peer 23.0.0.1 ebgp-max-hop 1
[r2-bgp]peer 23.0.0.2 as-number 200 ------ 与R3建立EBGP关系
[r2-bgp]peer 23.0.0.2 connect-interface g/0/1----用自己的g/0/1接口与对方建立关系
[r2-bgp]import-route ospf 1 -------- 将 BGP引入到ospf内
[r2-bgp]peer 23.0.0.2 ebgp-max-hop 1
此时查看R3的路由表,202网段的都已经学习到了
BGP选路原则
(1)若去往目的网络的路由下一-跳不可达,则可以忽略此路由
(2) Preferred-Value优先级以数值高的路由优先
(3) Local-Preference优先级以数值高的路由优先
(4)聚合路由优先级高于非聚合路由
(5)本地手动聚合路由的优先级高于本地自动聚合的路由
(6)本地通过Network命令引入的路由的优先级高于本地通过lmport-route命令引入的路由
(7) AS路径长度最短(最少个数)的路径优先级高
(8)比较Origin属性,IGP优先级高于EGP, EGP优先级高于Incomplete
(9)选择MED优先级较小的路由
(10) EBGP路由优先级高于IBGP路由
(11) BGP优先选择到BGP下- -跳的IGP度量低的路径
当以上全部相同,则为等价路由,可以负载分担(注: AS-PATH必须-致),当负载分担时, 以下3条原则无效
(12)比较Cluster-List长度, 短者优先 路由反射器 越短越优秀
(13)比较Originator_ ID(如果没有Originator_ ID,则用Router ID比较),选择数值较小的路径 越小越优
(14)比较对等体的IP地址,选择IP地址数值最小的路径
对as_pash路径更改 从而更改路由路径
• 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路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。
团体属性分为自定义团体属性和公认团体属性。公认团体属性如表所示。
表 公认团体属性
node10 就是当前策略
node20 是允许其他策略通过
reset bgp all 清理bgp进程
tracert -a 4.4.4.4 1.1.1.1 追踪数据包