Border Gateway Protocol

**Border Gateway Protocol** (**BGP**) ir galvenais maršrutēšanas protokols internetā. BGP ir līdzīgs *distance vector* maršrutēšanas protokoliem, jo maršrutētājs uztur tiklu (prefiksu) tabulu un veic maršrutēšanas aprēķinus, pamatojoties uz informāciju, kas saņemta no citiem maršrutētājiem, un nosūta to tālāk. Taču pretēji citiem *distance vector* protokoliem, kas par distances mēru izmanto vienu skaitli, BGP izmanto visu autonomo sistēmu sarakstu *AS_PATH*, caur kurām paketei jātiek maršrutētai lai sasniegtu adresātu. Tā kā šis saraksts satur informāciju par paketes ceļu BGP pieņemts saukt par *path vector* maršrutēšanas protokolu.

Kopš 1994 gada internetā tiek lietota tikai BGP versija 4 (BGP-4). Galveinais jauninājums BGP-4 ir bezklases starpdomēnu maršrutēšanas (*CIDR*) atbalsts un maršrutu apkopošana (*route aggregation*) maršrutēšanas tabulu samazināšanai. Kopš 2006. gada janvāra BGP-4 aprakstīts , kas aizstāja sākotnējo .

BGP var tikt izmantots ne tikai internetā, bet arī lielos IP tīklos, lai veiktu maršrutēsanu starp tīkla daļām vai pieslēgumiem pie dažādiem interneta pakalpojumu sniedzējiem.

Komunikācijai starp maršrutētājiem BGP izmanto TCP protokolu. BGP izmanto TCP porta numuru 179.

## BGP darbība
### BGP neighbors
Atšķirībā no daudziem citiem maršrutēšanas protokoliem, kas citus maršrutētājus atrod automātiski ar apraides (*broadcast*) vai multiraides (*multicast*), BGP protokolā citi maršrutētāji ir jāapraksta konfigurācijā. Tā kā BGP izmanto TCP protokolu maršrutētājiem nav jāatrodas vienā tīkla segmentā. Divus maršrutētājus, kas izveidojuši BGP TCP savienojumu un apmainās ar maršrutēšanas informāciju sauc par ***BGP neighbors*** vai ***peers***. Pēc TCP savienojuma izveidošanas maršrutētāji apmainās ar dažādu BGP informāciju (AS numuri, protokola versija, maršrutētāja ID, taimeru lielumi u.c.). Kad šī informācija ir saskaņota un pieņemta maršrutētāji var apmainīties ar maršrutēšanas informāciju. BGP maršrutēšanas informācijas datus sauc par ***Network Layer Reachability Information*** (***NLRI***).

Ja BGP darbojas starp maršrutētājiem vienā autonomajā sistēmā to sauc par ***Interior Border Gateway Protocol*** (***IBGP***), ja dažādās — par ***Exterior Border Gateway Protocol*** (***EBGP***).

### IBGP
IBGP darbojas starp maršrutētājiem vienā autonomajā sistēmā. IBGP maršrutētājiem nav jābūt savstarpēji savienotiem, bet ir jābūt sasniedzamiem (jāvar izveidot TCP savienojums).

IBGP ļauj nodot BGP maršrutēšanas informāciju AS robežās bez nepieciešamības to redistribūtēt to uz IGP un atpakaļ.

IBGP nenodod maršrutēšanas informāciju, kas saņemta no IBGP maršrutētāja citiem IBGP maršrutētājiem. Dažreiz to sauc par BGP split horizon. Tāpēc IBGP maršrutētājiem jāveido savienojumi katram ar katru (*full mesh*).

### EBGP
EBGP darbojas starp maršrutētājiem dažādās autonomajās sistēmās. Starp dažādām AS parasti nelieto IGP, kas norādītu, kā sasniedzama otra maršrutētāja adrese, tāpēc EBGP maršrutētājiem jābūt tieši savienotiem vai arī jālieto statiskie maršruti (*static route*).

### NLRI un atribūti
NLRI satur informāciju par maršrutu CIDR prefiksu un **ceļa atribūtus** (*path attributes*). Atribūti satur dažādu informāciju par konkrēto maršrutu. Daži atribūti ir ***mandatory*** — tiem jābūt visos BGP NLRI.

