说明:该篇笔记作为 BGP 基础-1 的补充,以及 BGP Border Gateway Protocol,边界网关路由协议的一些更为重要的基础理论。
参考视频:红茶三杯)
0x01 中转 AS 中的 IBGP 路由传递
参考该图:
上图,我们模拟一个 1.0 的路由通过 AS 65101 来传递
1:通过图可知,A 与 B 之间的 Peer 为 EBGP,B 与 E 之间为 Peer IBGP,E 与 F 之间为 Peer EBGP 邻接
2:A 通告 1.0 路由给 EBGP 邻居 B,那么 B 则跨 OSPF 路由 TCP 通信传递给 E,E再通过 EBGP 邻接关系传递给 F 注意:该路由为 AS 65101 update 通告给邻接的一个消息,而不是通信
3:F 已知去往 A 1.0 的路由,如果 AS F 要去往 1.0 路由,需要通过 EBGP E 转发
2:而当 E 转发该路由的时候,只有扔给 D,C 二者之中的一个,当转发到该非 BGP 路由器上的时候,D,C 二者是不知道如何操作该 BGP 路由的,会被直接丢弃,==我们将其称作路由黑洞==
这里我就叫它 AS 中转 IGP 黑洞
0x02 BGP 同步
既然出现了路由黑洞,那么就会有解决方法,如 RIP 一样,RIP 拥有水平分割来防环,那么 BGP 就有同步规则来防止路由黑洞
BGP 同步规则:
BGP 的同步规则指出,一台 BGP 的路由器,你不能将通过 IBGP 获取到的 BPG 路由,通告给你的 EBGP 邻居,除非你通过 IGP,又一次获取到这条路由的更新
该同步规则的着重点在于 IGP 路由拥有 BGP 路由跟新过来的路由条目,能够识别 BGP 路由,同时转发给 AS 边界 BGP 路由器
这里可能有理解错误,但是大致是这种情况
需要注意的一点是该规则是有点鸡肋的,因为随时可像 ARP 那样欺骗
==Cisco IOS 默认关闭同步规则==
既然又默认关闭,开启又鸡肋可欺骗,那么前辈们就总结出如下几个方法,来解决路由黑洞的问题
解决办法 1
该方案不是最优建议,因为 BGP 承载大量路由,重发布可能导致 IGP 跑死
参考图:
**在 B、E 上将 BGP 路由重发布进 IGP (OSPF) 路由中,可解决路由黑洞问题**
解决方法 2
该方案是采取 ==AS 边界路由全起 BGP 来达到无死角==,即 AS 路由器全跑 BGP 路由,从而使得 B peer E D C,邻接,那么这个时候,就不会存在路由黑洞的问题,BGP 同步规则也没必要开启 [ BGP 同步规则,Cisco 默认关闭]
参考图:
该方案缺点:
IBGP 全互联虽然能结局 Transit AS 内的路由黑洞问题,但是却造成 BGP 路由器需耗费大量资源维护 BGP 连接的新问题。
以下为两个资源损耗过大的解决方案:
- 路由反射器
- 联邦
0x03 IBGP 水平分割原则
我们在 RIP 中有水平分割原则,那么视野扩到 IBGP ,其维护的 Peer IBGP 的邻接关系所处的 水平分割原则又是什么样的?
IBGP 水平分割原则:
**当我的一台路由器从我的某一个 IBGP 邻居收到一条 BGP 路由的时候,我将不能够再传递给其他任何一个 IBGP 邻居 **
以下为讲解过程:
BGP 防环是通过 AS-PATH 实现的,而 AS-PATH 仅仅再路由离开 AS 才会被更改,因此在 AS 内, IBGP 就没有 EBGP 的防环能力,为了防止环路的出现,BGP 路由器不会将从 IBGP 邻居学习过来的路由再通告给自己其他 IBGP 邻居。——BGP 的水平分割原则。
==由于水分分割原则的存在,BGP 要求 AS 内,需保证 IBGP 全互联 ( neighbor 命令指定)。==
( 根本原因是再 AS 内部,AS-PATH 不会改变,无法使用 AS-PATH 防环,因此会导致出现环路)
0x04 BGP 路由通告规则
- 当存在多条路径时,BGP Router 只选取最优的路由 ( BEST ) 来使用 (没有负载均衡的情况下)
- BGP 只把自己使用的路由,也就是自己认为 BEST 的路由传递给 BGP peer
- BGP Speaker 从 EBGP 获得的路由会向他所有的 BGP peer 通告 包括 EBGP 和 IBGP
- BGP Speaker 从 IBGP 获得的路由不向它的 IBGP 相邻体通告 (水平分割原则:避免环路,存在路由 RR 的情况除外)
- BGP Speaker 从 IBGP 获得的路由是否通告给它的 EBGP peer 要看 IGP 和 BGP 的同步情况来决定
0x05 BGP 路由表
- BGP 邻居表:Peer 对等体列表
- BGP 表:包含了所有从邻居 Peer 对等体那学来的路由条目,以及到达目的的网段的多个路径和属性
- 路由表:列出了到达目的网段的==最佳路径==
- AD:EBGP = 20 ,IBGP = 200
0x06 BGP Next-hop 属性
该特征下一跳与其他下一跳不同,具体看以下解析
BGP 路由器从一个 EBGP 邻居收到一条路由的时候,BGP 路由器会将该 EBGP 邻居的接口 IP 作为我这条路由的下一跳 Next-hop,通告给我的 IBGP 邻居
该 Next-hop 属性只会在 不同 AS 之间发生改变,而 AS 内部是不会发生改变的
参考图如下:
其他参考:
- BGP 是 AS-by-AS 的路由协议,而不是 router-by-router 的路由协议
- 在 BGP中,next-hop 并不意味着是下一台路由器,而是到达下一个 AS 的 IP 地址
- EBGP 中, 默认 next-hop 为发送更新的理解路由器的 IP 的地址
- IGBP 中,从 EBGP 传来的 Next-hop 属性是在 IBGP 中保持不变的被传递
0x07 BGP 更新源
==跟新源在于声明 loopback 基础上==
在没有学习 BGP 跟新源的时候,我们使用直连接口建立 BGP peer 邻居关系
如果任何一个直连接口 down 掉,或者任何一个链路 down 掉都将直接导致 BGP 邻居 down,或者 BGP 路由之间的连接消失
==如果我们使用 loopback 口来建立 Peer 关系==,如果链路 down 了,只要我们有冗余链路,那么该链路会借助 IGP 协议从而再次发现 Peer,使得 BGP 链路更加稳定,邻居关系起到稳定作用
一般而言,与 EBGP 之间仍然采用之间接口指定更新源
参考图如下:
0x08 EBGP 之间使用 Loopback 建立跟新源
如果通过 EBGP 建立邻居关系,其默认 next-hop 为 1
需要注意的是,我们通过 loopback 口建立更新源,其 next-hop 最小值为 2
==所以如果通过 loopback 建立更新源,我们需要调整该跳数==,同时需要指定 EBGP 邻居间的通信无碍
具体调整方式参考 BGP 基础配置.md