Vyšlo v týdeníku Computerworld č. 35/92 v roce 1992
Vytištěno z adresy: http://www.earchiv.cz/a92/a235c110.php3

Adresování v TCP/IP sítích - II.

V minulém dílu našeho seriálu jsme se podrobněji zabývali IP adresami. Víme již, že představují jednotné adresy, které používá libovolný konglomerát vzájemně propojených sítí na bázi soustavy protokolů TCP/IP. Jsou však stále jen abstrakcí na úrovni síťové vrstvy, která odpovídá představě jednotné virtuální sítě. Ta je ale ve skutečnosti realizována dílčími sítěmi více či méně odlišného typu, které používají své vlastní mechanismy adresování a formáty adres. Proto také IP adresy musí být převáděny na takové konkrétní (fyzické) adresy, jaké příslušná dílčí síť skutečně používá (na úrovni vrstvy síťového rozhraní). Otázkou ovšem je, jak takovýto převod vůbec realizovat.

Představme si dva hostitelské počítače A a B, které mají po řadě IP adresy IA a IB. Předpokládejme dále, že jde o uzly téže (dílčí) sítě, které díky tomu mohou komunikovat mezi sebou přímo (resp. nejsou odkázány na bránu, resp. IP směrovač, propojující různé dílčí sítě). V rámci "své" dílčí sítě přitom mají oba uzly fyzické adresy FA a FB. Jestliže nyní síťová vrstva (IP vrstva) počítače A dostane od své transportní vrstvy za úkol přenést určitá data počítači s IP adresou IB(tj. počítači B), musí být schopna zajistit převod IP adresy IB na fyzickou adresu FB. Tu totiž potřebuje příslušný ovladač v bezprostředně nižší vrstvě (vrstvě síťového rozhraní), aby mohl přenášená data skutečně doručit. Podobně počítač B: jakmile bude chtít počítači A odpovědět, musí vědět, jaká fyzická adresa (FA) odpovídá IP adrese počítače A (IA).

Problém transformace adres a jeho řešení

Problém transformace adres vyšší úrovně na adresy nižší úrovně, konkrétně nalezení odpovídající fyzické adresy k IP adrese, se označuje jako address resolution problem. Je možné jej řešit například formou tabulky, obsahující seznam vzájemně si odpovídajících adres. Je to ovšem spojeno s četnými problémy - kdo a jak zajistí počáteční naplnění tabulky, kdo ji bude udržovat a přizpůsobovat momentálnímu stavu sítě, kdo zajistí, aby její velikost nepřesáhla únosnou mez atd.

Tam, kde je to jen trochu možné, se proto používají spíše jiná řešení, která jsou ovšem závislá na konkrétní povaze (dílčí) sítě a jím používaném mechanismu adresování.

Řešení pomocí přímého převodu

Velmi jednoduchá myšlenka, které se v této souvislosti sama nabízí, je neřešit převod výčtem (tj. pomocí tabulky), ale pomocí vhodné tranformační funkce (vzorečku pro převod). To je ale možné jen tam, kde si uživatel resp. zřizovatel sítě může fyzické adresy jednotlivých uzlových počítačů volit sám, podle vlastních potřeb. Tak je tomu například v sítích ARCnet či proNET-10, kde si uživatel při instalaci síťové karty do svého počítače sám volí její fyzickou adresu (a tím i fyzickou adresu počítače, připojeného prostřednictvím této síťové karty). Má-li například volitelná fyzická adresa rozsah 8 bitů (jako je tomu právě u sítí ARCnet i proNET-10), je nejjednodušší volit ji shodně s posledním oktetem (posledními osmi bity) IP adresy. Transformace IP adresy na fyzickou se pak stává zcela triviální.

Řešení pomocí dynamické vazby

Možnost volit fyzickou adresu přímo na síťovém adaptéru při jeho instalaci je v praxi únosná jen pro adresy malého rozsahu. Především je ale spojena s potenciálním nebezpečím lidských chyb, které mohou vyústit v existenci dvou adaptérů resp. uzlů se stejnou fyzickou adresou v jedné síti. Jiné síťové technologie se proto k celému problému staví opačně - uživateli nedávají žádnou možnost ovlivnit fyzickou adresu síťového adaptéru. Ten ji má v sobě jednou provždy pevně zabudovánu.

