# Border Gateway Protocol

#### Routing Protocols

The main job is to distribute the data to build forwarding tables

- These are **intra-domain routing protocols**
  - Or **Interior gateway protocols**
  - When the source and destination are **inside** the **same network**

It is important to distinguish between local and global protocols

- Interior vs Exterior Gateway Protocol (IGP vs EGP)

##### BGPv4

The internet inter-domain routing protocol

- Derives from GGP & EGP
- Deals in IP prefixes and **autonomous systems**
  - autonomous systems are purely administrative
  - Purpose is to enable *policy* to be applied
  - Only prefixes matter in the data-plane
- Internet policy domains
  - Logical construct only
  - No meaning outside BGP
  - Do not map simply onto ISPs or networks
- Currently ~493,000 prefixes & ~46,000 ASs
  - Because we have less ASs, the routing is easily -> less complex
  - Reduces complexity
  - Speeds up performance

BGP uses TCP as transport

- `OPEN`, `UPDATE`, `KEEPALIVE`, `NOTIFICATION`

Sessions between peers have:

- Simple capability negotiation
- Manage simultaneous `OPEN` connections
- Lose everything on session failure

#### Sessions and Routing Information Base (RIBs)

A BGP peer typically has many sessions

- Logically, for each peer, it receives the information about routing from peers, this is sorted into `Adj-RIB-in` table.
- After processing, it produces a `Adj-RIB-out` table which it sends to other peers
  - Advertisements received and to be sent
- Generates a local RIB table from `Adj-RIB-in`
  - Routes to use and potentially distribute
  - Resolved into per-port forwarding tables
- Generate `Adj-RIB-out` from `Loc-RIB` and policy

#### Update messages

- Incremental - indicate *changes* to state
  - These updates could be:
  - Withdrawn routes
  - Path attributes, common to all advertised routes
  - Advertised routes, known as NLRI
- There are ~27 path attributes
  - Only ~12 are in common use
  - Communicate information about prefixes
  - Used to apply policy in BGP *decision process*

##### Path Attributes

Mandatory - every AS has to inform the other ASs about these 3 attributes:

- Next hop
- AS Path
- Origin

Discretionary

- Local preferences
  - Allows prioritisation of ASs 

Optional & transitive

- Aggregator
- Community
- Extended Communities

Optional & non-transitive

- Multi-exit discriminator
- Originator ID

### Path Vectors

**Distance Vector** - prefer lowest cost path (not always)

**Path Vector**

- How do we know if an AS has seen this advert before
- Store the list of ASs in the packet
  - This is called the `AS_PATH`
- This way loops can be broken
  - If our ASN appears in a received `AS_PATH`, drop the advert

##### Decision Process

Drop prefix if:

- `NEXT_HOP` is unreachable via local routing table
- Local AS appears in `AS_PATH` (packet in a loop)

Then (commonly) apply following preference:

1. Higher `weight` (local to this router)
2. Highest `LOCAL_PREF`
3. Shortest `AS_PATH`
4. Lowest `ORIGIN`
5. Lowest `MED`
6. `EGP` to `IGP` (hot potato)
7. Shortest internal path
8. Prefer oldest route
   - Oldest routes are often most stable
9. Lowest interface IP address

### Consistency

Learn external routes on `EBGP` sessions

- `EBGP` defined as peers having different ASNs
- Must ensure every router knows all external routes
- Redistribute external routes inside the network
  - Via `IGP` - only in small networks
  - via `IBGP` - gives full control over route distribution

###### Scaling

Can distribute `IBGP` routes on `IBGP` sessions

- Have to maintain $N\cdot \frac{(N-1)}{2}$ `IBGP` sessions
  - Each carrying up to 490k routes x2 tables
- Two standard solutions
  1. **Route Reflectors**
     - Super nodes re-advertising `IBGP` routes
     - Allows for hierarchy
  2. **AS Confederations**
     - split AS up into mini-ASs

###### Failures

- Handling link failures
  - Bind to loopback
    - If it cant talk to other nodes, will only support communication internally
  - Flap damping
    - A warning message saying don't send traffic to me
    - This can make things worse if this message is delayed
- Process failures
  - Out of memory error due to too many routes

##### Network Inter-connection

- Networks interconnect via `EBGP` sessions
  - POPs - points of presence or IX internet exchanges
- Multi-homing
  - This is all logical
  - http://0x0.st/ooCs.png
