---
title: "BGP w pięć minut"
summary: "Sesje, prefiksy i atrybuty - minimum, żeby zrozumieć resztę."
tags: [networking, bgp]
---

# BGP w pięć minut

BGP to protokół routingu, którego największą różnicą w stosunku do OSPF czy EIGRP jest możliwość okonfigurowania wszystkiego:
do kogo i co rozgłaszamy, z jakimi parametrami, od kogo się czego uczymy.
BGP nie został stworzony z myślą - mam sieć w firmie: 20 routerów i chcę, żeby ze sobą gadały i żeby wszystko śmigało,
tylko priorytetem jest to, że jeżeli ja się dowiem o 20 [[prefiks|prefiksach]], to somsiadowi powiem o tylko 5, żeby miał gorzej.

## Jakie informacje wymieniają między sobą speakery BGP?

BGP to protokół routingu, w którym urządzenia mówią sobie **jak trafić do jakiegoś adresu IP**.
Co jest bardzo istotne, ta informacja o dostępności *sieci ABC* nie musi oznaczać "jeżeli do mnie wyślesz pakiet, to ja go prześlę do *sieci ABC*".
BGP pozwala przesłać informację "sieć ABC jest dostępna przez urządzenie h1" (a ja jestem np. urządzeniem h2).
Co z tego wynika, BGP może być uruchomione nie tylko na routerze i będzie to równie przydatny [[speaker-bgp|speaker BGP]].

Przykład: `h2` to speaker BGP, który przekazuje `h3` informację o trasie przez `h1`.

```text
BGP:
  h2 (speaker) ---- PREFIX: 10.0.0.0/27 ----> h3 (router)
                   next-hop: 192.168.0.13

Pakiet do 10.0.0.12 idzie do h1, mimo że trasę poznaliśmy od h2.
  h3 (router) ----> h1 (router) ----> 10.0.0.0/27
                   192.168.0.13
```

`h3` musi umieć dotrzeć do next-hopa `192.168.0.13`. Pakiety do prefiksu
`10.0.0.0/27` przechodzą przez `h1`, a `h2` zajmuje się tylko wymianą informacji o trasach.

### Przykładowe ogłoszenie BGP (advertisement)

| nazwa | przykład | co to |
|---|---|---|
| `PREFIX` | `10.0.0.0/27` | docelowa sieć |
| `next-hop` | `192.168.0.13` | dokąd wysłać pakiet |
| `as-path` | `6500 6509 6531` | przy rozgłaszaniu do innego AS zwykle dodajemy swój numer |
| `communities` | `234:69` | labelka, tag - zwał jak zwał |
| `local-pref` | `110` | którą ścieżkę wolimy wewnątrz AS |
| `med` | `90` | sugestia dla sąsiada, którym wejściem wchodzić |

`local-pref` wymieniamy wewnątrz AS, przez iBGP. Do zwykłego sąsiada eBGP go nie wysyłamy.

Źródło: [RFC 4271, sekcje 5.1.2 i 5.1.5](https://www.rfc-editor.org/rfc/rfc4271.html#section-5.1.5).

## Sesje

Sesja BGP to zwykłe połączenie TCP na porcie 179 między dwoma speakerami (peerami - tego słowa się używa w kontekście właśnie sesji).
Po nawiązaniu wymieniają się prefiksami, które chcą rozgłaszać, a potem aktualizują trasy przy zmianach.
Do utrzymania sesji służą też krótkie wiadomości KEEPALIVE.

- **eBGP** - między różnymi systemami autonomicznymi (AS) - na tym się skupimy, tego używamy w [[datacenter|datacenterach]].
- **iBGP** - wewnątrz jednego AS.

Implementacje BGP, z którymi pracujemy: [[frr-i-gobgp]].

Powiązane: [[route-server]], [[overlay]], [[rib-vs-fib]]
