Vyšlo na www.novinky.cz dne 18.2.1999
Vytištěno z adresy: http://www.earchiv.cz/anovinky/ai1646.php3

IP adresy

Celá koncepce protokolů TCP/IP je vybudována na předpokladu, že každý uzel sítě má přiřazenu celosvětově unikátní číselnou adresu (tzv. IP adresu). Pokud jde o Internet, zde používání IP adres i jejich přidělování prošlo zajímavým vývojem, který reagoval na specifika doslova explodujícího Internetu, zejména na jeho velikost a obrovský počet uzlů.

Autoři protokolů TCP/IP se v sedmdesátých letech museli vyrovnat s mnoha složitými úkoly. Jedním z nich byla i otázka volby vhodné struktury adres na úrovni síťové vrstvy TCP/IP - tedy vrstvy zajišťující přenos datových bloků (paketů) i přes mezilehlé uzly až na místo jejich určení. Tyto adresy musely být jednotné a univerzálně použitelné pro celou soustavu vzájemně propojených sítí, která díky protokolům TCP/IP může vzniknout, a to bez ohledu na to, že různé části výsledné soustavy mohou být provozovány nad různými přenosovými technologiemi. Některé například nad ethernetem, jiné nad sériovými linkami (pronajatými datovými okruhy a ještě jiné třeba nad technologií X.25. Každá z těchto přenosových technologií, spadajících do vrstvy síťového rozhraní (Network Access Layer, viz minulý díl) přitom používá své specifické adresy, které jednotlivým uzlům přiřazuje a které mohou být nejen různě velké, ale mohou mít i zcela jiný význam. Například v sítích na bázi ethernetu mají uzly své fyzické (ethernetové) adresy v rozsahu 48 bitů napevno zabudované již ve svých síťových adaptérech (a to od výrobců), zatímco například u sítě ARCNET jsou fyzické adresy uzlů pouze 8-bitové a správce sítě je musí sám nakonfigurovat na příslušném adaptéru.

Když se autoři protokolů TCP/IP rozhodovali, jaké adresy zvolit pro síťovou vrstvu, mohli použít jako základ fyzické adresy (adresy používané na úrovni vrstvy síťového rozhraní). Přesně tak to učinili například autoři protokolů IPX/SPX od firmy Novell. Výhodou tohoto řešení je snadný převod síťových adres na fyzické. Autoři protokolů TCP/IP se ale rozhodli pro jiné řešení - zvolili zcela nové a ryze abstraktní adresy (abstraktní v tom smyslu, že nemají přímý ekvivalent v žádných fyzických adresách). Pro jejich rozsah zvolili určitý kompromis mezi největšími fyzickými adresami (což jsou zřejmě 48-bitové ethernetové) a jejich nejmenšími variantami - rozhodli se pro adresy v rozsahu 32 bitů. Přesně tolik bitů mají jimi zavedené IP adresy.

Jaká je vnitřní struktura IP adres?

Na každou jednotlivou IP adresu je možné se dívat jako na souvislý řetězec 32 bitů, neboli jako na jedno 32-bitové binární číslo IP, bez jakéhokoli vnitřní struktury (tj. bez toho, aby jednotlivým skupinám bitů v rámci této adresy byl přisuzován specifický význam). Pro některé účely (například pro potřeby směrování) je ale přece jen výhodnější dát IP adresám určitou vnitřní strukturu - konkrétně možnost jejich rozčlenění do dvou logických složek, které po řadě odpovídají adrese (číslu) sítě jako takové a relativní adrese (číslu) konkrétního uzlu v rámci této sítě.

[Obr: bs4_1.gif (1655 Bytes)]
Představa rozdělení IP adresy na dvě logické části

Pro správné pochopení tohoto požadavku je dobré si říci, že autoři protokolů TCP/IP od začátku vycházeli z tzv. katenetového modelu Internetu. Předpokládali totiž, že výsledný Internet (tehdy chápaný spíše jako obecná soustava vzájemně propojených sítí, neboli internet) bude tvořen soustavou vzájemně propojených dílčích sítí, přičemž první složka 32-bitové IP adresy bude identifikovat dílčí síť jako takovou a druhá složka bude relativní adresou uzlu uvnitř této sítě.

[Obr: bs4_2.gif (3617 Bytes)]
Představa katenetového modelu

Logickou dvousložkovost IP adres (neboli jejich rozdělení na "síťovou" část a "relativní adresu uzlu") pak autoři protokolů TCP/IP využili například pro potřeby směrování - pokud se nějaký mezilehlý uzel propojující dvě dílčí sítě (tzv. směrovač) rozhoduje, kudy pošle nějaký datový paket, dívá se na adresu jeho příjemce a řídí se tou jeho složkou, která představuje adresu cílové sítě. Takže směrování vlastně probíhá na základě příslušnosti konkrétního cílového uzlu do určité cílové sítě (a teprve na samém konci jeho přepravy, už v cílové síti, je datový paket doručen podle "uzlové" části IP adresy svého příjemce).

IP adresy se přidělují celým sítím

Rozdělit 32-bitové adresy na dvě logické složky by bylo možné provést statickým způsobem - například tak, že se jednou provždy řekne, že prvních 16 bitů představuje síťovou část adresy, zatímco druhých 16 bitů představuje relativní adresu uzlu. To by pak ale znamenalo, že jakákoli soustava vzájemně propojených sítí na bázi protokolů TCP/IP (tedy například i dnešní Internet) bude mít nejvýše 2 na 16 (tj. 65 536) dílčích sítí a každá z nich bude mít nejvýše 2 na 16 uzlů.

Kdyby se takto koncipované adresy skutečně přidělovaly konkrétním sítím, docházelo by ke dvěma nepříjemným problémům: pro velké sítě, které mají více než 65 536 uzlů, by tyto adresy nestačily. Naproti tomu malé sítě, například sítě o 10 či 100 uzlech, by fakticky použily jen zmíněných 10 či 100 konkrétních IP adres, ale fakticky by "vyčerpaly" celých 65 536 různých IP adres (protože nikde jinde by už nemohly být použity adresy se stejnou hodnotou první složky, vyjadřující adresu sítě jako takové). Z tohoto důvodu by menší a malé sítě způsobovaly značnou nehospodárnost v hospodaření s IP adresami (pro faktické použití několika desítek či stovek adres se jich "vyhodí" hned několik desítek tisíc). Naproti tomu u velkých sítí by nastával opačný problém, protože by se konkrétních adres nedostávalo.

Tři třídy IP adres

Autoři protokolů TCP/IP však naštěstí od začátku předpokládali, že v praxi se budou vyskytovat jak sítě hodně velké, neboli sítě s velkými počty uzlů (kterých ale nejspíše bude málo), tak i sítě s malými počty uzlů (kterých ale může být hodně) a samozřejmě i sítě středně velké. Tomuto předpokladu pak přizpůsobili konkrétní způsob rozdělení 32-bitových IP adres na dvě logické části, který nefixovali způsobem naznačeným v předchozím odstavci. Místo toho navrhli tři "předdefinované" způsoby rozdělení IP adres na obě logické části, odpovídající očekávaným potřebám sítí velkých, středních a malých.

Tímto způsobem vznikly tři třídy adres, označované po řadě jako A, B a C (viz obrázek). V třídě A je pomyslná dělicí čára vedena mezi prvním a druhým bytem celé čtyřbytové adresy. To znamená, že pro relativní adresu uzlu v rámci sítě jsou určeny plné 3 byty (tj. 2 na 24 bitů), zatímco pro vyjádření síťové části adresy slouží pouhých 7 bitů (a 8. bit v prvním bytu slouží k rozlišení tohoto druhu adresy). Řečeno jinými slovy, třída A počítá s existencí až 2 na 7 (neboli 128) opravdu velkých sítí, z nichž každá může mít až úctyhodných 2 na 24 uzlů.

[Obr: bs4_3.gif (3110 Bytes)]
Třídy IP adresi

Třída B počítá s tím, že pomyslná dělící čára vede mezi druhým a třetím bytem celé čtyřbytové adresy. To znamená, že pro síťovou část adresy je vyhrazeno 14 bitů (dva zbývající do šestnácti jsou nutné pro identifikaci tohoto typu adresy) a pro relativní část adresy je k dispozici 16 bitů - adresy třídy B tedy počítají s 2 na 14 různých sítí, z nichž každá může mít nejvýše 65536 uzlů. Jde tedy o "střední" sítě.

V případě třídy C je pomyslná dělící čára vedena mezi třetím a čtvrtým bytem, takže pro relativní část adresy zbývá jediný byte - adresy tohoto typu jsou tedy určeny pro malé sítě s maximálně 256 uzly. Zato však takovýchto sítí může být velký počet, protože pro síťovou část adresy je vyhrazeno 21 bitů (24 bez tří identifikačních bitů).

Upřesnění

V zájmu srozumitelnosti jsou ve výše uvedeném textu použita určitá zjednodušení. Jedno se týká samotné představy o tom, co IP adresu identifikuje. Není to uzel sítě jako takový, ale konkrétní síťové rozhraní (například tzv. síťová karta). Konkrétní počítač totiž může být připojen k síti pomocí více různých síťových rozhraní (z nichž každé má samostatnou IP adresu), nebo může být dokonce připojen pomocí více síťových rozhraní do různých sítí současně.

Další zjednodušení se týká počtu konkrétních IP adres, které je možné "dosáhnout" při určitém počtu bitů, které jsou k dispozici. Zde je nutné si uvědomit, že adresy tvořené samými jedničkami a samými nulami mají speciální význam a neměly by se tudíž započítávat (samé nuly vyjadřují síť jako celek a samé jedničky představují tzv. broadcastovou adresu, na kterou by měly "slyšet" všechny uzly v dané síti). Je-li tedy například k dispozici 8 bitů pro relativní adresu (u adres třídy C), pak to odpovídá 256 možným hodnotám. Z nich ale obě krajní nelze přidělit koncovým uzlům, takže fakticky může být v dané síti jen 254 uzlů.

Ještě další skutečností, kterou jsme si dosud neuvedli, je existence dvou dalších tříd IP adres - jsou to adresy třídy D, určené pro tzv. multicast (skupinové vysílání) a skupiny E (pro budoucí využití). Adresy těchto tříd jsou zajímavé tím, že jsou logicky jednosložkové.

Přidělování IP adres

Prvotní představa autorů protokolů TCP/IP byla taková, že IP adresy budou přidělovány po celých "blocích" a se stejnou síťovou částí - takže například i sebemenší síť musela dostat přiděleno 256 konkrétních (resp. 254 využitelných) IP adres - neformálně označovaných jako "jedno C-čko" (neboli: jedna síťová adresa třídy C). Analogicky pro střední a velké sítě, které dostávaly přidělené vždy celé síťové adresy třídy B, resp. A. Vzhledem k principu směrování, založeném na příslušnosti k sítí jako takové, to ani jinak nešlo.

Další požadavek mechanismu směrování (aby každý uzel měl unikátní IP adresu) si v konkrétním případě Internetu vyžádal zřízení jediné centrální instituce přidělující takovéto adresy pro celý svět. Každý, kdo požadoval pro svou síť přidělení celosvětově unikátních IP adres, se na tuto centrální instituci obrátil a dostal přiděleno tolik síťových adres, kolik odpovídalo jeho požadavku.

Objevují se první problémy

Původní představa autorů, vykreslená v předchozích odstavcích, byla v době vzniku protokolů TCP/IP i rodícího se Internetu plně postačující a skýtala ještě dostatečnou rezervu pro budoucí růst. V době, kdy vše vznikalo (v polovině sedmdesátých let) těžko někdo mohl anticipovat obrovský rozvoj Internetu, ke kterému došlo za dvě desetiletí. Proto se "dostatečná rezerva" z poloviny sedmdesátých let později ukázala jako úzké místo, když IP adres začalo ubývat opravdu rychlým tempem (a dokonce začalo hrozit jejich brzké vyčerpání).

Další problém, který časem vyvstal, s obrovskou poptávkou po IP adresách také souvisí. Jde o problém velké složitosti směrovacích tabulek, podle kterých směrovače v Internetu rozhodují o dalším směru přenosu datových paketů, které přes ně prochází. Pokud jsou totiž jednotlivé síťové adresy (zejména síťové adresy třídy C) přidělovány takovým způsobem, že mezi nimi není žádná souvislost (v tom smyslu, že když dvě sítě mají "sousední" síťové adresy, nemusí se vůbec nacházet "blízko sebe"), pak objem směrovacích tabulek rychle roste a samotné směrování se stává neúnosně složitým a náročným.

Časem se samozřejmě musela objevit nějaká řešení obou těchto souvisejících problémů. V zásadě šlo o dva principiální přístupy - řešení dočasná, usilující o zpomalení eskalace problémů, a řešení koncepční, která odstraňují celý problém jako takový. Přitom již dočasná řešení zásadním způsobem změnila jak způsob distribuce IP adres v rámci Internetu, tak i jejich přesný význam. O tom ale až příště.