Linuxové noviny | 08-09/98 | ||
| |||
ÚvodJiž přibližně dva roky probíhá práce na vývojové řadě linuxových kernelů 2.1 a v současné době směřuje k vyvrcholení v podobě stabilního release 2.2. Za tuto dlouhou dobu se změnily spousty věcí v prakticky všech koutech jádra, nevyjímaje ani síťové subsystémy, ba naopak značné procento změn bylo právě v nich.Tento článek se snaží formou alespoň trochu přehlednou čtenáři osvětliti, co nového přináší Linux 2.1 (respektive co přinese Linux 2.2) ohledně sítí ve srovnání s předchozí stabilní verzí 2.0. Původně byl tento text přednesen v květnu 1998 jako referát v rámci Linuxového semináře MFF UK http://sunsite.mff.cuni.cz/linux/seminar/Linux.shtml. Zde se autor snaží o poněkud systematičtější a úplnější podání téhož tématu. Při rozsahu síťové podpory v Linuxu a zejména pak při rozsahu diskutovaných novinek jsou pouze dvě možnosti, jak tento článek může dopadnout: buďto bude neúplný (prostě se o méně důležitých či méně zajímavých věcech nebude zmiňovat) a nebo bude sáhodlouhý, nudný a většina čtenářů jej před polovinou odloží jako vyčerpávající, a to nejen téma. Pokusil jsem se vybrat si variantu první jakožto menší z obou zel.
TCP/IPV oblasti TCP/IP se toho změnilo snad nejvíce. Prakticky celý kód obhospodařující tuto sadu protokolů se dočkal přepsání od základu (někdy i několikanásobného), obvykle zásluhou největšího ze síťových mágů Alexeje Kuzněcova.Jelikož klasické UNIXové (z BSD UNIXu pocházející) příkazy již dlouhou dobu nepostačují (nejen implementačně, ale zejména svou "dinosauří" koncepcí neberoucí příliš na vědomí dávno již běžné věci jako je např. classless routing ke konfiguraci všech parametrů linuxového TCP/IP, vznikla nová utilita krátkého a výstižného jména ip http://ftp.gts.cz/FTP/pub/MIRRORS/ftp.inr.ac.ru/ip-routing/ syntaxí v mnoha ohledech podobná příkazům routerů firmy Cisco http://www.cisco.com a pro používání velice šikovná. Leč bohužel zatím bez jediného řádku dokumentace, nepočítaje v to zabudovaný help popisující syntaxi příkazů. Třídy adres (v dnešním světě mající význam čistě historický) již nejsou v kernelu podporovány, při zakládání routy či konfiguraci interfacu je již nutno zadat vedle adresy také netmask či délku prefixu. Četné parametry protokolů je nyní možno nastavovat přes sysctl, případně pomocí interfacu v /proc/sys/net přímo ze shellu. Viz dokumentace od utility ip :-) Socket HashingPřed delší dobou se k uším Davida Millera doneslo, že FreeBSD má několikanásobně rychlejší přiřazování příchozích packetů ke spojením než měl tehdejší Linux. Po cca týdnu práce vznikl nový kód pro socket hashing, který tyto věci řeší několikanásobně rychleji než FreeBSD.
IP AliasingZcela se změnila podpora aliasů zařízení (původní eth0:1 apod.). Dnes již původní aliasy neexistují, leč každá síťová karta může mít mimo primární IP adresy ještě libovolně mnoho adres sekundárních. Původní interface s dvojtečkami ve jménech zařízení byl zachován pro kompatibilitu, nicméně v detailech se mírně liší.
IP RoutingLinux již nemá jedinou routovací tabulku, ba naopak tabulek může existovat více a za pomoci konfigurovatelných pravidel je možno vybírat pro každý příchozí packet, podle které tabulky bude routován, a to na základě zdrojové a cílové adresy a dalších parametrů, jako je například TOS (Type Of Service) a interface, ze kterého packet přišel. Tento mechanismus umožňuje velice pěkným způsobem implementovat jak policy based routing, tak routing by TOS i spoustu jiných triků.Rovněž při přiřazení IP adresy interfacu automaticky vznikají device routy a při odkonfigurování samy mizí. Toto se připravovalo již pro kernel 2.0, nicméně kvůli problémům s kompatibilitou to bylo odloženo o release později. K dispozici je Equal Cost Multipath, to jest distribuce packetů mezi několik ekvivalentních položek v routovací tabulce.
TCPTCP bylo rovněž prakticky od základu přepsáno, z většiny zásluhou Davida Millera. Nyní má o dost lepší logiku timeoutů a retransmitů a zejména podporuje několik nově standardizovaných rozšíření:
FirewallingStejně jako verze 2.0, i 2.1 přináší zcela přepracovaný systém firewallingu. Do kernelu byla konečně zařazena podpora IP Firewalling Chains http://www.adelaide.net.au/~rustcorp/ipfwchains/ umožňující řetězení filtrů (což je jednak rychlejší, jednak snazší na údržbu). Tato změna opět není zpětně kompatibilní, firewall je nyní nutno konfigurovat novým programem ipfwchains. Podrobnosti viz článek v čísle 3/1998 Linuxových novin.
MasqueradingPřibyla podpora pro překlad adres v dalších protokolech, rovněž pak možnost ošetřovat překlad protokolů prostřednictvím démona běžícího mimo kernel (viz balík ipautofw ftp://ftp.netis.com/pub/members/rlynch/).Masquerading se nyní konfiguruje pomocí programu ipmasqadm http://juanjox.home.ml.org/. K dispozici je též Port Forwarding http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html umožňující přesměrovávat vybraná TCP spojení na zadaný stroj a zadaný port (užitečné například tehdy, chcete-li mít WWW server za firewallem na počítači s interní adresou a forwardovat všechna spojení s portem 80 firewallu na tento počítač). Konfiguruje se programem ipportfw ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/.
Network Address Translation (NAT)V souvislosti s novým routovacím kódem je podporováno překládání IP adres, prozatím pouze případy s navzájem jednoznačným přiřazením. (Tedy můžete si kupříkladu nechat překládat část adres interní sítě na veřejně dostupné adresy bez rekonfigurace interních počítačů.)Plánuje se sjednocení tohoto mechanismu s masqueradingem, což přinese možnost jak statického, tak dynamického překladu libovolného počtu adres na libovolný jiný počet.
TunnelingLinux se též naučil lépe tunelovat (packety, nikoliv banky - zdá se, že studiem kvantové ekonomie se linuxoví hackeři dosud nezabývají). K dispozici je jak klasický protokol IP in IP (nyní ovšem výrazně lépe implementovaný), tak GRE (Generic Routing Encapsulation, umožňuje tunelování různých protokolů, multicasting, soft state management apod.) a SIT (Simple Internet Transition, přenos IPv6 přes IPv4).
Fast SwitchingTato značně experimentální feature umožňuje přímý přenos packetů mezi buffery jednotlivých síťových karet bez "přestupu" v hlavní paměti, což znatelně urychluje routing. Autor (již zmiňovaný Alexej Kuzněcov) tvrdí, že pak jeho vesměs normální PC má jen o 30% menší propustnost při forwardování než routery Cisco řady 7200. Bohužel zatím je tato vymoženost dostupná pouze se síťovými kartami vybavenými chipsetem Digital 21140 (DECChip Tulip) či 8390 (nutná speciální podpora v driveru).
IP AutoconfigurationAutomatická konfigurace IP prostřednictvím protokolů BOOTP či RARP již není spojena s NFS-rootem a lze ji používat i samostatně.
NetlinkNetlink je nový mechanismus pro komunikaci mezi uživatelskými programy (nejčastěji routovacími démony) a síťovou vrstvou. Umožňuje mimo jiné:
IP version 6Linux 2.1 podporuje nový protokol IPv6 http://playground.sun.com/pub/ipng/html/ipng-main.html, který by měl během pár let zvolna začít nahrazovat původní IPv4 a zbavit tak svět problémů spojených s růstem Internetu.IPv6 v kernelu funguje bez větších problémů (i když tento protokol samozřejmě dosud není tak vyladěný jako IPv4 a je v neustálém vývoji), ovšem na slušnou podporu v aplikacích si budeme muset ještě nějakou dobu počkat. Viz též Linux IPv6 FAQ/HOWTO. http://www.linuxhq.com/IPv6/index.html
Berkeley Packet Filter (BPF)Přeci jen jsme se v něčem inspirovali systémem BSD: Generic Packet Filtering. Tato feature umožňuje uživatelským programům posílat kernelu packetové filtry v jednoduchém byte-kódu a tak si vybírat, které packety je zajímají a které ne. Nezbývá než doufat, že se tcpdump a podobné programy tuto vymoženost brzy naučí používat, a nebudou tak ztrácet drahocenný čas procesoru přenášením packetů, které samy po triviální analýze zahodí.
DriveryPřibyla spousta nových driverů síťových karet a ještě větší množství jich bylo aktualizováno. Viz stránka o driverech http://cesdis.gsfc.nasa.gov/linux/drivers/ od Donalda Beckera.Též se začínají objevovat drivery na některé synchronní sériové karty, zejména pak zásluhou Alana Coxe.
SoundmodemPříznivci packet radia nyní mohou používat softwarové packet modemy využívající zvukovou kartu jako A/D a D/A převodník. Za tuto možnost Linux vděčí Thomasi Sailerovi. Zdrojové texty soundmodemů jsou velice zajímavým čtením... Na druhou stranu Linux dosud nepodporuje (a po delší diskusi na mailing-listu kernelových vývojářů to vypadá, že ani podporovat nebude) tak řečené WinModemy, což jsou "vylevněné" částečně softwarové modemy pro běžné telefonní linky. Hlavním důvodem je notorická neochota firem tyto modemy vyrábějící k jakékoliv spolupráci.
Syscall sendfilePřibyla nová systémová služba umožňující kopírování dat mezi souborem a libovolným file-handlem. Nejedná se sice o čistě síťovou záležitost, nicméně právě u síťových aplikací to může být velice užitečné (např. FTP server posílající data přímo ze souboru do socketu bez kopírování přes adresní prostor FTP daemona).
Síťové filesystémyNFSImplementace NFS (Network File System firmy SUN) doznala značných změn. Nyní má podstatně lepší cacheování a též by měl být schopen fungovat přes TCP.Na druhou stranu, NFS je sice podporováno v UNIXovém světě prakticky každým systémem, leč je to neobyčejně mizerně navržený protokol, který již dlouhá léta čeká na někoho, kdo bude mít dost odvahy na to, aby jej nahradil něčím lepším. Máte-li o práci na podobném projektu zájem, neváhejte a ozvěte se autorovi tohoto článku http://atrey.karlin.mff.cuni.cz/~mj/plist.html.
Kernel NFS Server (knfsd)Olaf Kirch vytvořil NFS server běžící v kernelu. Na první pohled by se mohlo zdát, že to je krásný příklad něčeho, co se má řešit jako user-level daemon, ale bohužel, Olafovo řešení je podstatně rychlejší (ušetří se kopírování všech dat mezi kernelem a adresním prostorem příslušného démona). Na druhou stranu, možná by stálo za zamyšlení, jestli by se podobné rychlosti nedalo dosáhnout šikovným použitím (a případně rozšířením) mechanismu sendfile.
CODALinux nyní má i implementaci distribuovaného filesystému CODA. Bližší informace viz stránky projektu CODA http://www.coda.cs.cmu.edu/.
Automounter (autofs)Konečně důstojná náhrada za starého auto-mount daemona (amd), to jest něco, co umožňuje spolehlivě automaticky mountovat disky při prvním pokusu o přístup do daného adresáře.
Svět NovelluStran podpory sítí světa novellského máme pouze dvě novinky: jednou je podpora protokolu SPX (Sequence Packet Exchange) a druhou pak všemožná vylepšení NCPFS.Poměrně podrobné povídání o těchto věcech je v květnových Linuxových novinách.
Packet SocketPůvodní metoda přímého přístupu k packetům (opět podivné dědictví z archaických UNIXů) byla nahrazena metodou rozumnou a konsistentní, konkrétně zavedením nového protokolu PF_PACKET, který umožňuje přímo vysílat i přijímat jak kompletní link-level packety, tak packety zbavené linkových hlaviček.Důsledky: tcpdump již nemusí podporovat všechny existující linkové vrstvy - když link layer nepozná, prostě si nechá packety posílat "rozbalené" a obsahu porozumí. Konečně je možné čistě implementovat servery, jakož i klienty pro BOOTP a DHCP a neuchylovat se kvůli tomu k podivným trikům typu přiřazování nulové IP adresy interfacu, což stejně s kernelem 2.1 nefunguje.
Packet SchedulingVýznamným přínosem je zavedení nastavitelných a vyměnitelných packet queue managerů pro jednotlivá síťová zařízení. Pro každý interface si nyní můžete vybrat, jak přesně bude spravována jeho odchozí fronta a jak se budou řešit případy, kdy místo na packety bude docházet. Tento mechanismus řeší hned několik problémů najednou:
K tomuto všemu je ještě nutné přidat algoritmus, který packetům přiděluje jejich priority. Můžete si vybrat z následujících možností:
Vše se konfiguruje novou utilitou tc, dokumentace jako obvykle zatím žádná.
Acorn EconetPodporován jest i Econet, podivná to proprietární síť navržená a používaná firmou Acorn, a to jak po původních kartách od Acornu, tak po jiných sítích (dárkové balení v UDP).
WAN RouterLinux 2.1 rovněž obsahuje kostru kódu pro WAN routing - na ni se mohou "přivěšovat" modulární drivery pro Frame Relay a jiné WAN protokoly.Viz stránka o X.25 a Frame-Relay síťování http://users.skynet.be/kribonne/linux-x.25/index_old.html.
X25 a LAPBTi nešťastníci, kteři potřebují používat síťě založené na protokolu X25 (opravdu je lituji, něco tak mizerně navrženého jsem snad v životě neviděl ... možná s výjimkou NFS :-)), naleznou jistou podporu tohoto archaismu, čítaje v to i LAPB (nižší vrstva určená pro spolehlivý přenos datagramů "na dostřel").
Network Block DevicePavel Machek stvořil driver, který po TCP spojení emuluje blokové zařízení (zatím bez ioctl a podobných fines, nicméně vcelku použitelně). Viz domácí stránka projektu NBD http://atrey.karlin.mff.cuni.cz/~pavel/nbd/nbd.html.Z oddělení špatných zpráv: Ani NBD nepomůže k bezbolestnému (čtěte: nepadajícímu) swapování po síti. K tomu jsou nutné netriviální změny v memory-managementu a ty se rozhodně hned tak nepodaří prosadit... Pohled do budoucnostiČasu na vývoj bylo bohužel k dispozici pouze konečné množství, takže zdaleka ne všechno, co si kdo přál, bylo dokončeno. Na verzi 2.3 bylo například odloženo:
ZávěremTento výčet "síťových novinek" ukazuje, že jádra 2.1 toho stran síťování opravdu mohou nabídnout mnoho nového. Za zmínku ovšem stojí, že ani kernelům 2.0 se vylepšování nevyhnulo - i tam byly postupně (po důkladném prozkoušení ve 2.1) některé věci z 2.1 přeneseny: například autofs či socket hashing. |