BGP () 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).
Funcționare 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).
eBGP și iBGP Când BGP este rulat în interiorul unui sistem autonom, este folosit termenul iBGP (). Când este rulat între AS-uri, este numit eBGP (). Î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 () 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ă.
Tipuri de mesaje BGP Protocolul BGP folosește patru tipuri de mesaje pentru a comunica între rutereRughiniș, Proiectarea Rețelelor de Calculatoare: Open (Deschidere): mesajele inițiale, folosite pentru stabilirea conexiunii între rutere; dacă un ruter primește un mesaj Open și este de acord cu conținutul, trebuie să răspundă cu un mesaj KeepaliveThe TCP/IP Guide - BGP Connection Establishment: Open Messages. Keepalive (Menținere): mesaje de 19 octeți trimise periodic (implicit la 60 de secunde - o treime din timpul de hold-down) pentru menținerea conexiunii deschise; aceste mesaje sunt trimise fără confirmare, iar dacă intervalul de trimitere este setat la 0, nu se trimit Update (Actualizare): conțin căi către diversele rețele (accesibile, invalide sau retrase), împreună cu atributele corespunzătoare; inițial, routerele BGP își trimit reciproc întreaga tabelă de rutare; după actualizarea inițială, se transmit actualizări incrementale, pe măsură ce topologia rețelei se schimbă. Notification (Notificare): raportează eventualele erori apărute în comunicație
Structura antetului mesajului BGP 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 Marcaj - inclus din motive de compatibilitate, toți biții trebuie sa fie setați ('1') Lungime - lungimea totala a mesajului, exprimata în octeți, inclusiv partea de antet Tip - tipul mesajului BGP; sunt valide următoarele valori: 1 - Deschidere (Open) 2 - Actualizare (Update) 3 - Notificare (Notification) 4 - Menținere (KeepAlive) 5 - Reîmprospătare (Refresh)
Actualizări 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 ( - 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).
Extensii opționale În timpul trimiterii mesajelor OPEN, routerele BGP pot negociaRFC 2842 - Publicarea capabilităților în BGP-4, R. Chandra & J. Scudder, mai 2000 anumite capabilități opționale, printre care mai multe tipuri de corectare a erorilor și extensii multiprotocol. Dacă extensiile multiprotocol ale BGP RFC 2858 - Extensii multiprotocol pentru BGP-4, T. Bates et al., iunie 2000 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 virtualeRFC 2547 - VPNuri BGP/MPLS., E. Rosen și Y. Rekhter, aprilie 2004.
Automat finit right|thumb|400px|Automatul finit al BGP
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.
Starea 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: Inițializează resursele procesului BGP; Încearcă să stabilească o conexiune TCP cu vecinul BGP; Așteaptă o conexiune TCP de la vecin. Dacă apare o eroare în oricare stare a mașinii, sesiunea BGP este încheiată și mașina de stare revine în starea Inactiv.
Unele dintre motivele pentru care un ruter nu trece de această stare, sunt: Portul TCP 179 nu e deschis. Nu e deschis niciun port TCP mai mare decât 1023. Adresa vecinului este configurată incorect pe unul din routere. Numărul AS este configurat incorect pe unul din routere.
Starea Conectare În acestă stare, ruterul efectuează următoarele operații: Așteaptă stabilirea conexiunii TCP. Dacă aceasta se termină cu succes, BGP trece rapid la starea OpenSent. Trimite un mesaj OPEN vecinului. Dacă apare o eroare, ruterul resetează un timer și trece în starea Activ până la expirare. Unele din motivele care pot duce la acest comportament sunt: Portul TCP 179 nu este deschis. Nu e deschis niciun port TCP mai mare decât 1023. Adresa vecinului e configurată incorect pe unul din routere. Numărul de AS este configurat incorect pe unul din routere.
Starea Activ Î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: Portul TCP 179 nu este deschis. Nu e deschis niciun port TCP mai mare decât 1023. Eroare în configurarea BGP. Congestia rețelei. Interfață de rețea cu probleme.
Starea OpenSent La intrarea în această stare, ruterul așteaptă un mesaj OPEN de la vecinul său. După ce mesajul a fost primit, ruterul îl verifică. Dacă există o nepotrivire între valorile câmpurilor mesajului OPEN de pe cele 2 routere (e.g. altă versiune de BGP, nepotrivirea parolei MD5, un alt număr de AS decât cel așteptat), ruterul receptor va trimite o notificare în care va explica de ce a apărut eroarea. Dacă nu sunt erori, este trimis un mesaj KEEPALIVE.
Starea OpenConfirm Ruterul așteaptă un mesaj KEEPALIVE de la vecin. Dacă mesajul este primit, BGP trece în starea următoare (Stabilit). Dacă nu este primit mesajul KEEPALIVE, ruterul se întoarce în starea Inactiv.
Starea Stabilit Î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.
Conectivitate și învățarea rutelor Î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.
Tabela de rutare 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 (). 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: pentru eBGP, rutele sunt puse automat în tabela de rutare (dacă nu este direct conectată) pentru iBGP, ruta este pusă în tabela de rutare dacă sunt îndeplinite mai multe condiții: există o înregistrare în tabela de rutare către următorul hop din calea BGP ruta este aflata și prin intermediul unui IGP sau sincronizarea este dezactivată
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.