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

Prezentační vrstva

Pět nejnižších vrstev referenčního modelu ISO/OSI dělá vše pro to, aby přenášená data vždy dorazila ke svému koncovému příjemci přesně v takové podobě, v jaké byla vyslána. Stejná "podoba" však ještě nezaručuje, že pro příjemce nebudou jedna a tatáž data představovat něco jiného, než pro jejich odesilatele.

Obavy z různé interpretace přenášených dat nejsou zdaleka bezdůvodné. Stačí si uvědomit, že např. střediskové počítače firmy IBM používají pro kódování znaků kód EBCDIC, zatímco drtivá většina ostatních používá ke stejnému účelu kód ASCII. Ke znázornění celých čísel se znaménkem používá většina počítačů tzv. dvojkový doplňkový kód, ale např. počítače CDC Cyber pracují s tzv. jedničkovým doplňkovým kódem. Mikroprocesory 80x86 firmy Intel číslují jednotlivé byty (ve slovech, dvojslovech atd.) jedním směrem, zatímco například mikroprocesory řady M68000 firmy Motorola číslují jednotlivé byty přesně opačně. Velmi časté jsou pak také odlišnosti například ve formátu čísel v pohyblivé řádové čárce, odlišné rozsahy zobrazitelných celých čísel (dané počtem k tomu vyhrazených bitů) apod.

Různé počítače tedy v obecném případě používají různé způsoby vnitřní reprezentace dat. Mají-li si takové počítače svá data korektním způsobem vzájemně předávat, musí být vhodným způsobem zajištěny jejich nezbytné konverze. A ty má v referenčním modelu ISO/OSI na starosti právě prezentační vrstva (presentation layer).

Prezentační vrstva se tedy stará o to, aby například celé číslo bez znaménka s hodnotou 234 bylo přijato opět jako celé číslo bez znaménka s hodnotou 234, a ne např. jako celé číslo se znaménkem s hodnotou -22. Není však již úkolem prezentační vrstvy zabývat se tím, co toto číslo znamená. Zda jde např. o počet osob, o číslo stránky v knize, o procentuální výši inflace či něco docela jiného. To přísluší až vlastním aplikacím, které jsou zdrojem resp. příjemcem těchto dat.

Obrázek 37.1.
Obr. 37.1.: Možnosti konverze
a/ typu "každý s každým"
b/ se společným "mezitvarem"
Pro zajištění nezbytných konverzí na úrovni prezentační vrstvy se nabízí dvě základní možnosti, které naznačuje obrázek 37.1. První z nich představuje vzájemné přímé přizpůsobení stylu "každý s každým", při kterém jsou přenášená data konvertována jen jednou - jsou-li ovšem k dispozici nezbytné konverzní rutiny pro libovolnou dvojici komunikujících uzlů. Ve druhém případě jsou přenášená data konvertována dvakrát: ze tvaru, se kterým pracuje odesilatel, jsou nejprve převedena do společného "mezitvaru", a z něj pak do takového tvaru, s jakým pracuje jejich příjemce. Nevýhoda dvojí konverze je zde kompenzována tím, že pro každou konkrétní reprezentaci dat, se kterou pracuje nějaký počítač, stačí jediná konverzní utilita pro jejich převod z/do společného "mezitvaru".

Referenční model ISO/OSI předpokládá právě tuto druhou variantu se společným mezitvarem. Podívejme se proto na její podstatu poněkud podrobněji.

Chtějí-li vzájemně spolupracovat dvě různé síťové aplikace, musí se nejprve domluvit na společných datových strukturách, které budou používat - tedy například na tom, že datum budou reprezentovat jako záznam (record) tvořený třemi položkami (DEN, MESIC a ROK), které jsou samy o sobě celými čísly bez znaménka. Tyto datové struktury je ovšem nutné vyjádřit tak, aby jejich popis byl pro obě strany srozumitelný, a obě strany si jej také stejně vykládaly. Kdyby byly všechny síťové aplikace psány v jediném vyšším programovacím jazyku, stačilo by použít právě tento jazyk. Předpoklad použití jediného programovacího jazyka však nebyl, není a zřejmě nikdy nebude v praxi splněn, a tak bylo nutné vytvořit pro potřeby formálního popisu dat a datových struktur zvláštní jazyk, který byl nazván ASN.1 (Abstract Syntax Notation). Umožňuje definovat jednotlivé datové položky, stanovit jejich typ (tj. určit, zda jde např. o celé číslo se znaménkem, znakový řetězec či logickou hodnotu apod.), přidělit jim jméno (identifikátor), a také sestavit z jednoduchých datových položek obecnější datové struktury typu záznam, pole, seznam, množina apod.

Obrázek 37.2.
Obr. 37.2.: Představa fungování prezentační vrstvy
Jazyk ASN.1, který vzdáleně připomíná jazyk Pascal, je tedy jazykem pro formální popis dat - což se v terminologii ISO/OSI modelu označuje jako abstraktní syntaxe (abstract syntax). Abstraktní proto, že ještě neurčuje žádný konkrétní způsob reprezentace těchto dat. Pro potřeby vlastního přenosu je ale samozřejmě nutné veškerá data vhodným způsobem zakódovat. Způsob kódování datových struktur jazyka ASN.1 pro potřeby jejich přenosu pak určuje samostatná norma organizace ISO (IS 8825). Formát skutečně přenášených dat se přitom v terminologii ISO/OSI modelu označuje jako přenosová syntaxe (transfer syntax). Její konkrétní tvar je založen na myšlence, že každá jednotlivá položka dat by měla být samoidentifikující, tedy měla by sebou nést i informaci o vlastním typu. Každá datová položka proto má při přenosu tři části, které po řadě určují její typ, délku a vlastní obsah (viz obrázek 37.2.).

Způsob fungování prezentační vrstvy názorně ilustruje obrázek 37.2. Kdykoli chce nějaká entita aplikační vrstvy zaslat určitá data své partnerské entitě na jiném uzlovém počítači, předá "své" prezentační vrstvě jednak vlastní data, která si přeje odeslat, a jednak jejich popis v jazyce ASN.1 (který definuje jejich abstraktní syntaxi). Prezentační vrstva na základě tohoto popisu dokáže správně interpretovat jednotlivé položky dat (určit mj. jejich typ a velikost), a na základě toho je pak zakódovat do takového tvaru, který je vhodný pro přenos, a který si sebou nese potřebné informace o typu a formátu přenášených dat (tj. převést je do přenosové syntaxe). Prezentační vrstva na straně příjemce pak díky tomu dokáže správně určit typ a formát přijatých dat, a v případě potřeby provést nezbytné konverze. Jestliže například přenosová syntaxe počítá s vyjádřením celých čísel se znaménkem ve dvojkovém doplňku, ale příjemce používá ke stejnému účelu jednotkový doplněk, může prezentační vrstva příjemce provést nezbytné konverze ještě dříve, než přijatá data předá své bezprostředně vyšší (tj. aplikační vrstvě).

Prezentační vrstvy příjemce a odesilatele se však nejprve musí shodnout na tom, jaké datové struktury si vlastně budou předávat, a jakou budou pro ně používat přenosovou syntaxi. Proto se musí obě strany na začátku vzájemného spojení (přesněji: při zahajování relace) nejprve dohodnout na jednom nebo několika tzv. kontextech, jak se v terminologii ISO/OSI modelu nazývá přiřazení přenosové syntaxe k syntaxi abstraktní. V průběhu relace se pak mohou mezi těmi kontexty, na kterých se oba dohodli, dokonce přepínat.

Obrázek 37.3.
Obr. 37.3.: Představa překladače jazyka ASN.1
V současné době je praktické používání jazyka ASN.1 značně usnadněno existencí překladačů z tohoto jazyka do obvyklých vyšších programovacích jazyků, např. do Pascalu či jazyka C. Jak názorně ukazuje obrázek 37.3., je vstupem tohoto překladače popis datových struktur v jazyku ASN.1, a výstupem jednak ekvivalentní popis v příslušném cílovém jazyku (tedy např. v C či v Pascalu), který pak lze přilinkovat ke zdrojovému tvaru vlastní aplikace, a dále také kódovací a dekódovací rutiny (určené pro potřeby prezentační vrstvy), které převádí datové struktury z příslušného cílového jazyka přímo do jejich přenosové syntaxe resp. obráceně.

Hlavním úkolem prezentační vrstvy je tedy zajištění nezbytných konverzí přenášených dat. Není to ovšem úkol jediný - na úrovni prezentační vrstvy může být například řešeno také zabezpečení přenášených dat pomocí šifrování (encryption), které ovšem lze realizovat i na úrovni fyzické nebo transportní vrstvy. Pro minimalizaci objemu přenášených dat pak může být na úrovni prezentační vrstvy zajišťována i jejich komprimace (compression).