簡介
本文說明如何以最低的記憶體需求為邊界閘道通訊協定(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的預設路由。
您可以觀察到,與您將入站AS_PATH過濾器應用到路由器1上相比,路由器1接受來自其ISP的約100,000條路由的完整BGP路由表時,記憶體利用率如何變化。
附註:構成完整進紙的實際字首數可能有所不同。本檔案中的值僅用作範例。路由伺服器可以很好地瞭解構成完整BGP表的字首數。
附註:所有工具和內部網站僅適用於註冊的思科客戶端。
BGP路由器收到完整的BGP路由表
以下是Router 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 ^$ ! 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的記憶體。
使用傳入AS_PATH過濾器清單配置的BGP路由器
在本示例中,您將應用入站過濾器清單來接受由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英吋 ! — 此線路過濾入站BGP更新。 ! ip as-path access-list 80 permit ^$ ip as-path access-list 85 permit ^701_[0-9]*$ !— AS_PATH過濾器清單過濾ISP和! — 直連自治系統路由。 ! end |
此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 | include bgpcommand。與過度使用記憶體相關的最常見問題如下所示:
-
記憶體分配失敗「%SYS-2-MALLOCFAIL」。
-
拒絕的Telnet會話。
-
某些show命令沒有輸出。
-
「記憶體不足」錯誤消息。
-
「Unable to create EXEC - no memory or too many processes(無法建立EXEC — 沒有記憶體或進程過多)」控制檯消息。
-
路由器掛起或無控制檯響應。
-
如果執行BGP相關的偵錯,通常會造成過多的記憶體消耗,這也會由於BGP而導致記憶體錯誤。必須謹慎運行BGP調試,並在不需要時避免這些調試。
要儲存來自一個BGP對等體的完整全域性BGP路由表,最好在路由器中至少擁有512 MB或1 GB的RAM。如果使用256 MB的RAM,建議您使用更多路由過濾器。如果使用512 MB的RAM,則可以在路由表中放置更多具有較少路由過濾器的網際網路路由。在接受完整BGP表的Catalyst 6500/6000上,建議使用256 MB RAM的多層交換器功能卡2(MSFC2)來避免「思科錯誤ID CSCdt13244」。
BGP路由的記憶體消耗取決於屬性數量,例如多重路徑支援、軟重新配置、對等體數量和AS_PATH。有關BGP記憶體要求的更多詳細資訊,請參閱RFC 1774。
Cisco Express Forwarding/distributed Cisco Express Forwarding(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 命令輸出。
當您運行完整的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%以上。
如果您檢視由網際網路資料分析合作協會(CAIDA)編譯的AS Internet圖,就可以看到哪些ISP具有最高程度的互聯性(那些最靠近圖表中心的ISP)。 互連性越少,通過AS_PATH過濾器的路由就越少,BGP記憶體消耗也就越低。但必須注意的是,無論何時設定AS_PATH過濾器,都需要配置預設路由(0/0)。 未通過AS_PATH過濾器清單的路由遵循預設路由。
相關資訊