BGP表在通过BGP学习和使用路由信息的过程中起着关键作用。路由器将所有获悉的BGP前缀和PA存储在其BGP表中。路由器稍后将为每个前缀选择最佳BGP路由。然后,路由器可以仅将每个前缀的最佳路由从其BGP表发布到其邻居。
本文首先简要介绍了BGP邻居交换路由信息的BGP更新过程。接下来,本文介绍了各种show命令,这些命令可用于检查和确认BGP表的内容。
BGP更新消息
BGP邻居达到“已建立”状态时,这些邻居开始相互发送BGP Update消息。接收到更新的路由器会将那些学习到的前缀放入其BGP表中,而不管该路由是否看起来是最佳路由。像EIGRP和OSPF一样,BGP将所有学习到的路由信息放入其表中,然后BGP处理所有此类潜在路由以为每个前缀选择最佳路由。
BGP更新消息本身可以揭示BGP背后的动机。下图显示了更新消息的格式。
有趣的是,更新消息的格式告诉我们有关BGP作为路径矢量算法的性质的一些信息。该消息列出了一组PA,然后列出了使用该组PA的可能很长的前缀列表。
因此,您可能会认为BGP更新消息侧重于广告路径或一组PA,以及使用该广告路径的前缀的关联列表。由于BGP使用PA组合集合中的信息来决定哪条路径最佳,因此其基础逻辑称为路径向量。
BGP使用更新消息来通告和撤消路由。例如,当路由器意识到路由器的BGP表中的路由发生故障时,该路由器通过向其邻居发送BGP更新并在撤回的路由列表中列出前缀来撤回该路由。当路由器收到列出前缀已撤消的更新时,该路由器知道路由已失败。
检查BGP表
BGP验证计划中的关键任务之一应该是检查BGP表中的前缀,并确认已从预期的邻居学到正确的前缀。BGP表应保存从每个邻居学到的所有前缀,但入站BGP过滤器过滤的所有前缀除外。
例如,在与配置的路由器邻居路由映射 在命令,本地路由器将第一过滤路由,然后添加允许路由到BGP表中。
例如,考虑下图,Internet上某处存在五个前缀。ISP1和ISP3从ISP2学习这些前缀。ISP3客户的站点上存在一个附加前缀。该设计要求ISP1和ISP3在 向企业的eBGP通告中采取以下措施:
- ISP1应该提供默认路由以及完整的BGP更新。
- ISP3应提供默认路由以及仅包含ISP3客户前缀的部分BGP更新(例如192.135.250.0/28)。
该show ip bgp输出列出了BGP路由表的全部。下面的示例显示了来自路由器E1的示例。
剖析命令行
首先,检查show ip bgp命令输出的总体格式和标题。“网络”列列出了前缀/长度(NLRI)。下一跳标题列出了将用于该路由的下一跳IP地址。
然后,跳到最右边,路径标题列出了AS_PATH PA。请注意,很难看到AS_PATH的开头,但是在这种情况下,每个路由的权重[another PA]为0。因此,在这种情况下,0之后的下一个数字是AS_PATH的开头。
接下来,关注show ip bgp命令的最后两行输出。最后两行分别描述了一条到达192.135.250.0/28的不同路由-下一跳为1.1.1.1(路由器I1-1),下一跳为192.168.1.2(路由器I3-1)。
由于第二行未列出前缀(在“网络”标题下),因此输出暗示此行只是前一行中列出的前缀的另一条路由。接下来,检查每行结尾处突出显示的AS_PATH值。对于通过I1-1(1.1.1.1)的路由,AS_PATH列出了ASN 1、2、3和4。类似地,其他路由的AS_PATH仅列出了ASN 3和4。
最佳和有效路线
继续关注show ip bgp 输出的最后两行 ,检查输出的最左边部分,并注意这两行中的第二行 突出显示了“ >”。如命令输出顶部的图例所示,“ >” 表示最佳选择的路线。
在这种情况下,各个ISP内的路由器都没有设置PA来影响最佳路径选择,因此,首次使用的BGP最佳路径决策是最短的AS_PATH。结果,与具有四个ASN的ISP1(ASN 1)的路径相比,通过ISP3(ASN 3)的路径是最好的,只有两个ASN。
内部BGP路由(iBGP)
您可以确认第三列中没有字母“ i”,从而使用eBGP而不是iBGP来学习了所有E1的BGP表条目。*>之后 ,输出中立即 出现一个空格。如果使用iBGP学习了路由,则在第三个字符位置将出现一个“ i”。
查看BGP表的子集
当接受全部或部分BGP更新时,BGP表条目的绝对数量可能太大,以至于show ip bgp命令不起作用。该命令可以列出数千甚至数十万个前缀。
实际上,您需要对show ip bgp命令上的各种选项感到满意,每个选项都列出了BGP表的不同部分。
例如,您可能希望查看BGP表条目中的特定前缀,包括默认路由前缀0.0.0.0/0。此外,您可能希望查看每个邻居的路由,并查看从该邻居听到的路由,以及哪些路由经过任何入站路由过滤器以使其进入BGP表。
最后,要验证相邻的ISP是否发送了全部更新或部分更新,可以查看计数器以了解从每个邻居学到的前缀数量。尽管您可能永远不会知道期望的确切前缀数量,但是与发送部分更新的邻居相比,您应该看到从发送完整更新的邻居学到的前缀数量有显着差异。
下表总结了一些可以提供这些信息子集的关键命令选项。
使用网络命令向BGP注入路由
BGP网络路由器子命令与IGP使用的网络命令有很大不同。对于OSPF和EIGRP,network命令列出了路由器随后将与其所有接口IP地址进行比较的参数。如果匹配,则路由器在这些接口上启用IGP路由协议。
BGP不使用network命令在接口上启用BGP。实际上,BGP不了解在接口上启用该功能。为了进行比较,请注意,show ip ospf interface和show ip eigrp interfaces命令分别标识了OSPF 和 EIGRP的已启用接口 ,但对于BGP甚至没有这样的命令。
BGP网络命令的确会导致进行比较,但是该网络命令的参数与该路由器的IP路由表的内容之间进行了比较,如下所示:
在路由器的当前IP路由表中查找与network命令的参数完全匹配的路由;如果存在用于该确切前缀/长度的路由,则将等效的前缀/长度放入本地BGP表中。
使用重新分配向BGP注入路由
企业BGP路由器无需使用BGP网络命令将路由添加到BGP表中,而可以将路由从IGP重新分配到BGP。最终目标是相同的:
- 将公共地址范围而非私有IP地址范围注入BGP表。
- 为公共地址范围而不是该范围的任何单个子网发布一条路由。
运行BGP的企业路由器通常也已经运行了IGP,并且已经了解到整个公共范围的路由是一条路由还是带有子集路由。如果整个公共范围都存在一条路由,例如,在最后两个示例中使用的是128.107.0.0/19范围,则工程师只需向BGP配置中添加一个redistribute命令即可重新分配该路由,并且仅路由,进入BGP。
如果仅存在子路由,则需要采取几个附加步骤之一来满足设计目标,以便为整个公共地址范围注入一条路由。