简介
本文档介绍如何以最低内存要求实现边界网关协议(BGP)路由器的最佳性能。
先决条件
要求
本文档没有任何特定的要求。
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
规则
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
背景信息
本文档说明如何在连接到多个Internet服务提供商(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上应用入站AS_PATH过滤器相比,当路由器1接受来自其ISP的约100,000条路由的完整BGP路由表时,内存利用率如何变化。
注意:组成完整源的实际前缀数量可以不同。本文档中的值仅用作示例。路由服务器可以提供一个完整BGP表的前缀数量。
注意:所有工具和内部网站仅针对已注册的思科客户端。
BGP 路由器接收完整的 BGP 路由表
路由器1的配置如下:
路由器 1 |
hostname R1
!
router bgp XX
no synchronization
neighbor 157.x.x.x remote-as 701
neighbor 157.x.x.x filter-list 80 out
!
ip as-path access-list 80 permit ^$
!
end |
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
!
router bgp XX
no synchronization
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
!--- This line filters inbound BGP updates.
!
ip as-path access-list 80 permit ^$
ip as-path access-list 85 permit ^701_[0-9]*$
!--- The AS_PATH list filters ISP and the directly connected autonomous system routes.
!
end |
此show ip bgp summarycommand输出显示从ISP-A (neighbor 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 | include bgp命令。与内存过度使用相关的最常见问题如下所示:
-
内存分配失败“%SYS-2-MALLOCFAIL”。
-
拒绝 Telnet 会话.
-
一些show命令没有输出。
-
“Low on memory(内存不足)”错误消息。
-
“Unable to create EXEC - no memory or too many processes”(无法创建EXEC -没有内存或进程太多)控制台消息。
-
路由器挂起或无控制台响应。
-
如果运行BGP相关的调试,通常会导致内存消耗过多,这也会导致BGP导致的内存错误。必须谨慎运行BGP的调试,并且如果不需要这些调试,应避免进行这些调试。
当您从一个BGP对等体运行完整的Internet BGP路由时,所需的RAM量取决于设备特征和可扩展性。但是,鉴于Internet路由的持续增长,所需的最低内存可能大约为8 GB或更高。
BGP路由的内存消耗取决于属性数量,例如多路径支持、软重新配置、对等体数量和AS_PATH。有关BGP内存要求的详细信息,请参阅RFC 1774。
结论
此图表说明实施过滤器列表时节省的内存:
|
前缀数量 |
消耗的内存 |
无过滤 |
98,410 |
70,882,248 |
自治系统过滤器 |
31,667 |
28,132,528 |
当BGP路由器收到其邻居的完整BGP路由表(98,410条路由)时,路由器会消耗大约71 MB。将AS_PATH过滤器应用于入站更新后,BGP路由表的大小减少到31,667个路由,内存消耗约为28 MB。使用最佳路由时,内存使用率会降低60%以上。
如果您查看Internet数据分析合作协会(CAIDA)编译的AS Internet图表,您会发现哪些ISP的互联程度最高(最靠近图表中心的ISP)。互连性越少,通过AS_PATH过滤器的路由就越少,并且BGP内存消耗也越低。但是,请务必注意,无论何时设置AS_PATH过滤器,您都需要配置默认路由(0/0)。未通过AS_PATH过滤器列表的路由使用默认路由。
相关信息