簡介
本文說明如何以最低的記憶體需求為邊界閘道通訊協定(BGP)路由器實現最佳化。
必要條件
需求
本文件沒有特定需求。
採用元件
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
慣例
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
背景資訊
本文說明了如何在連線到多個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接受來自其ISP的約100,000條路由的完整BGP路由表時,與您在路由器1上應用入站AS_PATH過濾器時,記憶體使用率的變化情況。
注意:組成完整摘要的實際字首數可能有所不同。本文檔中的值僅用作示例。路由伺服器可以清楚地瞭解組成完整BGP表的字首數量。
注意:所有工具和內部網站僅面向已註冊的思科客戶端。
BGP路由器收到完整的BGP路由表
以下是Router 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 neighbor 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的記憶體。
使用入站AS_PATH過濾器清單配置的BGP路由器
在本例中,您將應用入站過濾器清單以接受由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 |
Thisshow ip bgp summarycommand輸出顯示從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 | 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%以上。
如果您檢視網際網路資料分析合作協會(CAIDA)編譯的AS Internet圖表,您便可以看到哪些ISP具有最高程度的互聯性(最靠近圖表中心的ISP)。互連性越少,透過AS_PATH過濾器的路由就越少,並且BGP記憶體消耗也越低。但是,必須注意的是,無論何時設定AS_PATH過濾器,都需要配置預設路由(0/0)。未通過AS_PATH過濾器清單的路由使用預設路由。
相關資訊