středa 26. září 2018

Zajímavost: Telnet

Někteří z vás možná znají příkaz telnet, dostupný na většině operačních systémů, který se občas používá na textovou komunikaci pomocí protokolu TCP. Jeho původní účel byla nicméně podpora protokolu telnet (standardně na portu 23), který byl vytvořen za účelem vzdáleného přístupu k terminálům (jako jeden z nejstarších).

Telnet umožňuje přenášet proud jakýchkoliv dat, ale obsahuje také příznaky pro řízení komunikace, které mohou být obsaženy mezi datovými bajty. Pro jejich nastavení se používají čtyři typy zpráv: WILL, DO, WON'T, DON'T. Zajímavé je, že tyto zprávy mohou být použity jak v požadavku, tak i v odpovědi na něj a občas ani nemusí být jasné, o jakou pozici se jedná.

Telnet je diplomatický protokol – obě strany komunikace jsou si rovnocenné a musejí se vzájemně dohodnout na parametrech přenosu pomocí výše zmíněných zpráv. Příklad takové úvodní komunikace mezi zařízeními A a B může být třeba:

A: DO ECHO
B: WILL ECHO

V této komunikaci A požaduje po B, aby vracel zpět přijaté znaky (příznak ECHO), protože A je zobrazovat nebude. Všimněte si ale, jak se změní komunikace po malé úpravě:

B: WILL ECHO
A: DO ECHO

V tomto případě B informuje A, že bude opakovat přijaté znaky zpět. A s tímto návrhem souhlasí a svou zprávou to potvrzuje.

Tento systém komunikace je sice zajímavý, ale není z něj úplně patrné, jak se má zařízení chovat, pokud druhá strana odmítne spolupracovat. Komunikace by mohla probíhat například i takto (z pohledu A):

A: DO ECHO
B: WON'T ECHO
A: DON'T ECHO

A se nejspíš bude muset smířit, že B nedokáže jeho požadavku vyhovět a tak si zadané znaky bude opakovat sám, což poraženecky potvrdí. Jenomže vzápětí přijde od B zpráva WILL ECHO. Člověku může připadat, že B to asi nemá úplně jasno v obvodech, ale podívejme se, jak komunikaci pozoruje B:

B: WON'T ECHO
A: DO ECHO
B: WILL ECHO
A: DON'T ECHO

B napřed naznačí, že nechce opakovat znaky, ale A to nepotvrdí, a tak B nakonec souhlasí. V důsledku duplexní komunikace jsou totiž dvojice zpráv prohozeny, a tak B vnímá jako odpověď to, co A chtělo jako požadavek. Záměna těchto zpráv způsobí, že oběma zařízením asi musí připadat, že se to druhé zbláznilo, protože nesouhlasí ani s jednou ze dvou jediných možných variant. Komunikace takhle může probíhat donekonečna, pokud to síťové podmínky dovolí a ani jedna strana není natolik pokročilá, aby tomu zabránila.

Telnetový vtip

Už jsem slyšel vtip o TCP i o UDP, takže se pokusím o vtipnou konverzaci v telnetu. Příkazy jsou obdařené popisky:

A: DO ECHO (opakuj po mně)
B: WON'T ECHO (nechci)
A: DO ECHO (musíš po mně opakovat)
B: WON'T ECHO (nebudu)
A: DO ECHO (opakuj, nebo uvidíš)
 B: WON'T ECHO (nehodlám opakovat)
A: WILL SUBLIMINAL-MESSAGE (tak budu zobrazovat podprahové zprávy)
 B: DON'T SUBLIMINAL-MESSAGE (prosím, nedělej to)
 A: DO ECHO
 B: WILL ECHO

Docela rád bych viděl zařízení, se kterým by se takhle muselo komunikovat.

Žádné komentáře:

Okomentovat