Annotation of embedaddon/bird/doc/slt2001/slt.tex, revision 1.1

1.1     ! misho       1: \magnification=\magstep1
        !             2: \input epsf.tex
        !             3: \input mjmac.tex
        !             4: 
        !             5: \language=\czech
        !             6: \chyph
        !             7: 
        !             8: \hsize=160truemm       % A4 with 25mm margins
        !             9: \vsize=247truemm
        !            10: \parindent=2em
        !            11: \nopagenumbers
        !            12: 
        !            13: \def\hdr#1{\medskip\leftline{\bf #1}\smallskip}
        !            14: \def\\{\hfil\break}
        !            15: \def\BIRD{{\sc Bird}}
        !            16: 
        !            17: \def\inititemize{\vskip 1pt\begingroup
        !            18: \parskip=1pt plus 0.3pt minus 0.1pt
        !            19: \advance\leftskip by 3em
        !            20: \advance\rightskip by 3em
        !            21: \parindent=0pt
        !            22: }
        !            23: 
        !            24: %%% Úvod a historie projektu
        !            25: \hdr{Na počátku bylo vejce aneb Úvodem}
        !            26: 
        !            27: \noindent Internet i UNIX jsou na světě již pěkných pár pátků. Počítače pracující
        !            28: pod nepřeberným množstvím unixovských systémů od nepaměti fungují jako
        !            29: internetové poštovní servery, name-servery a menší routery. Skoro by se zdálo, že
        !            30: si tyto dva světy už nemají co nového říci. V~posledních letech ovšem
        !            31: výrazně vzrostl výkon běžných PC-ček a objevily se pro ně karty podporující
        !            32: nejrůznější síťové technologie, a~tak se tyto počítače staly vhodnými
        !            33: kandidáty i~pro funkci routerů. Na~mnoha místech tak starší PC-čko
        !            34: s~volně šiřitelným softwarem předstihlo svého staršího a dražšího
        !            35: komerčního sourozence. Ačkoliv podpora routingu, firewallingu a inteligentní
        !            36: queue management v~jádrech těchto~OS (a~zejména Linuxu) je již velice
        !            37: vyspělá, ještě nedávno byly notně zanedbávány protokoly pro dynamický
        !            38: routing, tradiční unixovskou koncepcí umístěné do~uživatelského prostoru
        !            39: v~podobě routovacích daemonů.
        !            40: 
        !            41: Tento nedostatek se pokoušela mezi jinými napravit také skupina nadšenců
        !            42: na~pražské Matematicko-fyzikální fakultě UK, která se rozhodla jako svůj
        !            43: studijní projekt vytvořit nového routovacího daemona, který by se stal
        !            44: něčím víc než jen důstojným konkurentem komerčních routerů -- nejen
        !            45: kopíroval už známá řešení, ale také přispěl něčím novým; na~jedné straně
        !            46: být stabilním a efektivním programem pro praxi, na~straně druhé ovšem
        !            47: i~laboratoří pro snadné experimentování s~novými myšlenkami. A~tak se
        !            48: narodil projekt {\it BIRD Internet Routing Daemon} (zkráceně \BIRD\footnote{$^0$}{Projekt
        !            49: si samozřejmě vysloužil nejrůznější přezdívky -- od Ptáčete až po~Ptákovinu.}).
        !            50: 
        !            51: Původní plány byly smělé a rozhodné: Vytvořit nejlepšího routovacího
        !            52: daemona na světě, který by fungoval na~všech platformách, vyžadoval
        !            53: minimum strojového času a paměti, podporoval všechny routovací protokoly
        !            54: atd., zkrátka sen, jaký má být. Přeskočme nyní dva roky vývoje\footnote{$^1$}{během nichž
        !            55: z~některých požadavků samozřejmě sešlo -- například logem projektu
        !            56: se nakonec nestal ptáček nesoucí v~zobáčku snítku byliny řečené routa \dots}
        !            57: a podívejme se, co z~toho vzešlo.
        !            58: 
        !            59: %%% Svět routingu
        !            60: %% v~tištěné verzi přeskočíme
        !            61: 
        !            62: %%% Co BIRD dokáže
        !            63: \hdr{Když ptáčka lapají, pěkně mu zpívají aneb Feature list}
        !            64: 
        !            65: \noindent \BIRD\ dostal od svých sudiček do~vínku mnohé dary:
        !            66: 
        !            67: \def\icirc{\raise0.2ex\hbox{$\circ$}} % Signs frequently used for \itemize
        !            68: 
        !            69: \itemize\ibull
        !            70: \:Schopnost komunikovat protokoly IPv4 i IPv6.
        !            71: \:Podporu všech základních routovacích protokolů:
        !            72:   \itemize\icirc
        !            73:     \:RIPv2 (Routing Information Protocol, viz RFC 1723 a 2080)\\
        !            74:       Určen pro interní routing, dnes významu spíše historického.\\
        !            75:       Algoritmus: distance vector (Bellman-Ford).\\
        !            76:       Velmi pomalá konvergence, použitelý pouze pro maličké sítě.
        !            77:     \:OSPFv2 (Open Shortest Path First, viz RFC 2328)\\
        !            78:       Určen pro interní routing, v~současné době asi nejběžnější.\\
        !            79:       Algoritmus: link state (Dijkstra).\\
        !            80:       Rychlá konvergence, ale velice komplikovaný.\\
        !            81:       Zatím podporujeme pouze pro IPv4.
        !            82:     \:BGP4 (Border Gateway Protocol, viz RFC 1771 a 2283)\\
        !            83:       Standardní protokol pro externí routing mezi AS.\\
        !            84:       Rychlá konvergence, možnost administrativní filtrace.\\
        !            85:       Algoritmus: path vector (upravený Bellman-Ford).
        !            86:   \endlist
        !            87: \:Propojování protokolů a výměnu dat mezi nimi.
        !            88: \:Schopnost uplatňovat routing policy -- určovat, které routovací informace
        !            89:   budou od~kterých protokolů přijímány a do~kterých protokolů vysílány.
        !            90: \:Snadnou konfiguraci a údržbu, ale o~tom až později.
        !            91: \:Modulární architekturu umožňující snadné doplňování nových protokolů,
        !            92:   filtrů i jednoduché portování na~další systémy. (Interface k~routovacím
        !            93:   službám jádra je bohužel i mezi jednotlivými unixovskými systémy natolik
        !            94:   různorodý, že dokonce i~Linux 2.0 a Linux 2.2 jsou naprogramovány jako dva
        !            95:   odlišné porty.)
        !            96: \:A v~neposlední řadě kvalitní dokumentaci jak uživatelskou, tak
        !            97:   programátorskou (to je vítaný důsledek bytí školním projektem).
        !            98: \endlist
        !            99: 
        !           100: %%% A jak to všechno propojit
        !           101: \hdr{Svět z~ptačí perspektivy aneb Jak to všechno dát dohromady?}
        !           102: 
        !           103: \noindent Hlavním problémem ovšem není ani tak všechny tyto vymoženosti naprogramovat
        !           104: a popropojovat, nýbrž udělat to tak, aby z~toho nevznikl neudržovatelný
        !           105: a neefektivní zmatek\footnote{$^2$}{Nádherným příkladem je Mendelův pes,
        !           106: jak ho kdysi nakreslil pan Kantorek.}. Z~toho se zrodil modulární pohled
        !           107: na~svět routingu a následně i celá modulární architektura programu:
        !           108: 
        !           109: \bigskip
        !           110: 
        !           111: \centerline{\epsfxsize=0.9\hsize\epsfbox{../slides/obr5.eps}}
        !           112: 
        !           113: \medskip
        !           114: 
        !           115: Základem pohledu na~Internet z~naší \uv{ptačí perspektivy} je routovací
        !           116: tabulka. Na~ní jsou připojeny jednotlivé routovací protokoly -- jak
        !           117: protokoly reálné, tak i několik virtuálních, jako je například protokol
        !           118: Kernel zajišťující synchronizaci tabulky s~tabulkou jádra nebo protokol
        !           119: Static generující podle své konfigurace statické směrování. Každý z~protokolů
        !           120: posílá do~tabulky položky pro všechny routy, které se na~základě svých informací
        !           121: o~topologii sítě dozvídá. Tabulka pro každou síť vybírá na základě preferencí
        !           122: jednotlivých protokolů a jejich metrik optimální směr a ten oznamuje
        !           123: zpět protokolům. V~cestě ovšem v~obou směrech stojí filtry, které mohou
        !           124: tok dat regulovat -- některé položky odmítat, jiné upravovat (například
        !           125: jim přenastavovat metriky či tagy; to se dokonce vztahuje i~na
        !           126: atributy doplňované cílovým protokolem, protože nejprve cílový protokol
        !           127: nastaví implicitní hodnoty svých atributů, pokud je již položka neobsahovala,
        !           128: a teprve pak dojde k~filtrování).
        !           129: 
        !           130: Routovacích tabulek může dokonce existovat vícero a pomocí protokolu Pipe
        !           131: si mohou přeposílat vybrané položky. Tím můžeme zajistit například
        !           132: routing závislý na~zdrojové adrese či vstupním interfacu: u~Linuxu 2.2
        !           133: či novějšího nakonfigurujeme jádru více routovacích tabulek a každou
        !           134: z~nich připojíme na~jednu tabulku naši.
        !           135: 
        !           136: \hdr{Ptačí zpěv aneb User interface}
        !           137: %%% User interface: konfigurace, logging a filtry. Remote control.
        !           138: 
        !           139: \noindent Síť se mění a s~ní se musí měnit i konfigurace síťových
        !           140: komponent. Ta se pozvolna stala tradičním kamenem úrazu většiny routerů.
        !           141: U~tohoto kamene se totiž scházejí dva odvěcí nepřátelé:
        !           142: snaha o~snadnost a flexibilitu konfigurace a snaha o~nepřetržitý
        !           143: provoz sítě. A~jednou sleví ten, podruhé onen -- autoři některých
        !           144: routerů vsadili na~sílu textových konfiguračních souborů za~cenu
        !           145: toho, že se po~každé změně konfigurace musí router restartovat
        !           146: a po~nějakou dobu neroutuje, jiní zase podřídili non-stop provozu
        !           147: vše ostatní a stvořili konfigurování nepřeberným množstvím online
        !           148: příkazů, pomocí nichž se některé věci provádějí snadno, jiné,
        !           149: na~které autoři speciální příkaz nevymysleli, už obtížněji a ještě jiné
        !           150: vyžadují do~výsledného stavu dospět postupným provedením mnoha změn,
        !           151: což má obvykle za~důsledek daleko delší výpadek než jaký by byl vznikl
        !           152: reloadem celého routeru.
        !           153: 
        !           154: \BIRD\ se snaží dosáhnout obojího: používá textové konfigurační soubory,
        !           155: uživateli tak dává možnost vytvářet konfiguraci víceméně libovolným
        !           156: způsobem -- ať již ručním editováním, interaktivními programy či
        !           157: automatickým generováním pomocí scriptů. Po~změně konfigurace je
        !           158: ovšem schopen si novou verzi souboru přečíst, porovnat s~právě
        !           159: používanou konfigurací a změnám se za běhu přízpůsobit (pokud
        !           160: jsou změny příliš velké, může to způsobit restart
        !           161: některého z~protokolů, ale provoz těch, kterých se změna
        !           162: netýkala, to nijak neohrozí).
        !           163: 
        !           164: Konfigurace každého protokolu (lépe řečeno každé jeho instance --
        !           165: protokoly mohou být spuštěny několikrát na~různých rozhraních
        !           166: či nad různými tabulkami) vypadá přibližně takto:
        !           167: 
        !           168: \verbatim{   protocol bgp TestBGP {               # instanci si můžeme nazvat
        !           169:       local as 65000;                  # náš AS
        !           170:       neighbor 195.39.3.64 as 5588;    # sousední AS
        !           171:       export all;                      # posílat budeme všechno
        !           172:       import filter {                   # na vstupu některé odmítneme
        !           173:          if !(bgp_path ~ / ? 5588 ? /) then reject;
        !           174:          if net ~ [ 10.0.0.0/8+, 192.168.0.0/16+ ] then reject;
        !           175:          preference = 101;              # zbylým nastavíme preferenci
        !           176:          accept;                        # a přijmeme je
        !           177:       };
        !           178:    }}
        !           179: \noindent Vždy popisuje protokol, jeho parametry, připojení k~tabulkám
        !           180: (v~našem případě používáme tabulku implicitní) a nastavení vstupních
        !           181: i~výstupních filtrů.
        !           182: 
        !           183: Filtry jsou popisovány jednoduchým procedurálním programovacím jazykem,
        !           184: který má k~dispozici všechny informace o~právě zpracovávané položce, může
        !           185: se podle nich rozhodovat a libovolně je měnit. Díky tomu je možné jednoduše
        !           186: zadávat i velice složitá pravidla, definovat si podprogramy sdílené
        !           187: filtry patřícími k~více protokolům, i~počítat metriky pro jeden protokol
        !           188: na základě metrik protokolů ostatních.
        !           189: 
        !           190: Vítaným pomocníkem při odhalování problémů v~sítích je rovněž volitelné
        !           191: logování důležitých událostí a trasování činnosti protokolů: zde si je
        !           192: možno pro každý protokol vyžádat prakticky cokoliv počínaje základními informacemi o~běhu
        !           193: protokolu (připojování a odpojování sousedů apod.), přes výměnu položek
        !           194: mezi protokolem, filtry a jeho tabulkou, a konče detailním výpisem všech
        !           195: přijatých i odeslaných paketů.
        !           196: 
        !           197: Mimo to \BIRD\ disponuje \uv{dálkovým ovládáním} -- jednoduchým příkazovým
        !           198: rozhraním, přes které se mohou připojovat různí klienti a vydávat jak
        !           199: některé řídící příkazy (restarty protokolů, reload konfigurace, přepínání
        !           200: trasování, \dots), tak požadavky na~vypisování stavu routovacích tabulek
        !           201: a protokolů. U~těchto příkazů je možno využívat plné síly filtrovacího
        !           202: jazyka, takže chceme-li například znát všechny routy směrované pomocí
        !           203: BGP na jednoho konkrétního souseda, stačí položit dotaz typu
        !           204: 
        !           205: \verbatim{   bird> show route where source=RTS_BGP && gw=62.168.0.1}
        !           206: 
        !           207: \noindent a dozvíme se ihned vše, co jsme potřebovali. Ladění filtrů
        !           208: navíc usnadní i~to, že se můžeme zeptat na~obsah routovací tabulky
        !           209: z~pohledu některého z~běžících protokolů.
        !           210: 
        !           211: %%% BIRD uvnitř
        !           212: %\hdr{Ptačí anatomie}
        !           213: %% existuje progdoc
        !           214: 
        !           215: %%% Netradicni pouziti
        !           216: \hdr{Cesty tažných ptáků aneb Za hranicemi všedních dnů}
        !           217: 
        !           218: \noindent Hotová modulární implementace routovacího daemona samozřejmě
        !           219: svádí i k~méně tradičnímu využití. Zde se fantazii meze nekladou, autory
        !           220: samé během vývoje napadly například tyto triky:
        !           221: 
        !           222: \itemize\ibull
        !           223: \:{\I multirouter} -- \uv{schizofrenní} zařízení pracující na různých
        !           224:   skupinách interfaců jako různé routery řídící se různými pravidly,
        !           225:   ležící třeba i v~různých autonomních systémech. To je možno zařídit
        !           226:   patřičným nastavením jádra a buďto více běžícími \BIRD{}y nebo dokonce
        !           227:   jedním pracujícím s~několika různými routovacími tabulkami. Tak by
        !           228:   mohl například celý pražský NIX běžet na jediném routeru (pravda,
        !           229:   běžné PC by na to nestačílo), a přesto by si každý provider mohl sám
        !           230:   určovat a konfigurovat svou vlastní routovací politiku.
        !           231: \:{\I šedá eminence} -- \BIRD\ by ani nemusel běžet přímo na~stroji, který
        !           232:   pakety routuje, mohl by také hotové routovací tabulky diktovat
        !           233:   nějakému dedikovanému routeru disponujícím výkonnějším hardwarem,
        !           234:   a tak skloubit špičkovou propustnost \uv{velkého železa}
        !           235:   s~flexibilitou routeru bežícího pod unixovským systémem.
        !           236: \:{\I inteligentní mirror} -- aplikace se nemusí zastavovat u~routingu
        !           237:   jako takového, mnohdy je možno informace získané z~provozu routeru
        !           238:   využívat k~dalším účelům, například k~inteligentnímu přesměrovávání
        !           239:   klientů na~nejbližší mirror vašeho archivu.
        !           240: \endlist
        !           241: 
        !           242: %%% A co dal?
        !           243: \hdr{Čas ptáčat aneb Co dál?}
        !           244: 
        !           245: Přestože po~úspěšném obhájení projektu a prvních několika desítkách
        !           246: spokojených uživatelů (a samozřejmě i~pár opravených chybách) nyní vývoj
        !           247: spíše stagnuje, autoři již spřádají plány do~budoucnosti, které
        !           248: by měly \BIRD{}ovi přinést mimo jiné také routování multicastů, agregaci
        !           249: síťových prefixů, OSPFv3 pro IPv6, on-demand linky a porty na~další systémy.
        !           250: 
        !           251: %%% Reference na nás a ostatní routery
        !           252: \hdr{Snůška odkazů na závěr}
        !           253: 
        !           254: \noindent {\sc Bird Team} pod vedením RNDr. Libora Forsta ({\I forst@cuni.cz}) tvořili:
        !           255: $$\vbox{\halign{#\hfil & \quad \it # \hfil & \quad \it # \hfil\cr
        !           256: Ondřej Filip&feela@ipex.cz&http:/$\!$/feela.ipex.cz/\cr
        !           257: Martin Mareš&mj@ucw.cz&http:/$\!$/atrey.karlin.mff.cuni.cz/\char126mj/\cr
        !           258: Pavel Machek&pavel@ucw.cz&http:/$\!$/atrey.karlin.mff.cuni.cz/\char126pavel/\cr}}$$
        !           259: Domácí stránku projektu najdete na {\it http:/$\!$/bird.network.cz/,} odtamtud již
        !           260: vedou odkazy na~aktuální verzi, online dokumentaci i mailing list
        !           261: uživatelů.
        !           262: Všechna zmiňovaná RFC i mnoho dalších naleznete na {\it http:/$\!$/www.rfc-editor.org/},
        !           263: první myšlenky o~využívání ptactva v~Internetu sahají až k~RFC~1149.
        !           264: \BIRD\ není na~světě sám, má i~příbuzné; mezi nimi za zmínku stojí
        !           265: daemoni {\sc GateD} ({\I http:/$\!$/www.gated.org/}), \hbox{\sc Zebra} ({\I http:/$\!$/www.zebra.org/})
        !           266: a {\sc Mrtd} ({\I http:/$\!$/www.mrtd.net/}).
        !           267: O~IPv6 se bohužel zatím jen píše, na~jeho celointernetové nasazení se stále
        !           268: čeká a mezitím přibývá address-translatorů a dalších zvěrstev. Snad jediná
        !           269: větší síť používající tento protokol je experimentální virtuální síť 6-bone
        !           270: (viz {\it http:/$\!$/www.6bone.net/} a odkazy odtamtud).
        !           271: 
        !           272: Dotazy a připomínky posílejte buďto autorovi nebo celému {\sc Bird Team}u na~adresu
        !           273: {\I bird@bird.network.cz}.
        !           274: 
        !           275: \bye

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>