目录

简介

先决条件

要求

使用的组件

规则

背景信息

BGP 路由器接收完整的 BGP 路由表

配置 BGP 路由器使用入站 AS_PATH 过滤器列表

排除内存相关问题

结论

相关信息

简介

本文档介绍如何以最低的内存要求实现边界网关协议(BGP)路由器的最佳性能。

先决条件

要求

本文档没有任何特定的要求。

使用的组件

本文档不限于特定的软件和硬件版本。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

规则

有关文档约定的详细信息，请参阅Cisco技术提示约定。

背景信息

本文档说明如何在连接到多个互联网服务提供商(ISP)的企业网络中实现最佳路由，同时降低边界网关协议(BGP)路由器的内存要求。您可以使用AS_PATH过滤器，该过滤器仅接受源自ISP及其直连自治系统的路由，而不会从ISP接收完整的BGP路由表。

本部分以网络图为例。在本例中，您过滤路由器1和路由器2的传入BGP更新，以接受ISP的路由和直连自治系统的路由。路由器1接受ISP-A及其直连自治系统C1的路由。同样，路由器2接受ISP-B和C2的路由。其余不属于ISP及其客户端自治系统的网络，根据企业路由策略，遵循指向ISP-A或ISP-B的默认路由。

您可以观察当路由器1从其ISP接受包含约100,000条路由的完整BGP路由表时，与在路由器1上应用入站AS_PATH过滤器时相比，内存利用率如何变化。

注意：构成完整源的前缀的实际数量可能不同。本文档中的值仅用作示例。路由服务器可以很好地了解构成完整BGP表的前缀数量。

注意：所有工具和内部网站仅适用于注册的思科客户端。

BGP 路由器接收完整的 BGP 路由表

以下是路由器1的配置：

路由器 1

hostname R1

!

路由器BGP XX

无同步

neighbor 157.x.x.x remote-as 701

neighbor 157.x.x.x filter-list 80 out

!

ip as-path access-list 80 permit ^$

!

结束

show ip bgp summary命令输出显示，已从ISP-A（BGP邻居157.x.x.x）收到98,410个前缀：

R1#show ip bgp summary

BGP router identifier 65.yy.yy.y, local AS number XX

BGP table version is 611571, main routing table version 611571

98769 network entries and 146299 paths using 14847357 bytes of memory

23658 BGP path attribute entries using 1419480 bytes of memory

20439 BGP AS-PATH entries using 516828 bytes of memory

0 BGP route-map cache entries using 0 bytes of memory

5843 BGP filter-list cache entries using 70116 bytes of memory

BGP activity 534001/1904280 prefixes, 2371419/2225120 paths, scan interval 15 secs

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd

165.yy.yy.a     4  6xx9   32962  826287   611571    0    0 01:56:13        1

165.yy.yy.b     4  6xx9   32961  855737   611571    0    0 01:56:12        1

165.yy.yy.c     4  6xx9  569699  865164   611571    1    0 01:55:39    47885

157.x.x.x       4   701 3139774  262532   611571    0    0 00:07:24    98410

show ip route summary命令输出显示，路由表中已安装80,132条BGP路由：

R1#show ip route summary

IP routing table name is Default-IP-Routing-Table(0)

Route Source    Networks    Subnets     Overhead    Memory (bytes)

connected       0           4           256         576

static          0           1           64          144

eigrp 6         0           5           768         720

bgp  XX         80132       18622       6320256     14326656

External: 87616 Internal: 11138 Local: 0

internal        854                                 994056

Total           80986       18632       6321344     15322152

此命令显示BGP进程在RAM中占用的内存量：

R1#show processes memory | begin BGP

PID TTY  Allocated      Freed    Holding    Getbufs    Retbufs Process

73   0  678981156   89816736   70811036          0          0 BGP Router

74   0    2968320  419750112      61388    1327064        832 BGP I/O

75   0          0    8270540       9824          0          0 BGP Scanner

70882248 Total BGP

77465892 Total all processes

BGP进程使用大约71 MB的内存。

配置 BGP 路由器使用入站 AS_PATH 过滤器列表

在本例中，您应用入站过滤器列表来接受由ISP-A及其直连自治系统发起的路由。在本例中，ISP-A通过外部BGP(eBGP)通告默认路由(0.0.0.0)，因此不通过过滤器列表的路由将沿默认路由通向ISP-A。以下是过滤器列表的配置：

路由器 1

hostname R1

!

路由器BGP XX

无同步

。

neighbor 157.x.x.x remote-as 701

neighbor 157.x.x.x filter-list 80 out

neighbor 157.x.x.x filter-list 85 in

! — 此线路过滤入站BGP更新。

!

ip as-path access-list 80 permit ^$

ip as-path access-list 85 permit ^701_[0-9]*$

!— AS_PATH过滤器列表过滤ISP和！ — 直连自治系统路由。

!

结束

此show ip bgp summary命令输出显示从ISP-A(邻居157.xx.xx.x)收到的31,667个前缀：

R1#show ip bgp summary

BGP router identifier 165.yy.yy.y, local AS number XX

BGP table version is 92465, main routing table version 92465

36575 network entries and 49095 paths using 5315195 bytes of memory

4015 BGP path attribute entries using 241860 bytes of memory