Takto je tomu například u lokálních sítí typu Ethernet. Ty používají fyzické adresy v rozsahu 48 bitů, které v příslušných síťových adaptérech nastavuje přímo jejich výrobce. Aby se zajistila jednoznačnost adres i mezi síťovými adaptéry různých výrobců, musí si každý z nich nechat přidělit určitý rozsah adres od centrální autority, která Ethernetovské adresy spravuje (a kterou je v tomto konkrétním případě americké sdružení IEEE).

Jakmile je ale potřeba transformovat 32-bitové IP adresy na 48-bitové Ethernetovské (či jiné "velké" adresy, které není možné podle potřeby volit), nezbývá než vrátit se zpět k převodním tabulkám, definujícím vzájemnou vazbu mezi jednotlivými adresami. Pokud možno ale nikoli ke statickým tabulkám, ale naopak k tabulkám dynamickým, které se vytváří a modifikují průběžně, podle okamžitého stavu sítě.

Protokol ARP

V soustavě protokolů TCP/IP je zahrnut velmi elegantní mechanismus dynamického budování a udržování převodních tabulek mezi IP adresami a fyzickými adresami, založený na protokolu ARP (Address Resolution Protocol). Ten využívá schopnosti všesměrového vysílání (tzv. broadcastingu) v některých sítích, které umožňují adresovat datový rámec všem uzlům dané lokální (resp. dílčí) sítě současně - bez nutnosti znát jejich konkrétní adresy. Například v sítích typu Ethernet lze vyslat datový rámec na jednu, předem známou speciální adresu, na kterou "slyší" všechny síťové adaptéry bez ohledu na svou konkrétní fyzickou adresu. Protokol ARP této možnosti využívá tak, že si jejím prostřednictvím nechá najít majitele příslušné IP adresy:

Obrázek 45.1.
Obr. 45.1.: Zjištění fyzické adresy podle IP adresy (protokol ARP)
Představme si situaci, kdy jeden uzlový počítač chce zaslat nějaká data jinému počítači v téže dílčí síti. Zná však pouze jeho IP adresu, nikoli jeho fyzickou adresu. Protokol ARP prvního počítače proto využije možnosti všesměrového vysílání, a všem uzlům dané dílčí sítě pošle zvláštní rámec resp. paket s dotazem: "Kdo má IP adresuţ....?" (viz obr. 45.1. a/). Tento rámec přijmou všechny uzly, a všechny také vyhodnotí paket, který je v něm obsažen. Pouze uzel B však rozpozná, že obsahuje jemu určený dotaz, a tak na něj odpoví zasláním své fyzické adresy (opět prostřednictvím speciálního paketu, jehož formát definuje protokol ARP). Ostatní uzly přitom na původní dotaz neodpovídají - viz obr. 45.1. b/.

Nebylo by ale únosné se takovýmto způsobem ptát při každém jednotlivém přenosu vždy znovu. Každý uzlový počítač si proto sám průběžně vytváří potřebnou převodní tabulku mezi IP adresami a fyzickými adresami (ve vhodné vyrovnávací paměti), a právě naznačený mechanismus využívá až v případě, kdy ji potřebuje doplnit či aktualizovat.

Protokol RARP

Protokol ARP umožňuje, aby každý hostitelský počítač (uzel) po svém spuštění vystačil jen se znalostí své vlastní fyzické adresy a své vlastní IP adresy (kterou si obvykle přečte z konfiguračního souboru na svém pevném disku). Na fyzické adresy všech ostatních uzlů ve své dílčí sítí se pak vhodně "doptá". Otázkou ovšem je, jak tomu bude v případě bezdiskových stanic, které si svou IP adresu z vlastního pevného disku přečíst nemohou.

Obrázek 45.2.
Obr. 45.2.: Zjištění vlastní IP adresy pro bezdiskovou stanici (protokol RARP)
Po svém spuštění si každá bezdisková stanice musí svou vlastní IP adresu nejprve vyžádat na jiném uzlovém počítači, který vůči ní vystupuje v roli serveru IP adres. Způsob, jakým se na něj bezdisková stanice obrací, je analogický výše naznačenému mechanismu protokolu ARP - prostřednictvím všesměrového vysílání bezdisková stanice rozešle všem ostatním uzlům dotaz typu: "Jaká je moje IP adresa?". Sebe sama přitom stanice identifikuje prostřednictvím fyzické adresy, kterou má zabudovánu ve svém síťovém adaptéru - viz obrázek 45.2. a/.

Konkrétní protokol, prostřednictvím kterého si bezdisková stanice může svou IP adresu vyžádat, vychází z protokolu ARP, a je označován jako RARP (Reverse Address Resolution Protocol).