BGP-tabel bereikt 512k-limiet in oudere routers

Het is nooit een goed teken wanneer de gewone pers schrijft over een BGP-gerelateerd probleem, zoals onlangs: “Omvangrijke storing internet legt websites wereldwijd plat” (de Volkskrant). Het probleem is dat de BGP-tabel de FIB-limiet van 512k in sommige oudere routers bereikte. Een flink aantal onbereikbaarsheids- en vertragingsproblemen werden aan het routerprobleem gekoppeld, maar het is niet duidelijk in hoeverre dat terecht is.

Wat is een FIB en waarom is die gelimiteerd tot 512k (524288) prefixen?

BGP-routers hebben (minimaal) drie verschillende tabellen waar IP-adresprefixen opgeslagen worden, tezamen met het “next hop” adres waar de pakketten naartoe moeten. (Een prefix is het gedeelte van een IP-adres dat alle adressen in een reeks gemeen hebben, dus bij de reeks 192.168.0.0 – 192.168.255.255 is de prefix 192.168.0.0/16, waarbij de 16 aangeeft dat de eerste 16 bits tot de prefix behoren.)

Die drie tabellen zijn: de BGP RIB, the hoofdroutingtabel / RIB en de FIB. De BGP Routing Information Base verzamelt alle informatie ontvangen over BGP die niet direct uitgefilterd wordt. Dus als je twee ISPs hebt, dan sturen beide alle prefixen van alle netwerken in de wereld die momenteel bereikbaar zijn. Dat wil zeggen dat je router twee exemplaren van iedere prefix heeft, één met een next-hopadres dat verwijst naar ISP A en één met een next hop die verwijst naar ISP B.

Voor iedere prefix bepaalt BGP dan welk pad beter is en stuurt de prefix en het next-hopadres dat naar A of B wijst naar de hoofdroutingtabel. De hoofdroutingtabel bevat ook niet-BGP routinginformatie. In grote netwerken kunnen interne routes en routes naar klanten in de duizenden of tienduizenden lopen.

Als laatste is er de Forwarding Information Base (FIB), die samengesteld wordt uit de informatie in de hoofdroutingtabel. De FIB wordt gebruikt om pakketten daadwerkelijk naar het juiste next-hopadres te versturen. Sommige routers gebruiken RAM om de FIB in op te slaan, andere gebruiken Ternary Content Addressable Memory. RAM kan aardig groot zijn tegenwoordig en er is normaal niet een vaste limiet aan hoeveel prefixen erin passen, dit hangt af van welke andere processen binnen de router ook geheugen gebruiken. Maar TCAMs zijn speciale geheugens met een klein beetje rekenkracht. Het komt erop neer dat je een prefix kan laten zien aan een TCAM en dan vertelt de TCAM op welk adres die prefix opgeslagen is-je hoeft niet stap voor stap het hele geheugen door te zoeken. Dit betekent dat TCAMs heel snel zijn, maar ze zijn ook duurder dan RAM en worden vrij heet. Zodoende is de grootte van een TCAM beperkt.

Niks nieuws onder de zon

Cisco 6500 en 7600 modulaire routers/switches hadden supervisormodules met een TCAM-limiet van 256k. Dus toen in 2008 de routingtabel groeide tot 256k moesten mensen snel upgraden. Als ze destijds nieuwe supervisormodules gekocht hebben die 512k aankunnen, dan hebben ze zes jaar nut van die nieuwe modules gehad. Vandaar ook Geoff Huston’s opmerking “Niks in BGP ziet eruit alsof het aan het smelten is”.

Omdat ieder netwerk een ander aantal interne prefixen heeft en er ook kleine verschillen zijn in de aantallen prefixen die verschillende ISPs via BGP aan hun klanten adverteren krijgen verschillende mensen op verschillende momenten last van dit probleem. Daarnaast worden TCAMs vaak in verschillende delen onderverdeeld (gepartitioneerd), bijvoorbeeld één deel voor de IPv4-routingtabel, één voor de IPv6-routingtabel, één voor MPLS, één om te filteren… In sommige gevallen kan het probleem op de lange baan geschoven worden door de TCAM anders te partitioneren.

Een andere oplossing is het uitfilteren van prefixen in BGP. Het probleem daarmee is dat je dan connectiviteit naar de betreffende prefixen kwijtraakt. Als je netwerk niet enorm is dan is dat op te lossen door een defaultroute naar je ISP / één van je ISPs in te stellen als veiligheidsnet. Wat ik lang geleden deed toen ik BGP uitvoerde op eigenlijk veel te kleine routers was simpelweg alle AS-paden langer dan vijf ASen uitfilteren van allebei onze ISPs. Als dan één ISP een kort pad heeft en de andere een lang pad werd het lange pad uitgefilterd en ging het verkeer via het korte pad, wat toch al de bedoeling was. Als beide een lang pad hadden dan werden beide gefilterd en ging het verkeer via de defaultroute. In dat geval was er weinig kans dat het een belangrijke bestemming was die door de defaultroute via een omweg trager werd.

Maar grote netwerken hebben niemand waarnaar ze een defaultroute kunnen laten wijzen. Dus die moeten recentere routers gebruiken, wat ze gewoonlijk ook doen. Het is echter niet ongehoord dat oudere apparatuur in een ver hoekje van het netwerk z’n laatste jaren slijt, dus ook grotere netwerken kunnen tot op zekere hoogte problemen hebben.

Mea culpa

Tijdens mijn BGP-cursussen waarschuw ik de cursisten altijd dat ze routers moeten kopen die groot genoeg zijn om de voorziene groei van de BGP-tabel bij te kunnen houden. Maar ik had duidelijker moeten zijn en op BGPexpert.com een waarschuwing moeten zetten. Cisco deed dit gelukkig wel: The Size of the Internet Global Routing Table and Its Potential Side Effects.

De toekomst

Geoff Huston verwacht dat de IPv4-routingtabel de 1 miljoen prefixen zal bereiken in 2019 en beveelt aan om routers te kopen die minstens 2 miljoen prefixen aankunnen. Helaas is het niet altijd duidelijk hoeveel prefixen een router aankan, vooral wanneer de TCAM gebruikt wordt voor meer dan alleen de IPv4 FIB. Zorg dat je hier goede informatie over hebt voordat je je geld uitgeeft. En hou het wekelijkse routing table report in de gaten zodat je op tijd actie kan ondernemen wanneer de BGP-tabel in de buurt van de limieten van je routers begint te komen.

Zie ook: