Vyšlo v měsíčníku CHIP č. 4/98, duben 1998
Vytištěno z adresy: http://www.earchiv.cz/a98/a804c200.php3

Elektronická pošta á la TCP/IP - část I.

Elektronická pošta patří mezi nejoblíbenější a nejpoužívanější služby dnešních počítačových sítí. Vyskytuje se v mnoha podobách, které mohou vycházet z různých koncepcí elektronické pošty - jednou z takovýchto koncepcí je i ta, která je součástí rodiny protokolů TCP/IP.

S potřebou přenosu krátkých textových zpráv, neboli s potřebou elektronické pošty, počítali i lidé, kteří se počátkem sedmdesátých let podujali úkolu vyvinout novou soustavu protokolů pro tehdy teprve se rodící síť Internet. Výsledkem jejich práce se staly protokoly TCP/IP, na kterých se Internet posléze rozvinul do své dnešní celosvětové podoby. Součástí těchto protokolů se stalo i konkrétní řešení elektronické pošty, založené na přenosovém protokolu SMTP (Simple Mail Transfer Protocol) - právě podle něj se pak celé této koncepci začalo říkat "SMTP pošta".

Důležité a podstatné je, že SMTP pošta může být nasazena všude tam, kde se používají protokoly TCP/IP - tedy jak v Internetu (neboli v globální počítačové síti, která se vlastním jménem jmenuje Internet, psáno s velkým "I"), tak i v kterémkoli internetu, neboli v kterékoli soustavě vzájemně propojených sítí (které se obecně říká internet, psáno s malým "i"). Ani použití ostatních protokolů TCP/IP však není nezbytnou podmínkou, protože "SMTP pošta" může být implementována dokonce i v prostředí, které používá jiné síťové a transportní protokoly.

Nezapomínejme ale na to, že SMTP pošta je jen jedna z několika "druhů pošt", neboli ucelených koncepcí elektronické pošty - mezi další patří například koncepce X.400, pocházející ze světa ISO/OSI (na ní je založen například poštovní systém MS Exchange firmy Microsoft), či proprietární platforma Mail602, pocházející od tuzemské firmy Software602. Obecně pak každá platforma používá nejen vlastní mechanismy přenosu zpráv, ale také vlastní formáty jednotlivých zpráv - z tohoto důvodu nejsou jednotlivé systémy elektronické pošty, vycházející z různých koncepcí, vzájemně kompatibilní. Jedinou možností jejich vzájemné interoperability pak jsou poštovní brány, zajišťující potřebný převod z jednoho systému do druhého - jde například o brány X.400-SMTP, SMTP-Mail602 apod. V rámci koncepce SMTP, neboli mezi jednotlivými implementacemi SMTP pošty, je vzájemná interoperabilita zajištěna, a to dokonce i v případě, že samotný protokol SMTP pro přenos zpráv je nahrazen jiným přenosovým protokolem (pro interoperabilitu je totiž důležité spíše to, jaké jsou formáty zpráv).

Jaká je SMTP pošta?

Pro správné pochopení "SMTP pošty" je dobré si nejprve přiblížit její genezi. Na počátku vznikala skutečně jako služba pro přenos krátkých, čistě textových zpráv (psaných v tzv. čistém ASCII kódu). Bylo to navíc v době, kdy byl kladen poměrně velký důraz na efektivnost fungování. Proto se autoři "SMTP pošty" rozhodli důsledně respektovat své zadání a vytvořit systém přenosu zpráv, který garantuje přenos "čistých ASCII textů", neboli textů složených ze znaků, které lze znázornit v sedmi bitech. Abychom tomu správně porozuměli: standard, který definuje SMTP poštu explicitně říká, že musí být korektně přeneseny zprávy, jejichž obsah tvoří sedmibitové ASCII znaky. Jde dokonce tak daleko, že říká jakým způsobem mají být tyto sedmibitové znaky přenášeny skrz přenosové cesty, které jsou osmibitové (a to tak, že sedmibitové kódy znaků mají být zarovnány směrem k nižším binárním řádům, a nejvyšší bit má být nastaven na nulu). Neříká ale, jakým způsobem má být naloženo s takovým obsahem, který tvoří osmibitové znaky. V praxi to znamená, že každá implementace se vůči osmibitovým znakům v těle zpráv může chovat různě - může je korektně přenášet, nebo je může "ořezávat" na sedmibitové (tj. nastavovat jejich nejvyšší bit na nulu) apod., a stále to bude v souladu se standardem, který definuje SMTP poštu. Pro uživatele to znamená jedno: bude-li se snažit přenést pomocí SMTP pošty zprávu obsahující nějaké osmibitové znaky, může se mu to podařit (a dokonce je to i poměrně pravděpodobné). Není to ale zaručené, protože "po cestě" může být nějaký úsek, který sice odpovídá pravidlům (standardu SMTP pošty), ale vůči nejvyšším bitům osmibitových znaků se chová "nevhodně".

V dnešní době, kdy lidé mají zájem přenášet elektronickou poštou i jiné věci, než jen krátké texty složené výhradně z ASCII znaků (v našich zeměpisných šířkách třeba zprávy psané s českou diakritikou, ale třeba také různé netextové přílohy apod.). řešení naštěstí není principiálně těžké - všechno, co není čisté ASCII,se jednoduše přetransformuje tak, aby to mělo tvar čistého ASCII textu. Pak je zaručeno, že se to korektně přenese, a na druhé straně se zase provede inverzní transformace, která vše vrátí do původního stavu. Fakticky to opravdu není nijak těžké - skutečně těžké bylo pouze to, než se lidé shodli na jednotném způsobu, jakým to udělat. Tak vzniknul standard MIME (Multipurpose Internet Mail Extensions), kterém se budeme podrobněji věnovat příště.

