今天我们来看看BGP协议。 我们不会很长时间谈论它的原因以及为什么它被用作唯一的协议。 关于这个主题有很多信息,例如 .
那么什么是BGP呢? BGP是一种动态路由协议,也是唯一的EGP(外部网关协议)协议。 该协议用于在 Internet 上构建路由。 让我们看看如何在两个 BGP 路由器之间建立邻居。
考虑 Router1 和 Router3 之间的邻居。 让我们使用以下命令配置它们:
router bgp 10
network 192.168.12.0
network 192.168.13.0
neighbor 192.168.13.3 remote-as 10
router bgp 10
network 192.168.13.0
network 192.168.24.0
neighbor 192.168.13.1 remote-as 10单个自治系统内的邻居是AS 10。在路由器(例如Router1)上输入信息后,该路由器会尝试与Router3 建立邻接关系。 什么也没发生时的初始状态称为 空闲。 一旦在 Router1 上配置了 bgp,它将开始侦听 TCP 端口 179 - 它将进入状态 互动,当它尝试与 Router3 打开会话时,它将进入状态 有效.
Router1和Router3之间建立会话后,会交互Open消息。 当Router1发送此消息时,将调用此状态 打开发送。 当它收到来自Router3的Open消息时,它会进入状态 打开确认。 让我们仔细看看 Open 消息:
该消息传达有关路由器使用的 BGP 协议本身的信息。 通过交换 Open 消息,Router1 和 Router3 相互传达有关其设置的信息。 传递以下参数:
- 版本:这包括路由器正在使用的 BGP 版本。 BGP 的当前版本是 RFC 4 中描述的版本 4271。两个 BGP 路由器将尝试协商兼容的版本,当不匹配时,将不会有 BGP 会话。
- 我的AS:这包括 BGP 路由器的 AS 编号,路由器必须就 AS 编号达成一致,并且还定义它们是否将运行 iBGP 还是 eBGP。
- 保持时间:如果 BGP 在保持时间内没有收到来自另一端的任何 keepalive 或更新消息,那么它将声明另一端“死亡”,并将拆除 BGP 会话。 默认情况下,Cisco IOS 路由器上的保持时间设置为 180 秒,每 60 秒发送一次保活消息。 两个路由器必须就保持时间达成一致,否则不会有 BGP 会话。
- BGP 标识符:这是本地 BGP 路由器 ID,就像 OSPF 一样选举:
- 使用通过 bgp router-id 命令手动配置的路由器 ID。
- 使用环回接口上最大的 IP 地址。
- 使用物理接口上最大的 IP 地址。
- 可选参数:在这里您将找到 BGP 路由器的一些可选功能。 添加此字段是为了可以将新功能添加到 BGP,而无需创建新版本。您可能会在此处找到以下内容:
- 支持 MP-BGP(多协议 BGP)。
- 支持路由刷新。
- 支持 4 字节 AS 编号。
建立邻里必须满足以下条件:
- 版本号。 当前版本是4。
- AS编号必须与您配置的一致 邻居 192.168.13.3 远程-as 10.
- Router ID 必须与邻居不同。
如果任何参数不满足这些条件,路由器将发送 通知 指示错误的消息。 发送和接收Open消息后,邻居关系进入状态 成立。 此后,路由器可以交换有关路由的信息并使用 更新 消息。 这是 Router1 发送给 Router3 的 Update 消息:
在这里您可以看到 Router1 报告的网络和 Path 属性,这些属性类似于指标。 我们将更详细地讨论路径属性。 Keepalive 消息也在 TCP 会话中发送。 默认情况下,它们每 60 秒传输一次。 这是一个保活定时器。 如果在保持定时器期间没有收到保活消息,则意味着与邻居的通信丢失。 默认情况下,它等于 180 秒。
有用的标志:
看起来我们已经弄清楚了路由器之间是如何传递信息的,现在我们来尝试一下BGP协议的逻辑。
将路由发布到BGP表中,与IGP协议一样,使用network命令,但操作逻辑不同。 如果在IGP中,在network命令中指定路由后,IGP查看哪些接口属于该子网并将它们包含在其表中,那么BGP中的network命令查看路由表并查找 精确 与network命令中的路由匹配。 如果找到,这些路由将出现在 BGP 表中。
在路由器当前的IP路由表中查找与network命令的参数完全匹配的路由; 如果IP路由存在,则将等效的NLRI放入本地BGP表中。
现在让我们将 BGP 提升到所有剩余的 AS,看看如何在一个 AS 内选择路由。 BGP路由器收到邻居发来的路由后,开始选择最佳路由。 在这里,您需要了解可以有什么类型的邻居 - 内部和外部。 路由器是否通过配置了解配置的邻居是内部邻居还是外部邻居? 如果在一个团队中:
neighbor 192.168.13.3 remote-as 10 其中remote-as参数指定AS,该AS是在router bgp 10命令中在路由器本身上配置的,来自内部AS的路由被认为是内部的,来自外部AS的路由被认为是外部的。 对于每一个,接收和发送的逻辑都不同。 考虑这个拓扑:
每个路由器都有一个配置有 ip 的环回接口: xxxx 255.255.255.0 - 其中 x 是路由器编号。 在 Router9 上,我们有一个环回接口,地址为 - 9.9.9.9 255.255.255.0。 我们将通过 BGP 公布它,看看它如何传播。 该路由将被发送到Router8和Router12。 从 Router8 出发,该路由将到达 Router6,但到达 Router5 时不会出现在路由表中。 同样,在 Router12 上,该路由将出现在表中,但在 Router11 上,它也不会出现在表中。 让我们试着弄清楚这一点。 让我们考虑 Router9 向其邻居传输哪些数据和参数,报告该路由。 下面的数据包将从 Router9 发送到 Router8。
路由信息由Path 属性组成。
路径属性分为4类:
- 众所周知的强制性 - 所有运行 BGP 的路由器都必须识别这些属性。 必须存在于所有更新中。
- 知名全权委托 - 所有运行 BGP 的路由器都必须识别这些属性。 它们可能存在于更新中,但它们的存在不是必需的。
- 可选及物 - 可能无法被所有 BGP 实现识别。 如果路由器无法识别该属性,则会将更新标记为部分更新并将其转发给其邻居,同时存储无法识别的属性。
- 可选的非传递性 - 可能无法被所有 BGP 实现识别。 如果路由器无法识别该属性,则该属性在传递给邻居时将被忽略并丢弃。
BGP 属性示例:
- 众所周知的强制性:
- 自治系统路径
- 下一跳
- 起源
- 知名全权委托:
- 当地偏好
- 原子聚合体
- 可选及物:
- 聚合
- 地区
- 可选的非传递性:
- 多出口鉴别器 (MED)
- 发起者ID
- 集群列表
在这种情况下,现在我们将对起源、下一跳、AS 路径感兴趣。 由于该路由是在Router8和Router9之间传输的,即在一个AS内部,因此被认为是内部路由,我们要关注Origin。
Origin 属性 - 指示更新中的路由是如何获得的。 可能的属性值:
- 0 - IGP:原自治系统内收到的NLRI;
- 1 - EGP:NLRI 使用外部网关协议 (EGP) 获知。 BGP 的前身,未使用
- 2 - 不完整:NLRI 是通过其他方式学习的
在我们的例子中,从数据包中可以看出,它等于0。当这条路由传输到Router12时,该代码将具有代码1。
下一步,下一跳。 下一跳属性
- 这是通往目标网络的路径所经过的 eBGP 路由器的 IP 地址。
- 当前缀发送到另一个AS时该属性会发生变化。
在 iBGP 的情况下,即在一个 AS 内,下一跳将由获悉或告知该路由的那个指示。 在我们的例子中,它将是 192.168.89.9。 但是当这条路由从Router8传输到Router6时,Router8会改变它并用自己的替换它。 下一跳将为 192.168.68.8。 这使我们得出两条规则:
- 如果路由器将路由转发到其内部邻居,则不会更改下一跳参数。
- 如果路由器将路由传输到其外部邻居,它会将 Next-hop 更改为该路由器传输的接口的 IP。
这就让我们明白了第一个问题——为什么Router5和Router11的路由表中不会有路由。 让我们仔细看看。 这样,Router6 收到了 9.9.9.0/24 路由的信息,并成功将其添加到路由表中:
Router6#show ip route bgp
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
9.0.0.0/24 is subnetted, 1 subnets
B 9.9.9.0 [20/0] via 192.168.68.8, 00:38:25<source>
Теперь Router6 передал маршрут Router5 и первому правилу Next-hop не изменил. То есть, Router5 должен добавить <b>9.9.9.0 [20/0] via 192.168.68.8</b> , но у него нет маршрута до 192.168.68.8 и поэтому данный маршрут добавлен не будет, хотя информация о данном маршруте будет храниться в таблице BGP:
<source><b>Router5#show ip bgp
BGP table version is 1, local router ID is 5.5.5.5
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* i 9.9.9.0/24 192.168.68.8 0 100 0 45 i</b>Router11-Router12之间也会发生同样的情况。 为了避免这种情况,需要配置Router6或Router12在向其内部邻居传递路由时,将其IP地址替换为下一跳。 这是使用以下命令完成的:
neighbor 192.168.56.5 next-hop-self执行此命令后,Router6 将发送一条 Update 消息,其中接口 Gi0/0 Router6 的 ip 将被指定为路由的下一跳 - 192.168.56.6,之后该路由将已包含在路由表中。
我们再进一步看看Router7和Router10上是否出现了这条路由。 它不会出现在路由表中,我们可能会认为问题与第一个带有 Next-hop 参数的问题相同,但是如果我们查看 show ip bgp 命令的输出,我们会看到即使下一跳错误,也没有收到路由,这意味着该路由甚至没有被传输。 这将导致我们存在另一个规则:
从内部邻居接收的路由不会传播到其他内部邻居。
由于 Router5 收到了来自 Router6 的路由,因此不会将其转发给其他内部邻居。 为了进行传输,您需要配置该功能 ,或者配置全连接邻居关系(Full Mesh),即Router5-7每个人都会成为每个人的邻居。 在这种情况下,我们将使用路由反射器。 在 Router5 上,您需要使用以下命令:
neighbor 192.168.57.7 route-reflector-client当将路由传递给内部邻居时,路由反射器会更改 BGP 的行为。 如果内部邻居指定为 路由反射器客户端,然后内部路由将被通告给这些客户端。
Router7上没有出现该路由? 也不要忘记下一跳。 经过这些操作后,路由也应该到达 Router7,但这种情况并未发生。 这给我们带来了另一条规则:
下一跳规则仅适用于外部路由。 对于内部路由,不替换下一跳属性。
我们遇到这样一种情况,有必要创建一个使用静态路由或 IGP 协议的环境来向路由器通知 AS 内的所有路由。 让我们在 Router6 和 Router7 上注册静态路由,然后我们将在路由器表中获得所需的路由。 在 AS 678 中,我们的做法略有不同 - 我们将在 Router192.168.112.0 上注册 24/10 的静态路由,在 Router192.168.110.0 上注册 24/12 的静态路由。 接下来,我们将建立Router10和Router12之间的邻居关系。 我们还将配置 Router12 将其下一跳发送到 Router10:
neighbor 192.168.110.10 next-hop-self结果是 Router10 将收到路由 9.9.9.0/24,该路由将从 Router7 和 Router12 收到。 让我们看看 Router10 会做出什么选择:
Router10#show ip bgp
BGP table version is 3, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*>i 9.9.9.0/24 192.168.112.12 0 100 0 45 i
192.168.107.7 0 123 45 i 我们可以看到,两条路由和一个箭头 (>) 表示选择了经过 192.168.112.12 的路由。
让我们看看路由选择过程是如何工作的:
- 接收路由时的第一步是检查其下一跳的可用性。 这就是为什么当我们在Router5上收到一条没有设置Next-hop-self的路由时,这条路由没有被进一步处理。
- 接下来是权重参数。 该参数不是路径属性 (PA),并且不会在 BGP 消息中发送。 它在每个路由器上本地配置,仅用于操作路由器本身的路由选择。 让我们看一个例子。 就在上面,您可以看到 Router10 通过 Router9.9.9.0 (24) 选择了 12/192.168.112.12 的路由。 要更改Wieght参数,可以使用route-map设置特定路由,或者使用以下命令为其邻居分配权重:
neighbor 192.168.107.7 weight 200现在,来自该邻居的所有路由都将具有此权重。 让我们看看经过此操作后路线的选择如何变化:
Router10#show bgp *Mar 2 11:58:13.956: %SYS-5-CONFIG_I: Configured from console by console BGP table version is 2, local router ID is 6.6.6.6 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 9.9.9.0/24 192.168.107.7 200 123 45 i * i 192.168.112.12 0 100 0 45 i如您所见,现在选择了通过 Router7 的路由,但这不会对其他路由器产生任何影响。
- 第三位是本地偏好。 该参数是众所周知的任意属性,这意味着它的存在是可选的。 该参数仅在一个AS内部有效,并且仅影响内部邻居的路径选择。 这就是为什么它仅在发往内部邻居的更新消息中传输的原因。 它不存在于外部邻居的更新消息中。 因此,它被归类为知名全权委托。 我们尝试在 Router5 上应用它。 在 Router5 上,我们应该有两条通往 9.9.9.0/24 的路由 - 一条通过 Router6,另一条通过 Router7。
我们看:
Router5#show bgp BGP table version is 2, local router ID is 5.5.5.5 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.56.6 0 100 0 45 i但正如我们看到的一条路由通过 Router6。 经过 Router7 的路由在哪里? 也许Router7也没有? 我们看看吧:
Router#show bgp BGP table version is 10, local router ID is 7.7.7.7 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.56.6 0 100 0 45 i 192.168.107.10 0 678 45 i奇怪的是,一切似乎都很好。 为什么没有传输到Router5? 问题是 BGP 有一个规则:
路由器仅传输它使用的那些路由。
Router7使用经过Router5的路由,因此经过Router10的路由不会被转发。 让我们回到本地偏好。 让我们在 Router7 上设置本地首选项,看看 Router5 对此有何反应:
route-map BGP permit 10 match ip address 10 set local-preference 250 access-list 10 permit any router bgp 123 neighbor 192.168.107.10 route-map BGP in</b>因此,我们创建了一个包含所有路由的路由映射,并告诉 Router7 在收到时将本地首选项参数更改为 250,默认值为 100。让我们看看 Router5 上发生了什么:
Router5#show bgp BGP table version is 8, local router ID is 5.5.5.5 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *>i 9.9.9.0/24 192.168.57.7 0 250 0 678 45 i现在我们可以看到,Router5 更喜欢通过 Router7 的路由。 同样的图片将出现在 Router6 上,尽管选择通过 Router8 的路由对他来说更有利可图。 我们还补充说,更改此参数需要重新启动邻域才能使更改生效。 读 。 我们整理了本地偏好。 让我们继续讨论下一个参数。
- 优先选择下一跳参数为0.0.0.0的路由,即本地路由或聚合路由。 输入网络命令后,这些路由会自动分配一个等于最大值 32678 的权重参数:
Router#show bgp BGP table version is 2, local router ID is 9.9.9.9 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path *> 9.9.9.0/24 0.0.0.0 0 32768 i - 通过 AS 的最短路径。 选择最短的 AS_Path 参数。 一条路由经过的AS越少越好。 考虑 Router9.9.9.0 上到 24/10 的路由:
Router10#show bgp BGP table version is 2, local router ID is 6.6.6.6 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, x best-external, a additional-path, c RIB-compressed, Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path * 9.9.9.0/24 192.168.107.7 0 123 45 i *>i 192.168.112.12 0 100 0 45 i可以看到,Router10 选择了 192.168.112.12 的路由,因为该路由的 AS_Path 参数只包含 45,而在另一种情况下则为 123 和 45。直观上很清楚。
- 下一个参数是原点。 IGP(使用BGP获得的路由)比EGP(使用BGP的前身获得的路由,不再使用)好,而EGP比Incomplete? (通过其他方法获得,例如通过重新分配)。
- 下一个参数是 MED。 我们有 Wiegt,它只能在路由器上本地工作。 有本地偏好,它只在一个自治系统内起作用。 正如您可能猜到的,MED 是将在自治系统之间传输的参数。 非常好 关于这个参数。
不再使用更多的属性,但如果两条路由具有相同的属性,则使用以下规则:
- 选择经过最近的 IGP 邻居的路径。
- 为 eBGP 路径选择最旧的路由。
- 选择经过具有最小 BGP 路由器 ID 的邻居的路径。
- 选择一条经过 IP 地址最小的邻居的路径。
现在我们来看看BGP收敛的问题。
让我们看看如果 Router6 丢失通过 Router9.9.9.0 的路由 24/9 会发生什么情况。 让我们禁用Router0的Gi1/6接口,这会立即了解到与Router8的BGP会话已终止并且邻居已消失,这意味着从其接收的路由无效。 Router6立即发送Update消息,在Withdrawn Routes字段中指明网络9.9.9.0/24。 Router5一收到这样的消息,就会将其发送给Router7。 但由于 Router7 有一条经过 Router10 的路由,因此它会立即以新路由的更新响应。 如果无法根据接口的状态检测到邻居的故障,则必须等待保持计时器触发。
联盟。
如果您还记得,我们讨论过您经常必须使用全连接拓扑的事实。 如果一个 AS 中有大量路由器,这可能会导致大问题,为了避免这种情况,您需要使用联盟。 一个AS被划分为多个子AS,这使得它们无需全连接拓扑即可运行。
这是一个链接 和 GNS3 的配置。
例如,使用这种拓扑,我们必须将 AS 2345 中的所有路由器相互连接,但使用联盟,我们只能在直接相互连接的路由器之间建立邻接关系。 我们来详细谈谈这个问题。 如果我们只有 AS 2345,那么 拉福吉 收到了来自的游行 皮卡德 会告诉路由器 时间 и WORF,但他们不会告诉路由器这件事 破碎机 。 还有路由器本身分配的路由 拉福吉, 不会被转移 破碎机 也不 WORF-不好了 时间.
您必须配置路由反射器或完全连接的邻居关系。 通过将一个 AS 2345 分为 4 个子 AS(2,3,4,5、XNUMX、XNUMX、XNUMX)供每个路由器使用,我们最终得到不同的操作逻辑。 一切都被完美描述 .
来源:
- CCIE 路由和交换 v5.0 官方证书指南,第 2 卷,第五版,Narbik Kocharians,Terry Vinson。
- 网站
- 网站 .
来源: habr.com
