summaryrefslogtreecommitdiff
path: root/doc/slt2001
diff options
context:
space:
mode:
Diffstat (limited to 'doc/slt2001')
-rw-r--r--doc/slt2001/Makefile10
-rw-r--r--doc/slt2001/slt.tex275
2 files changed, 285 insertions, 0 deletions
diff --git a/doc/slt2001/Makefile b/doc/slt2001/Makefile
new file mode 100644
index 00000000..5979e1a0
--- /dev/null
+++ b/doc/slt2001/Makefile
@@ -0,0 +1,10 @@
+all: slt.dvi
+
+slt.dvi: slt.tex
+ csplain slt.tex
+
+slt.ps: slt.dvi
+ dvips -o slt.ps -D600 -ta4 slt.dvi
+
+clean:
+ rm -f *~ *.log *.tfm *.*pk *.*gf *.ps *.dvi
diff --git a/doc/slt2001/slt.tex b/doc/slt2001/slt.tex
new file mode 100644
index 00000000..fb948586
--- /dev/null
+++ b/doc/slt2001/slt.tex
@@ -0,0 +1,275 @@
+\magnification=\magstep1
+\input epsf.tex
+\input mjmac.tex
+
+\language=\czech
+\chyph
+
+\hsize=160truemm % A4 with 25mm margins
+\vsize=247truemm
+\parindent=2em
+\nopagenumbers
+
+\def\hdr#1{\medskip\leftline{\bf #1}\smallskip}
+\def\\{\hfil\break}
+\def\BIRD{{\sc Bird}}
+
+\def\inititemize{\vskip 1pt\begingroup
+\parskip=1pt plus 0.3pt minus 0.1pt
+\advance\leftskip by 3em
+\advance\rightskip by 3em
+\parindent=0pt
+}
+
+%%% Úvod a historie projektu
+\hdr{Na počátku bylo vejce aneb Úvodem}
+
+\noindent Internet i UNIX jsou na světě již pěkných pár pátků. Počítače pracující
+pod nepřeberným množstvím unixovských systémů od nepaměti fungují jako
+internetové poštovní servery, name-servery a menší routery. Skoro by se zdálo, že
+si tyto dva světy už nemají co nového říci. V~posledních letech ovšem
+výrazně vzrostl výkon běžných PC-ček a objevily se pro ně karty podporující
+nejrůznější síťové technologie, a~tak se tyto počítače staly vhodnými
+kandidáty i~pro funkci routerů. Na~mnoha místech tak starší PC-čko
+s~volně šiřitelným softwarem předstihlo svého staršího a dražšího
+komerčního sourozence. Ačkoliv podpora routingu, firewallingu a inteligentní
+queue management v~jádrech těchto~OS (a~zejména Linuxu) je již velice
+vyspělá, ještě nedávno byly notně zanedbávány protokoly pro dynamický
+routing, tradiční unixovskou koncepcí umístěné do~uživatelského prostoru
+v~podobě routovacích daemonů.
+
+Tento nedostatek se pokoušela mezi jinými napravit také skupina nadšenců
+na~pražské Matematicko-fyzikální fakultě UK, která se rozhodla jako svůj
+studijní projekt vytvořit nového routovacího daemona, který by se stal
+něčím víc než jen důstojným konkurentem komerčních routerů -- nejen
+kopíroval už známá řešení, ale také přispěl něčím novým; na~jedné straně
+být stabilním a efektivním programem pro praxi, na~straně druhé ovšem
+i~laboratoří pro snadné experimentování s~novými myšlenkami. A~tak se
+narodil projekt {\it BIRD Internet Routing Daemon} (zkráceně \BIRD\footnote{$^0$}{Projekt
+si samozřejmě vysloužil nejrůznější přezdívky -- od Ptáčete až po~Ptákovinu.}).
+
+Původní plány byly smělé a rozhodné: Vytvořit nejlepšího routovacího
+daemona na světě, který by fungoval na~všech platformách, vyžadoval
+minimum strojového času a paměti, podporoval všechny routovací protokoly
+atd., zkrátka sen, jaký má být. Přeskočme nyní dva roky vývoje\footnote{$^1$}{během nichž
+z~některých požadavků samozřejmě sešlo -- například logem projektu
+se nakonec nestal ptáček nesoucí v~zobáčku snítku byliny řečené routa \dots}
+a podívejme se, co z~toho vzešlo.
+
+%%% Svět routingu
+%% v~tištěné verzi přeskočíme
+
+%%% Co BIRD dokáže
+\hdr{Když ptáčka lapají, pěkně mu zpívají aneb Feature list}
+
+\noindent \BIRD\ dostal od svých sudiček do~vínku mnohé dary:
+
+\def\icirc{\raise0.2ex\hbox{$\circ$}} % Signs frequently used for \itemize
+
+\itemize\ibull
+\:Schopnost komunikovat protokoly IPv4 i IPv6.
+\:Podporu všech základních routovacích protokolů:
+ \itemize\icirc
+ \:RIPv2 (Routing Information Protocol, viz RFC 1723 a 2080)\\
+ Určen pro interní routing, dnes významu spíše historického.\\
+ Algoritmus: distance vector (Bellman-Ford).\\
+ Velmi pomalá konvergence, použitelý pouze pro maličké sítě.
+ \:OSPFv2 (Open Shortest Path First, viz RFC 2328)\\
+ Určen pro interní routing, v~současné době asi nejběžnější.\\
+ Algoritmus: link state (Dijkstra).\\
+ Rychlá konvergence, ale velice komplikovaný.\\
+ Zatím podporujeme pouze pro IPv4.
+ \:BGP4 (Border Gateway Protocol, viz RFC 1771 a 2283)\\
+ Standardní protokol pro externí routing mezi AS.\\
+ Rychlá konvergence, možnost administrativní filtrace.\\
+ Algoritmus: path vector (upravený Bellman-Ford).
+ \endlist
+\:Propojování protokolů a výměnu dat mezi nimi.
+\:Schopnost uplatňovat routing policy -- určovat, které routovací informace
+ budou od~kterých protokolů přijímány a do~kterých protokolů vysílány.
+\:Snadnou konfiguraci a údržbu, ale o~tom až později.
+\:Modulární architekturu umožňující snadné doplňování nových protokolů,
+ filtrů i jednoduché portování na~další systémy. (Interface k~routovacím
+ službám jádra je bohužel i mezi jednotlivými unixovskými systémy natolik
+ různorodý, že dokonce i~Linux 2.0 a Linux 2.2 jsou naprogramovány jako dva
+ odlišné porty.)
+\:A v~neposlední řadě kvalitní dokumentaci jak uživatelskou, tak
+ programátorskou (to je vítaný důsledek bytí školním projektem).
+\endlist
+
+%%% A jak to všechno propojit
+\hdr{Svět z~ptačí perspektivy aneb Jak to všechno dát dohromady?}
+
+\noindent Hlavním problémem ovšem není ani tak všechny tyto vymoženosti naprogramovat
+a popropojovat, nýbrž udělat to tak, aby z~toho nevznikl neudržovatelný
+a neefektivní zmatek\footnote{$^2$}{Nádherným příkladem je Mendelův pes,
+jak ho kdysi nakreslil pan Kantorek.}. Z~toho se zrodil modulární pohled
+na~svět routingu a následně i celá modulární architektura programu:
+
+\bigskip
+
+\centerline{\epsfxsize=0.9\hsize\epsfbox{../slides/obr5.eps}}
+
+\medskip
+
+Základem pohledu na~Internet z~naší \uv{ptačí perspektivy} je routovací
+tabulka. Na~ní jsou připojeny jednotlivé routovací protokoly -- jak
+protokoly reálné, tak i několik virtuálních, jako je například protokol
+Kernel zajišťující synchronizaci tabulky s~tabulkou jádra nebo protokol
+Static generující podle své konfigurace statické směrování. Každý z~protokolů
+posílá do~tabulky položky pro všechny routy, které se na~základě svých informací
+o~topologii sítě dozvídá. Tabulka pro každou síť vybírá na základě preferencí
+jednotlivých protokolů a jejich metrik optimální směr a ten oznamuje
+zpět protokolům. V~cestě ovšem v~obou směrech stojí filtry, které mohou
+tok dat regulovat -- některé položky odmítat, jiné upravovat (například
+jim přenastavovat metriky či tagy; to se dokonce vztahuje i~na
+atributy doplňované cílovým protokolem, protože nejprve cílový protokol
+nastaví implicitní hodnoty svých atributů, pokud je již položka neobsahovala,
+a teprve pak dojde k~filtrování).
+
+Routovacích tabulek může dokonce existovat vícero a pomocí protokolu Pipe
+si mohou přeposílat vybrané položky. Tím můžeme zajistit například
+routing závislý na~zdrojové adrese či vstupním interfacu: u~Linuxu 2.2
+či novějšího nakonfigurujeme jádru více routovacích tabulek a každou
+z~nich připojíme na~jednu tabulku naši.
+
+\hdr{Ptačí zpěv aneb User interface}
+%%% User interface: konfigurace, logging a filtry. Remote control.
+
+\noindent Síť se mění a s~ní se musí měnit i konfigurace síťových
+komponent. Ta se pozvolna stala tradičním kamenem úrazu většiny routerů.
+U~tohoto kamene se totiž scházejí dva odvěcí nepřátelé:
+snaha o~snadnost a flexibilitu konfigurace a snaha o~nepřetržitý
+provoz sítě. A~jednou sleví ten, podruhé onen -- autoři některých
+routerů vsadili na~sílu textových konfiguračních souborů za~cenu
+toho, že se po~každé změně konfigurace musí router restartovat
+a po~nějakou dobu neroutuje, jiní zase podřídili non-stop provozu
+vše ostatní a stvořili konfigurování nepřeberným množstvím online
+příkazů, pomocí nichž se některé věci provádějí snadno, jiné,
+na~které autoři speciální příkaz nevymysleli, už obtížněji a ještě jiné
+vyžadují do~výsledného stavu dospět postupným provedením mnoha změn,
+což má obvykle za~důsledek daleko delší výpadek než jaký by byl vznikl
+reloadem celého routeru.
+
+\BIRD\ se snaží dosáhnout obojího: používá textové konfigurační soubory,
+uživateli tak dává možnost vytvářet konfiguraci víceméně libovolným
+způsobem -- ať již ručním editováním, interaktivními programy či
+automatickým generováním pomocí scriptů. Po~změně konfigurace je
+ovšem schopen si novou verzi souboru přečíst, porovnat s~právě
+používanou konfigurací a změnám se za běhu přízpůsobit (pokud
+jsou změny příliš velké, může to způsobit restart
+některého z~protokolů, ale provoz těch, kterých se změna
+netýkala, to nijak neohrozí).
+
+Konfigurace každého protokolu (lépe řečeno každé jeho instance --
+protokoly mohou být spuštěny několikrát na~různých rozhraních
+či nad různými tabulkami) vypadá přibližně takto:
+
+\verbatim{ protocol bgp TestBGP { # instanci si můžeme nazvat
+ local as 65000; # náš AS
+ neighbor 195.39.3.64 as 5588; # sousední AS
+ export all; # posílat budeme všechno
+ import filter { # na vstupu některé odmítneme
+ if !(bgp_path ~ / ? 5588 ? /) then reject;
+ if net ~ [ 10.0.0.0/8+, 192.168.0.0/16+ ] then reject;
+ preference = 101; # zbylým nastavíme preferenci
+ accept; # a přijmeme je
+ };
+ }}
+\noindent Vždy popisuje protokol, jeho parametry, připojení k~tabulkám
+(v~našem případě používáme tabulku implicitní) a nastavení vstupních
+i~výstupních filtrů.
+
+Filtry jsou popisovány jednoduchým procedurálním programovacím jazykem,
+který má k~dispozici všechny informace o~právě zpracovávané položce, může
+se podle nich rozhodovat a libovolně je měnit. Díky tomu je možné jednoduše
+zadávat i velice složitá pravidla, definovat si podprogramy sdílené
+filtry patřícími k~více protokolům, i~počítat metriky pro jeden protokol
+na základě metrik protokolů ostatních.
+
+Vítaným pomocníkem při odhalování problémů v~sítích je rovněž volitelné
+logování důležitých událostí a trasování činnosti protokolů: zde si je
+možno pro každý protokol vyžádat prakticky cokoliv počínaje základními informacemi o~běhu
+protokolu (připojování a odpojování sousedů apod.), přes výměnu položek
+mezi protokolem, filtry a jeho tabulkou, a konče detailním výpisem všech
+přijatých i odeslaných paketů.
+
+Mimo to \BIRD\ disponuje \uv{dálkovým ovládáním} -- jednoduchým příkazovým
+rozhraním, přes které se mohou připojovat různí klienti a vydávat jak
+některé řídící příkazy (restarty protokolů, reload konfigurace, přepínání
+trasování, \dots), tak požadavky na~vypisování stavu routovacích tabulek
+a protokolů. U~těchto příkazů je možno využívat plné síly filtrovacího
+jazyka, takže chceme-li například znát všechny routy směrované pomocí
+BGP na jednoho konkrétního souseda, stačí položit dotaz typu
+
+\verbatim{ bird> show route where source=RTS_BGP && gw=62.168.0.1}
+
+\noindent a dozvíme se ihned vše, co jsme potřebovali. Ladění filtrů
+navíc usnadní i~to, že se můžeme zeptat na~obsah routovací tabulky
+z~pohledu některého z~běžících protokolů.
+
+%%% BIRD uvnitř
+%\hdr{Ptačí anatomie}
+%% existuje progdoc
+
+%%% Netradicni pouziti
+\hdr{Cesty tažných ptáků aneb Za hranicemi všedních dnů}
+
+\noindent Hotová modulární implementace routovacího daemona samozřejmě
+svádí i k~méně tradičnímu využití. Zde se fantazii meze nekladou, autory
+samé během vývoje napadly například tyto triky:
+
+\itemize\ibull
+\:{\I multirouter} -- \uv{schizofrenní} zařízení pracující na různých
+ skupinách interfaců jako různé routery řídící se různými pravidly,
+ ležící třeba i v~různých autonomních systémech. To je možno zařídit
+ patřičným nastavením jádra a buďto více běžícími \BIRD{}y nebo dokonce
+ jedním pracujícím s~několika různými routovacími tabulkami. Tak by
+ mohl například celý pražský NIX běžet na jediném routeru (pravda,
+ běžné PC by na to nestačílo), a přesto by si každý provider mohl sám
+ určovat a konfigurovat svou vlastní routovací politiku.
+\:{\I šedá eminence} -- \BIRD\ by ani nemusel běžet přímo na~stroji, který
+ pakety routuje, mohl by také hotové routovací tabulky diktovat
+ nějakému dedikovanému routeru disponujícím výkonnějším hardwarem,
+ a tak skloubit špičkovou propustnost \uv{velkého železa}
+ s~flexibilitou routeru bežícího pod unixovským systémem.
+\:{\I inteligentní mirror} -- aplikace se nemusí zastavovat u~routingu
+ jako takového, mnohdy je možno informace získané z~provozu routeru
+ využívat k~dalším účelům, například k~inteligentnímu přesměrovávání
+ klientů na~nejbližší mirror vašeho archivu.
+\endlist
+
+%%% A co dal?
+\hdr{Čas ptáčat aneb Co dál?}
+
+Přestože po~úspěšném obhájení projektu a prvních několika desítkách
+spokojených uživatelů (a samozřejmě i~pár opravených chybách) nyní vývoj
+spíše stagnuje, autoři již spřádají plány do~budoucnosti, které
+by měly \BIRD{}ovi přinést mimo jiné také routování multicastů, agregaci
+síťových prefixů, OSPFv3 pro IPv6, on-demand linky a porty na~další systémy.
+
+%%% Reference na nás a ostatní routery
+\hdr{Snůška odkazů na závěr}
+
+\noindent {\sc Bird Team} pod vedením RNDr. Libora Forsta ({\I forst@cuni.cz}) tvořili:
+$$\vbox{\halign{#\hfil & \quad \it # \hfil & \quad \it # \hfil\cr
+Ondřej Filip&feela@ipex.cz&http:/$\!$/feela.ipex.cz/\cr
+Martin Mareš&mj@ucw.cz&http:/$\!$/atrey.karlin.mff.cuni.cz/\char126mj/\cr
+Pavel Machek&pavel@ucw.cz&http:/$\!$/atrey.karlin.mff.cuni.cz/\char126pavel/\cr}}$$
+Domácí stránku projektu najdete na {\it http:/$\!$/bird.network.cz/,} odtamtud již
+vedou odkazy na~aktuální verzi, online dokumentaci i mailing list
+uživatelů.
+Všechna zmiňovaná RFC i mnoho dalších naleznete na {\it http:/$\!$/www.rfc-editor.org/},
+první myšlenky o~využívání ptactva v~Internetu sahají až k~RFC~1149.
+\BIRD\ není na~světě sám, má i~příbuzné; mezi nimi za zmínku stojí
+daemoni {\sc GateD} ({\I http:/$\!$/www.gated.org/}), \hbox{\sc Zebra} ({\I http:/$\!$/www.zebra.org/})
+a {\sc Mrtd} ({\I http:/$\!$/www.mrtd.net/}).
+O~IPv6 se bohužel zatím jen píše, na~jeho celointernetové nasazení se stále
+čeká a mezitím přibývá address-translatorů a dalších zvěrstev. Snad jediná
+větší síť používající tento protokol je experimentální virtuální síť 6-bone
+(viz {\it http:/$\!$/www.6bone.net/} a odkazy odtamtud).
+
+Dotazy a připomínky posílejte buďto autorovi nebo celému {\sc Bird Team}u na~adresu
+{\I bird@bird.network.cz}.
+
+\bye