Biežāk lietojamie atribūti ir:
* ***ORIGIN*** (mandatory) — maršruta izcelsme (EGP, IGP vai nezināma)
* ***AS_PATH*** (mandatory) — AS saraksts
* ***NEXT_HOP***' (mandatory) — nākamā lēkuma adrese, caur kuru sasniegt norādīto tīklu.
* ***MULTI_EXIT_DISC*** — MED ir līdzīga funkcija kā IGP metrikai.
* ***LOCAL_PREF*** — maršruta prioritāte (AS robežās)
* ***COMMUNITY*** — administratīvi maināms parametrs (atzīme), kas atvieglo maršrutu grupēšanu un apstrādi, piemēram, filtrēšanu. Tā vērtības un vērtību nozīmi nosaka ar konfigurāciju. Tomēr ir dažas rezervētas COMMUNITY vērtības ko automātiski apstrādā visi BGP maršrutētāji:
** ***INTERNET*** — šī *COMMUNITY* ir visiem maršrutiem
** ***NO_EXPORT*** — maršruti ar šo *COMMUNITY* netiek ziņoti ārpus AS. Izņēmums ir AS ***konfederācijas*** (*confederation*) robežās
** ***NO_ADVERTISE*** — maršruti ar šo *COMMUNITY* netiek ziņoti nevienam citam BGP maršrutētājam
** ***LOCAL_AS*** — līdzīgi *kā NO_EXPORT*, bet neziņo arī citām AS konfederācijas robežās

### Maršrutu izvēle
Maršrutētāji var saņemt NLRI par vienu CIDR prefiksu no dažādiem citiem maršrutētājiem. No tiem tiek izvēlēts viens, labākais maršruts. Labāko maršrutu izvēli BGP veic pēc dažādiem kritērijiem noteiktā secībā. Ja svarīgākais kritērijs sakrīt vairākiem pieejamajiem maršrutiem, tiek salīdzināts nākamais. Kritēriju secība BGP ir sekojoša:
# Izvēlas tikai maršrutus, kuru nākamā lēkuma adreses ir sasniedzamas;
# Izvēlas maršrutu ar lielāko *LOCAL_PREF* vērtību (Cisco lieto papildus kritēriju *WEIGHT*, kas nav BGP atribūts, bet tiek noteikts administratīvi. Tas tiek salīdzināts pirms LOCAL_PREF. Priekšroka ir maršrutiem ar lielāko *WEIGHT* vērtību.);
# Izvēlas maršrutu, ko noteicis šis maršrutētājs;
# Izvēlas maršrutu, ar īsāko *AS_PATH*.
# Izvēlas maršrutu ar mazāko *ORIGIN* vērtību (IGP &lt; EGP &lt; nezināms);
# Izvēlas maršrutu ar mazāko *MED* vērtību (Ja *MED* nav norādīts tas tiek uzskatīts par 0);
# Izvēlas EBGP maršrutu attiecība pret IBGP;
# Izvēlas maršrutu caur tuvāko IGP maršrutētāju;
# Izvēlas vecāko EBGP maršrutu;
# Izvēlas maršrutu caur maršrutētāju ar mazāko maršrutētāja ID;

## IBGP mērogojamība
Noteikums, ka IPGP savienojumi ir jāveido *full mesh*, ievērojami ierobežo IBGP mērogojamību. Katram maršrutētājam ir jākonfigurē n — 1 BGP savienojums un kopējais savienojumu skaita ir n * (n — 1) / 2, kur n ir maršrutētāju skaits autonomajā sistēmā. Piemēram 10 maršrutētāju gadījumā kopējais savienojumu skaits ir 45. Liels savienojumu skaits patērē ievērojamus maršrutētāja resursus un apgrūtina administrēšanu. Lai uzlabotu IBGP mērogojamību lieto divas tehnoloģijas — ***route reflectors*** un ***konfederācijas***.

### Route reflectors
*Route reflector* izmantošana atslēdz BGP *split horizon* funkcionalitāti. Maršrutētājs, kas nokonfigurēta kā *route reflector* izplata IBGP maršrutētājiem, maršrutēšanas informāciju, kas saņemta no cita IBGP. Rezultātā katram IBGP maršrutētājam jākonfigurē savienojumi tikai ar *route reflector* maršrutētājiem.

### Konfederācijas
Konfederācijas tiek izmantotas lielos tīklos. Lietojot konfederācijas, AS tiek sadalīta vairākas mazākās AS, visbiežāk ar privātiem AS numuriem. Katrā no šīm AS tiek konfigurēts IBGP. EBGP savienojumos ārpus konfederācijas visas konfederācijas autonomās sistēmas tik prezentētas kā viena reālā AS.

## Skatīt arī
* Intermediate System to Intermediate System (IS-IS)
* Open Shortest Path First (OSPF)
* Shortest Path Bridging (SPB)
* Routing Information Protocol (RIP)

## Ārējās saites
*  — A Border Gateway Protocol 4 (BGP-4)
* Data Network Resource — BGP