From Wikipedia, the free encyclopedia
BGP (engleză Border Gateway Protocol) este protocolul de rutare folosit în nucleul Internetului. El menține o tabelă cu rețele IP (sau "prefixe") care arată calea folosită pentru a ajunge la rețeaua respectivă prin diferitele sisteme autonome (AS). BGP este considerat din acest motiv un protocol de rutare vector-cale (spre deosebire de protocoalele vector-distanță, care nu păstrează toată calea). BGP nu folosește aceleași metrici ca protocoalele de rutare folosite în interiorul AS-urilor, ci ia decizii bazându-se pe cale și pe politicile de rutare ale sistemului autonom din care face parte.
Protocolul a fost creat pentru a înlocui un alt protocol de rutare (EGP) și pentru a permite rutarea descentralizată în Internet, făcând inutilă rețeaua de nucleu a acestuia, NSFNet. Din 1994, versiunea patru a protocolului este folosită în Internet, toate versiunile anterioare fiind considerate depășite. Cel mai important progres al versiunii 4 a fost suportul pentru CIDR și folosirea agregării rutelor pentru a reduce dimensiunea tabelelor de rutare. Din ianuarie 2006, BGPv4 este standardizat prin RFC 4271, care a trecut prin peste 20 de versiuni preliminare, bazate pe versiunea de BGP din RFC 1771. RFC 4271 a corectat unele erori, a clarificat ambiguitățile și a apropiat standardul de practicile curente din industrie.
Cei mai mulți utilizatori de Internet nu folosesc în mod direct acest protocol. Totuși, deoarece majoritatea Internet Service Providerilor îl folosesc pentru a stabili rute între rețelele respective, BGP este unul din cele mai importante protocoale de pe Internet. Importanța sa este comparabilă cu a protocolului SS7 pentru stabilirea apelurilor telefonice între operatorii PSTN. Rețelele IP de mari dimensiuni folosesc BGP inclusiv în interiorul rețelei, de exemplu pentru a lega mai multe subrețele suficient de mari pentru ca protocolul de rutare OSPF să-și atingă limitele. Alt caz de utilizare îl reprezintă conectarea mai multor puncte de prezență ale unui singur furnizor de acces Internet (acest caz este descris în RFC 1998).
Border Gateway Protocol este un protocol de rutare unic, deoarece, spre deosebire de celelalte protocoale de rutare, stabilește și menține conexiuni între routerele vecine folosind protocolul TCP. În cazul routerelor aflate în AS-uri diferite, o conexiune BGP poate fi stabilită doar dacă routerele sunt direct conectate. Legătura se realizează pe portul TCP 179, fiind menținută prin mesaje periodice de 19 octeți (intervalul implicit este de 60 de secunde).
Când BGP este rulat în interiorul unui sistem autonom, este folosit termenul iBGP (engleză Internal Border Gateway Protocol). Când este rulat între AS-uri, este numit eBGP (engleză External Border Gateway Protocol). În majoritatea ruterelor actuale, distanța administrativă (DA) pentru iBGP este mai mare (deci prioritatea este mai mică) decât cea pentru alte protocoale de rutare intra-AS, care, la rândul lor, au D.A. mai mare decât eBGP.
Vecinii eBGP trebuie sa fie direct conectați pentru a fi realizată conexiunea BGP, dar există și excepții. De exemplu, implementările Cisco au opțiunea "multihop", care permite realizarea de conexiuni eBGP către routere nelegate direct. Această limitare nu există pentru iBGP. Pentru a asigura rutarea între toate nodurile din rețea care rulează BGP poate fi folosit un protocol de rutare IGP (OSPF, RIP etc.).
În mod normal, un ruter iBGP menține sesiuni cu toate celelalte routere iBGP din AS, formând o topologie logica full-mesh (fiecare cu fiecare). Acest lucru este necesar deoarece, pentru a preveni formarea de cicluri de rutare, iBGP nu transmite rute învățate prin iBGP altor vecini care rulează iBGP. Dacă se dorește ca ruterele iBGP să schimbe rute BGP între ele, este necesară configurarea de reflectori de rute (engleză route reflectors) sau confederații.
Când un ruter află despre o ruta nouă prin protocolul eBGP, va seta adresa următorului hop la adresa ruterului vecin eBGP de la care a aflat ruta respectivă. Când se primesc rute din interiorul AS-ului, adresa următorului hop rămâne neschimbată.
Protocolul BGP folosește patru tipuri de mesaje pentru a comunica între rutere[1]:
Antetul mesajului BGPv4 are următoarea forma:
Biți/Decalaj | 0-7 | 8-15 | 16-23 | 24-31 |
---|---|---|---|---|
0 | Marcaj | |||
32 | ||||
64 | ||||
96 | ||||
128 | Lungime | Tip |
Din momentul în care sesiunea BGP funcționează, routerele schimbă mesaje de tip UPDATE cu privire la destinațiile către care expeditorul oferă conectivitate. În protocolul BGP, descrierea unei rute este numită Informație de cale de nivel rețea (engleză Network Layer Reachability Information - NLRI). NLRI include mai multe atribute: prefixul destinație, lungimea prefixului, calea prin sistemele autonome către destinație (AS_Path) și următorul hop, precum și multe alte informații care afectează felul cum tratează destinatarul rețeaua respectivă.
Ruterele BGP anunță apoi, prin actualizări ulterioare, noile rețele către care oferă conectivitate, dar și "retragerile" (rețelele care nu mai sunt accesibile).
În timpul trimiterii mesajelor OPEN, routerele BGP pot negocia[3] anumite capabilități opționale, printre care mai multe tipuri de corectare a erorilor și extensii multiprotocol. Dacă extensiile multiprotocol ale BGP [4] sunt negociate în acest moment, vorbitorul poate prefixa NRLI-ul pe care îl publică cu un prefix pentru familia de adrese (IPv4, IPv6, VPN-uri IPv4 și IPv6, precum și multicast).
Din ce în ce mai mult, BGP este utilizat ca protocol de rutare pentru rute care nu fac parte din Internet, ca de exemplu rețele private virtuale[5].
Pentru a decide felul în care colaborează cu alte routere, BGP folosește un automat finit simplu, cu 6 stări: Inactiv, Conectare, Activ, Deschidere trimisă (OpenSent), Deschidere confirmata (OpenConfirm) și Stabilit. Pentru fiecare sesiune, implementarea păstrează o variabilă de stare. Standardul definește mesajele care trebuie trimise pentru a muta un router dintr-o stare în alta. Prima stare este Inactiv.
În acest mod, BGP inițializează toate resursele, refuză toate încercările de conexiune BGP și inițiază o conexiune TCP către ruterul vecin:
Unele dintre motivele pentru care un ruter nu trece de această stare, sunt:
În acestă stare, ruterul efectuează următoarele operații:
În starea Activ se ajunge dacă eșuează tentativa de conectare la ruterul vecin; în această stare, ruterul resetează timerul de conectare și se întoarce în starea Conectare. Dacă și a doua tentativă eșuează, se trece înapoi în stare Inactiv. Dacă tot nu se poate stabili conexiunea, ruterul va pendula între stările activă și inactivă. Unele din motivele acestui comportament sunt:
În această stare, procesul BGP poate primi și trimite mesaje de tip KEEPALIVE, UPDATE și NOTIFICATION. Mesajele de tip UPDATE sunt trimise pentru a schimba informația trimisă vecinului despre o anumită rută. Dacă apare o eroare într-un mesaj UPDATE primit, ruterul trimite înapoi un mesaj NOTIFICATION, închide conexiunea și trece în starea Inactiv.
În cea mai simplă metodă de configurare, toate ruterele dintr-un AS care rulează BGP sunt conectate fiecare cu fiecare. Acest lucru provoacă grave probleme de scalabilitate, deoarece numărul de conexiuni crește cu pătratul numărului de rutere conectate. Pentru a evita această problemă au fost oferite două soluții: reflectorii de rute (RFC 4456) și confederațiile (RFC 5065). Dacă nu este precizat altfel, în această secțiune se discută situația conectării fiecare cu fiecare.
Implementarea de BGP de pe routerele Cisco, dar nu numai, păstrează o tabelă de căi BGP separată de tabela de rutare și numită Loc-RIB (engleză Local Routing Information Base). Unele implementări păstrează și tabele per vecin, conținând NLRI-urile trimise/primite de la acel vecin. Structura internă a acestor tabele nu este vizibilă vecinilor BGP, ci doar pe ruterul local.
În tabela de rutare a ruterului sunt ținute doar rutele optime către o destinație. În schimb, tabela BGP (Loc-RIB) va conține toate rutele primite prin BGP. Trecerea unei rute din tabela BGP în tabela de rutare se face astfel:
Un anumit ruter BGP poate accepta căi BGP de la mai mulți vecini și poate trimite actualizări acelorași vecini sau altora.
O greșeală frecventă în ceea ce privește BGP este să se spună că "BGP transmite politici". De fapt, BGP transmite doar informații pe care procesele BGP le aplică unor reguli pentru a lua decizii de rutare. Unele din aceste informații sunt destinate explicit folosirii în decizia de rutare: comunitățile și multi-exit discriminators (MED).
Standardul specifică mai mulți factori de selecție a rutelor decât pentru orice alt protocol de rutare. Primul factor este că next-hopul este accesibil (există în tabela de rutare).
Apoi, pentru fiecare vecin, procesul BGP aplică diferite criterii (standardizate sau specifice implementării) pentru a decide care rute vor ajunge în Adj-RIB-In. Doar o rută către fiecare destinație va ajunge în tabelă, indiferent de câte sunt trimise de vecin. De asemenea, procesul va șterge din Adj-RIB-In toate rutele retrase de vecin.
Când tabela Adj-RIB-In se schimbă, procesul analizează noile rute pentru a vedea dacă sunt mai bune decât cele aflate deja în Loc-RIB și le înlocuiește dacă este cazul. Dacă o rută este retrasă de vecin și nu există o altă rută către destinație, ea este ștearsă și din Loc-RIB și din tabela de rutare (cu excepția cazului în care un alt protocol de rutare are și el acestă rută).
După ce a verificat că vecinul este accesibil, procesul BGP ia decizia de rutare conform următorului algoritm[1]:
Un sistem autonom cu iBGP (internal BGP) trebuie să aibă toate routerele iBGP conectate fiecare cu fiecare. Această configurație necesită ca fiecare ruter să mențină conexiuni cu toate celelalte routere, ceea ce poate cauza o degradare a performanțelor în cazul rețelelor mari.
Reflectorii[6] și confederațiile pot reduce numărul de conexiuni iBGP și automat încărcarea. În plus, confederațiile pot fi folosite la implementarea unei politici mai amănunțite.
Reflectorii reduc numărul de conexiuni necesare într-un AS. Este suficient ca un singur ruter să aibă conexiuni cu toate celelalte routere (să fie făcut reflector). Celelalte routere din acel sistem autonom vor fi apoi configurate să se conecteze la reflector.
Confederațiile sunt seturi de sisteme autonome. În practică[7], doar unul din numerele AS va fi vizibil din Internet. Confederațiile sunt folosite în cadrul rețelelor foarte mari, în care un număr de AS mai mare este configurat pentru a ascunde alte numere de AS mai mici. Confederațiile pot fi folosite împreună cu reflectorii, fiecare din ele fiind utile în anumite situații.
Totuși, aceste opțiuni pot introduce la rândul lor anumite probleme, printre care:
Una din cele mai mari probleme întâmpinate de BGP, dar și de întreaga infrastructură Internet, provine de la creșterea rapidă a tabelei globale de rutare (care conține toate rutele din Internet). Pe măsură ce cerințele de memorie și de putere de procesare cresc, ruterele mai vechi nu mai fac față, utilitatea lor scăzând considerabil. Mult mai important, căutarea într-o tabelă de mari dimensiuni durează mai mult și provoacă instabilitate în cazul schimbărilor importante de topologie.
Până la sfârșitul anului 2001, creșterea tabelei de rutare era exponențială, ceea ce crea amenințarea unor probleme grave de conexiune. Pentru a evita acest lucru s-au luat o serie de măsuri între ISP-uri, printre care utilizarea CIDR și agregarea rutelor. Acest lucru a provocat o creștere liniară până în 2004, când creșterea a devenit din nou exponențială datorită cererii de conexiuni redundante din partea rețelelor de mici dimensiuni. În ianuarie 2009, tabela de rutare globală avea aproximativ 300.000 intrări [10].
Agregarea rutelor este un procedeu des folosit pentru a reduce dimensiunea tabelelor de rutare. Să spunem că sistemul autonom AS1 are spațiul de adrese 172.16.0.0/16, care ar ocupa o intrare în tabela de rutare, dar datorită cerințelor clienților, dorește să anunțe și trei rute specifice: 172.16.0.0/18, 172.16.64.0/18 și 172.16.128.0/18. Rețeaua 172.16.192.0/18 nu e utilizată, așa că AS1 n-o anunță. În total, AS1 anunță deci 4 rute.
AS2 va vedea cele 4 rute de la AS1 și depinde doar de implementarea sa dacă va prelua toate rutele sau doar cea mai mare (172.16.0.0/16). Dacă AS2 vrea să trimită date către prefixul 172.16.192.0/18, le va trimite către ruterele din AS1 pe ruta generală 172.16.0.0/16, iar ruterul BGP din AS1 va decide ce face cu ele (dacă trimite sau nu un mesaj prin care să anunțe că nu există destinația respectivă).
Dacă AS1 renunță la ruta 172.16.0.0/16, vor mai rămâne 3 rute anunțate. AS2 va vedea cele trei rute și poate să le păstreze pe toate sau să agrege 172.16.0.0/18 și 172.16.64.0/18 în 172.16.0.0/17, reducând numărul de rute la două. În acest caz, ruta 172.16.192.0/18 nu se află în tabela de rutare și orice tentativă de a trimite date către această rețea, va eșua încă din rețeaua AS2.
Un alt factor care cauzează mărirea dimensiunii tabelei de rutare este echilibrarea încărcării pentru rețele cu mai multe legături externe. Dacă un ISP își publică rețeaua către toți vecinii BGP, una sau mai multe dintre legături pot fi congestionate, pe când celelalte sunt sub-utilizate. Acest lucru se întâmplă în cazul în care toți vecinii consideră acele legături ca optime. Ca și celelalte protocoale de rutare, BGP nu detectează congestia.
Pentru a evita această problemă, administratorii rețelelor respective împart blocul de adrese pe care îl administrează în sub-blocuri și publică pe fiecare legătură BGP un alt bloc de adrese. Acest lucru duce la mărirea numărului de intrări din tabelele BGP.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.