Architektura SMTP pošty

Stejně jako většina dalších služeb počítačových sítí, má i elektronická pošta á la TCP/IP architekturu klient/server. To znamená, že počítá s dvoučlennou dělbou práce: s existencí poštovních serverů, které zajišťují faktický přenos jednotlivých zpráv (a komunikují spolu prostřednictvím protokolu SMTP, Simple Mail Transfer Protocol), a s existencí poštovních klientů, kteří zajišťují veškerý kontakt s uživatelem - tedy například psaní nových zpráv, čtení došlých zpráv, vedení adresářů poštovních adres, archivaci starších zpráv apod. Tito poštovní klienti (poštovní programy, typu MS Outlook, Outlook Express, Netscape Mail, Eudora, Pegasus apod.) si dnes uživatelé provozují na svých osobních počítačích, zatímco poštovní servery "běží" na serverech, umístěných na vhodném místě v síti. Původně tomu ale takto nebylo - koncepce SMTP pošty vznikala v době, kdy se používaly spíše hostitelské počítače a aplikace pracující v režimu host/terminál. Prakticky to znamenalo, že poštovní server a poštovní klient (alespoň v dnešním slova smyslu) běželi na stejném počítači a komunikovali spolu prostřednictvím souborů, umístěných ve sdílených adresářích.

Později, když došlo k "osamostatnění" poštovních klientů a jejich přestěhování na osobní počítače jednotlivých uživatelů, bylo nutné vymyslet nový způsob jejich komunikace. Původní protokol SMTP bylo možné použít pouze pro jeden směr komunikace, neboli pro faktické odesílání zpráv (pro předání odesílané zprávy od poštovního klienta k příslušnému poštovnímu serveru). Pro opačný směr bylo nutné vyvinout zcela nový protokol. Vzniklo jich dokonce několik, ale nejvíce se prosadil protokol jménem POP (Post Office Protocol), verze 3 (neboli POP3).

Současně s přestěhováním poštovních klientů na osobní počítače uživatelů došlo i k určitému roztržení jejich poštovní schránky. Původně "monolitická" schránka, určená jak pro právě došlou a dosud nepřečtenou poštu, tak i pro zprávy již přečtené, se musela rozdělit na dvě části - část, do které se ukládají došlé, ale dosud nevyzvednuté poštovní zprávy, nutně musela zůstat na poštovním serveru. Naproti tomu již "vyzvednuté" zprávy (které si uživatel vyzvednul, neboli pomocí protokolu POP3 stáhnul z poštovního serveru k sobě), se hromadí u něj, na jeho počítači, ve druhé části jeho poštovní schránky.

Právě popsaným uspořádáním se vyřešila i jedna velmi důležitá potřeba - potřeba podpory komutovaných uživatelů (tedy například majitelů notebooků). Ti se nyní mohou odkudkoli připojit k Internetu, pomocí protokolu POP3 si stáhnout svou čerstvě došlou poštu ze svého poštovního serveru, poté se zase odpojit, a svou poštu si pak zpracovávat místně, bez nutnosti připojení k Internetu.

Jak funguje přenos pošty?

Původní koncepce SMTP pošty počítala s tím, že adresy jednotlivých zpráv budou typu @. To umožňovalo, aby odesílající poštovní server, podle pravidel protokolu SMTP, navázal přímé spojení s cílovým uzlem (podle jeho adresy), zeptal se jej zda je ochoten přijmout poštu pro příslušného uživatele (uvedeného v adrese), a pokud ano, zprávu mu předal (načež přijímající poštovní server ji uložil do poštovní schránky příslušného uživatele).

I zde ale došlo k výrazným změnách - dnešní adresy mají stále více formát @, tedy například Jan.Stoklasa@vogel.cz, jiri@peterka.cz apod. Jak se ale potom doručují jednotlivé zprávy? Ukažme si to na konkrétním příkladu zprávy, určené adresátovu jiri@peterka.cz (viz obrázek): odesilatel připraví zprávu na svém počítači, a zadá její odeslání. To fakticky znamená, že jeho klientský program předá tuto zprávu, pomocí protokolu SMTP, "svému" poštovnímu serveru (tomu, který je uveden v jeho konfiguraci). Tento server se podívá na část adresy vpravo od zavináče (zde: peterka.cz), a snaží se ptát systému DNS (systému doménových jmen v Internetu), kam má být doručována pošta pro doménu peterka.cz. Odpověď mu může poskytnout pouze name server této domény, na který se odesílající server se svým dotazem musí obrátit (pokud nezná jeho adresu, musí se zeptat nejprve serveru nadřízené domény .cz, viz obrázek). V name serveru domény peterka.cz by měl být tzv. MX záznam (záznam typu Mail Exchange), který vyjadřuje požadovanou informaci - v tomto konkrétním případě fakt, že veškerá pošta pro uživatele z domény peterka.cz má být fakticky doručována na počítač se jménem mail.czech.net. Proto odesílající poštovní server naváže spojení s tímto poštovním serverem (mail.czech.net), a zprávu mu pošle. Přijímající poštovní server (mail.czech.net) však stále ještě nemusí vědět, kterému konkrétnímu uživateli zpráva fakticky patří - proto se podívá do svého seznamu tzv. poštovních aliasů (tabulky s údaji typu: pošta adresovaná uživateli XY ve skutečnosti patří uživateli YZ).

Skutečný přenos elektronické pošty v dnešním Internetu může být dokonce ještě složitější než právě popsaný příklad - v praxi totiž musí být pamatováno například i na situace, kdy cílový poštovní server není momentálně dostupný, a místo něj se pošta dočasně přenese na jiný poštovní server (fungující jako tzv. mail spool).