简介
本文档介绍如何以最低的内存要求实现边界网关协议(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有两个主要组件:
两个表都存储在 DRAM 内存中。确保通用接口处理器(VIP)或线卡也包含足够的可用DRAM。“%FIB-3-FIBDISABLE:错误,插槽[#]:无内存”和“%FIB-3-NOMEM”错误消息表示卡中内存不足。
强烈建议在启用dCEF之前检查VIP或线卡内存。完成以下步骤以确认内存:
-
在全局配置模式下发出ip cef命令以配置中央CEF。
为FIB表的生成留出时间。
-
使用show ip cef summary命令查看中央FIB表的大小。
-
确定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过滤器列表的路由遵循默认路由。
相关信息