一、BGP起源
网络不断扩大,为了方便管理网络被分为了很多不同的AS(Autonomous System -自治系统)
。为了方便不同AS之间可以动态的交互路由信息,经过不断发展产生了我们敬畏的BGP(Border Gateway Protocol,边界网关协议)
,BGP是一种另外的网关协议,可以做到路由优选、避免路由环路、更高效率传递路由和维护大量的路由信息。
二、BGG基本概念与注意事项
基本概念
- **AS:**指的是在同一个组织管理下,使用统一选路策略的设备集合。
- **对等体 **就是邻居的意思。
- 矢量性协议(Path-Vector Routing Protocol):“道听途说”,只是知道有哪条路通往目的地,但是自己也是听别人(别的设备)说的,并没有真正的自己去过,与ospf、isis自己掌握整体拓扑信息并自己计算形成对比。
- **EBGP(External BGP):**不同自治系统的BGP路由器之间的BGP对等体关系。要求路由器所属AS号不一样,并且要求对等体可达并且能够正确建立TCP邻居关系。
- **IBGP(Internal BGP):**位于相同自治系统的BGP路由器之间的BGP邻接关系。
注意事项
- BGP使用TCP为传输层协议,TCP端口号179,路由器之间的BGP会话基于TCP连接而建立。
- BGP路由器路由更新采用增量更新或者触发式更新,可减轻设备负担。
- 建立IBGP对等体建议用Loopback接口,因为BGP基于IGP,所以可以借助IGP的冗余提高可靠性
- BGP通过network、import-route、aggregate聚合方式生成BGP路由后,通过Update报文将BGP路由传递给对等体。
- 建立EBGP对等体建议用直连接口的IP地址,但是要注意将EBGP默认只有一跳,只能跳出去,无法跳回来,所以要修改最大跳值【peer ipv4-address ebgp**-max-hop** [ hop-count ]】(最大255,2~255看需求随意)。EBGP间有多条链路建议使用环回口地址。
- BGP不能自己发现、计算路由条目,其路由条目由IGP协议路由表中的路由发布得到。不能自动生成路由,但是咱可以宣告咱们已经有的路由(源于IGP)。
- 在AS之间使用BGP路由协议进行路由的传递。
- BGP可以通过这些路径属性控制路径选择,而不像IS-IS、OSPF只能通过Cost控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最合适的路径控制方式,也可说是矢量路由协议的好处吧。
三、BGP原理概述
BGP基于TCP
(华为三次握手比较安全),只要能够建立TCP连接即可建立BGP,而要想建立TCP连接就必须有对方的路由
,所以我们要想建立BGP就要事先先把各设备通过IGP协议进行连接,也可以理解为BGP就是基于IGP的四层协议(其实是三层协议)
。通过IGP把各设备邻居关系建立起来后我们就可以在此基础上配置BGP邻居关系,不同系统间用EBGP,同系统间用IEGP
—(个人理解和一个个的BFD很像),然后在BFD模式下通过宣告、引入、聚合IGP路由条目
的方式发布路由,而我们就需要在考虑路由通告原则
的基础上随心所欲的让指定目标学习到这些路由,这也就达到了我们BGP传输路由(大量)的目的。
四、BGP路由条目的来源 - 宣告、引入、聚合
BGP自身不会产生路由(IGP可以),BGP主要功能是传输大量路由- ‘专精嘛’ ,那末这所谓的大量路由是从哪里来的呢???
- **注入-宣告 - Network:**可以在bgp模式下将已有的igp路由进行宣告,然后对等体就可以通过报文更新进行学习到。
- **注入-引入 - import-router:**精确注入,如果路由条目太多,也可以通过直接引入协议的方式进行进入,可支持协议为直连路由、静态路由、OSPF路由、ISIS路由等,例如:import-router ospf/static.
- **聚合路由:**与IGP相同,就是将相同前缀的路由条目进行聚合,有手工聚合(精确常用)和系统自动聚合两种方式,无论手工还是自动生成后都会和明细路由进行并列,如果不想让对等体接收到明细路由(默认明细和聚合一起传输),就可以使用明细抑制来保证只有聚合路由进行传递如下图。
五、通告原则 --重要!!!
通告原则也可以理解为需要遵守的规则和设备的做事风格
- **只会发布最优并且有效路由:**只会发布最优并且有效(下一跳可达,自己可以和该路由条目的下一跳通信)的路由,如图,从两个设备学习到的都有效(因为基于IGP,所以可能有多条路由),但是R1只会将最优的路由传递给其他对等体。
*是有效,< 是最优。
- **EBGP对等体获取的路由,会发布给所有对等体:**好比一个人从外学习知识,它可以分享给所有的邻居(对等体),无论中国外国(I/EBGP)。
- **IBGP水平分割:**从IBGP对等体获取的路由,不会发送给IBGP对等体,十分重要!! 主要是为了防环。可以通告全互联和修改下一跳来规避该原则。
- **BGP同步规则:**当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题,如果没有同步,传输bgp路由时中间IGP设备无法识别,只会丢弃,不会提醒(静态路由的感觉),所以产生黑洞,但是这也就意味着你要把BGP引入到IGP进行传递(有点憨憨),所以制造厂商
默认禁用
。
六、相关配置命令
1.启动BGP进程(bgp + AS号)
//启动BGP,指定本地AS编号,并进入BGP视图。使用router-id命令配置BGP的Router ID,建议将BGP Router ID配置为设备Loopback接口的地址。
[Huawei] bgp { as-number-plain | as-number-dot }
[Huawei-bgp] router-id ipv4-address
2.配置BGP对等体
//创建BGP对等体,指定对等体地址以及AS号。
//如果是使用环回口地址进行连接,这里就指定目标对等体的环回口地址,然后在指定本地用哪个环回口进行连接,如果是EBGP使用接口进行连接,那末直接指定邻居接口地址以及对等体区域号就可以,对等体操作一样。
[Huawei-bgp] peer { ipv4-address | ipv6-address } as-number { as-number-plain | as-number-dot }
3.配置建立对等体使用的源地址、EBGP对等体最大跳数
//指明发起连接时使用的源地址,接口连接可不用配置。
[Huawei-bgp] peer ipv4-address connect-interface interface-type interface-number [ ipv4-source-address ]
//使用接口建立EBGP邻居关系时使用,因为EBGP连接允许最大条数为1,即只能在物理直连链路上建立EBGP连接。
[Huawei-bgp] peer ipv4-address ebgp-max-hop [ hop-count ]