3259 BGP AS-PATH entries using 78360 bytes of memory

0 BGP route-map cache entries using 0 bytes of memory

4028 BGP filter-list cache entries using 48336 bytes of memory

BGP activity 1735069/3741144 prefixes, 4596920/4547825 paths, scan interval 15 secs

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd

165.yy.yy.a     4  6319  226694 1787061    92465    0    0 17:31:04        1

165.yy.yy.b     4  6319  226814 1806986    92465    0    0 19:51:53        1

165.yy.yy.c     4  6319 1041069 1822703    92465    0    0 19:44:52    17424

157.xx.xx.x     4   701 14452518  456341    92465    0    0 19:51:37    31667

show ip route summary命令输出显示路由表中有27,129条BGP路由：

R1#show ip route summary

IP routing table name is Default-IP-Routing-Table(0)

Route Source    Networks    Subnets     Overhead    Memory (bytes)

connected       0           4           256         576

static          0           1           64          144

eigrp 6319      0           6           896         864

bgp 6319        27129       9424        2339392     5299332

External: 19134 Internal: 17419 Local: 0

internal        518                                 602952

Total           27647       9435        2340608     5903868

BGP进程使用的内存大约为28 MB，如下所示：

R1#show processes memory | include BGP

PID TTY  Allocated      Freed    Holding    Getbufs    Retbufs Process

73   0  900742224  186644540   28115880          0          0 BGP Router

74   0    5315232  556232160       6824    2478452        832 BGP I/O

75   0          0   39041008       9824          0          0 BGP Scanner

28132528 Total BGP

34665820 Total all memory

排除内存相关问题

要检查BGP进程使用的内存，请使用show processes memory |包括bgpcommand。以下列出了与内存过度使用相关的最常见问题：

- 内存分配失败“%SYS-2-MALLOCFAIL”。

- 拒绝 Telnet 会话.

- 某些show命令没有输出。

- “内存不足”错误消息。

- “Unable to create EXEC - no memory or too my processes”（无法创建EXEC — 无内存或进程太多）控制台消息。

- 路由器挂起或无控制台响应。

- 如果运行与BGP相关的调试，通常会导致内存消耗过多，这也会导致BGP导致内存错误。BGP调试必须谨慎运行，如果不需要，则应避免。

要从一个BGP对等体存储完整的全局BGP路由表，最好在路由器中至少有512 MB或1 GB的RAM。如果使用256 MB的RAM，建议您使用更多路由过滤器。如果使用512 MB的RAM，则路由表中可以放置更多互联网路由，路由过滤器更少。在接收完整BGP表的Catalyst 6500/6000上，建议使用RAM为256 MB的多层交换功能卡2(MSFC2)以避免“Cisco Bug ID CSCdt13244”。

BGP路由的内存消耗取决于属性的数量，如多路径支持、软重新配置、对等体的数量和AS_PATH。有关BGP内存要求的详细信息，请参阅RFC 1774。

思科快速转发/分布式思科快速转发(CEF/dCEF)交换会根据路由表大小消耗内存。CEF有两个主要组件：

- 转发信息库(FIB)

- 邻接表

两个表都存储在 DRAM 内存中。确保通用接口处理器(VIP)或线卡也包含足够的可用DRAM。“%FIB-3-FIBDISABLE:错误，插槽[#]:无内存”和“%FIB-3-NOMEM”错误消息表示卡中内存不足。

强烈建议在启用dCEF之前检查VIP或线卡内存。完成以下步骤以确认内存：

1. 在全局配置模式下发出ip cef命令以配置中央CEF。

为FIB表的生成留出时间。

1. 使用show ip cef summary命令查看中央FIB表的大小。

2. 确定VIP或线卡是否具有足够的可用DRAM来存储大小相似的FIB表。

发出show controller vip [slot#] techcommand并检查show memory summary命令的输出。

运行完整的Internet BGP路由时，VIP或线卡上最好至少有512 MB或1 GB的RAM。

结论

下表说明了实施过滤器列表时节省的内存：

前缀数量

消耗的内存

无过滤

98,410

70,882,248

自治系统过滤器

31,667

28,132,528

当BGP路由器收到其邻居的完整BGP路由表（98,410条路由）时，路由器消耗大约71 MB。通过将AS_PATH过滤器应用于入站更新，BGP路由表的大小将减少到31,667条路由，内存消耗约为28 MB。通过最佳路由，内存利用率的降低超过60%。

如果您查看由Cooperative Association for Internet Data Analysis(CAIDA)编译的AS Internet图形，您可以看到哪些ISP具有最高程度的互联性（最接近图表中心的ISP）。 互联性越低，通过AS_PATH过滤器的路由越少，BGP内存消耗越低。但是，必须注意的是，无论何时设置AS_PATH过滤器，您都需要配置默认路由(0/0)。 不通过AS_PATH过滤器列表的路由遵循默认路由。

相关信息

- 在 BGP 中使用正则表达式

- 在单宿主和多宿主环境中加载 BGP 共享：示例配置

- 如何使用 HSRP 在多宿主 BGP 网络中提供冗余

- 两个不同服务提供商（多宿）间的 BGP 的示例配置

- BGP 支持页

- 技术支持 - Cisco Systems