91 lines
3.5 KiB
HTML
91 lines
3.5 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<link rel="stylesheet" href="../../style.css" type="text/css">
|
||
|
<html>
|
||
|
|
||
|
<body>
|
||
|
<div class="around">
|
||
|
<div class="content">
|
||
|
<pre style="display: inline;">
|
||
|
|
||
|
|
||
|
TODO:
|
||
|
eBGP/iBGP session
|
||
|
Graphs
|
||
|
|
||
|
/**********************************************/
|
||
|
/* A no-bullshit guide to a bullshit protocol */
|
||
|
/**********************************************/
|
||
|
We can think of the Internet as a network of networks which are all connected in some way. We will refer to
|
||
|
these networks as Autonomous Systems(AS) in this article.
|
||
|
|
||
|
Now, how do we connect these AS's in a sane way? This is where BGP comes in. BGP, which stands for `Border
|
||
|
Gateway Protocol`, enables different AS's to exchange information with each other, e.g. communicating with each
|
||
|
other.
|
||
|
|
||
|
There are three main challenges BGP has to solve:
|
||
|
- Scalability: The Internet is BIG. BGP needs to scale well to be feasible in a large scale.
|
||
|
- Privacy: Networks don't want to divulge internal topologies (topology = how a network is structured)
|
||
|
- Policy enforcement: The Networks themselves need to have control over where to send and recieve traffic.
|
||
|
|
||
|
Other protocols, like Link-Sate routing, do not solve these challenges.
|
||
|
|
||
|
BGP's key concept, which it revolves about, is called *path-vector routing*, where it adertises the entire
|
||
|
AS-level path.
|
||
|
Now, what is an AS-level path? We'll get to that in a minute.
|
||
|
|
||
|
Before that, why do we need even BGP? The problem is that sending data over the internet costs money. If we want
|
||
|
to minimize the costs of sending data, we need to find routes which cost as little as possible. This is also why
|
||
|
BGP is a "follow the money" protocol. Different ASes only connect with each other if they can save money that
|
||
|
way.
|
||
|
|
||
|
There are two policies we can use to define this routing:
|
||
|
- Selection: Which path to use (only relevant for outbound traffic)
|
||
|
- Export: Which path to advertise (only relevant for inbount traffic)
|
||
|
|
||
|
TODO: add graphs here
|
||
|
|
||
|
===============================================
|
||
|
eBGP and iBGP
|
||
|
===============================================
|
||
|
|
||
|
BGP comes in two flavors: eBGP and iBGP.
|
||
|
The e/i stands for external/internal
|
||
|
|
||
|
External BGP sessions connect border routers in different ASes. These are therefore use to learn routes to
|
||
|
external destinatons
|
||
|
|
||
|
TODO: add graph
|
||
|
|
||
|
Internal BGP sessions connect the routers in the same AS. These are used to split up externally-learned routes
|
||
|
internally. These are tehn announces exernally(to other ASes) again, using eBGP sessions.
|
||
|
|
||
|
BGP itself is a pretty simple protocol composed of four basic messages:
|
||
|
- open: establish a BGP session (using TCP)
|
||
|
- notification: report unusual conditions
|
||
|
- update: inform neighbor of a new best route
|
||
|
- can be a change or a removal of a best route
|
||
|
- keepalive: inform neighbor that connection is alive
|
||
|
|
||
|
update messages carry an IP prefix together with a set of attributes:
|
||
|
/*********************/
|
||
|
/* IP prefix */
|
||
|
/*********************/
|
||
|
/* Attributes */
|
||
|
/* */
|
||
|
/* */
|
||
|
/* */
|
||
|
/* */
|
||
|
/*********************/
|
||
|
|
||
|
There are four types of different attributes:
|
||
|
- NEXT-HOP
|
||
|
- AS-PATH
|
||
|
- LOCAL-PREF
|
||
|
- MED
|
||
|
</pre>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
</body>
|
||
|
|
||
|
</html>
|