Hlavní navigace

Transportní protokol SCTP

17. 5. 2001
Doba čtení: 4 minuty

Sdílet

Dlouhá léta nabízel Internet dva transportní protokoly: UDP pro nezaručený přenos dat a TCP, který zajišťoval spolehlivé služby. Nově jim přibyl třetí do mariáše: Stream Control Transmission Protocol (SCTP). Podívejme se mu na zoubek.

Jeho kořeny najdete v telefonických kruzích – s definicí protokolu přišla IETF skupina SIGTRANS, která se zabývá přenosem telefonní signalizace po IP. Odtud pochází požadavek na několik navzájem nezávislých kanálů, které jsou přepravovány paralelně.

Právě tohle je zřejmě největší odlišností SCTP od stávajících transportních protokolů. Po navázání spojení, kterému se v terminologii SCTP říká asociace, po něm lze přenášet řadu navzájem nezávislých proudů (stream). V rámci každého z nich dokáže SCTP garantovat doručení všech dat ve správném pořadí. Případný výpadek (a pozdější opakování, čili zdržení) v některém z proudů se však nijak netýká proudů ostatních. Jejich komunikace pokračuje bez přerušení.

Schopnosti SCTP asociace by se tedy zhruba daly přirovnat ke svazku souběžných TCP spojení. Ovšem SCTP asociace by měla mít menší režii a nabízí také pár vylepšení.

Formát SCTP paketu odpovídá jeho charakteru. Začíná univerzální hlavičkou, která obsahuje jen nejzákladnější údaje: čísla portů identifikující aplikace na obou koncích asociace, údaj pro ověření totožnosti odesilatele a kontrolní součet. Dále pak následují tak zvané kousky (chunks), které mohou obsahovat řídicí informace či data pro jednotlivé proudy. Jejich počet ani struktura nejsou pevně dány – paket se skládá podle aktuální potřeby.

395

Citelné změny v porovnání s TCP zaznamenalo potvrzování. SCTP k němu využívá pořadová čísla (jak také jinak), která zde najdete na dvou úrovních: Transmission Sequence Number (TSN) slouží k číslování jednotlivých datových kousků (na úrovni asociace), zatímco Stream Sequence Number (SSN) určuje číslování v rámci jednoho konkrétního proudu.

Hlavní předností potvrzování v SCTP je, že dokáže ohlásit chybějící kusy dat. Slouží k tomu speciální kousek nazvaný selektivní potvrzení. Ten obsahuje nejvyšší pořadové číslo přijatého datového kousku a zároveň vyjmenovává chybějící úseky dat. Díky tomu je odesilatel přesně informován, která data dorazila a která ne. Navíc pokud vysílající dostane čtyři potvrzení ohlašující stejnou díru v datech, na nic nečeká a chybějící část rovnou pošle znovu (tzv. rychlé opakování).

Do SCTP byly zapracovány mechanismy, kterými se může dobře vyrovnávat se zahlcením sítě či protějšího partnera. Stejně jako v TCP je jejich základem okénko, které určuje, kolik dat lze ještě odeslat. Jeho velikost si řídí příjemce. Navíc se do ní promítá úspěšnost dosavadního doručování prostřednictvím tak zvaného okna zahlcení (při opakování prudce klesne, při úspěšném doručení zvolna narůstá).

SCTP také komplikuje některé útoky směřující k nedostupnosti služeb (DoS). Ty spočívaly v odesílání stále nových a nových žádostí o navázání TCP spojení, na které žadatel dále neodpovídal a polootevřená spojení blokovala kapacity serveru. Proto je proces vytvoření SCTP asociace komplikovanější.

Typicky začíná tím, že jeden z partnerů (klient) pošle druhému (server) žádost o navázání asociace. Server na jeho základě vytvoří potřebná data, zašifruje je a pošle klientovi jako součást své odpovědi (tzv. cookie). Ještě stále si však nic nerezervuje. Klient vzápětí potvrdí svou žádost a přibalí cookie odeslané serverem, jinak bude žádost ignorována. Teprve pokud se klient prokáže platným cookie, usoudí server, že to zřejmě myslí vážně, vytvoří odpovídající datové struktury, prohlásí asociaci za otevřenou a pošle klientovi potvrzení.

Ukončení asociace se velmi podobá TCP. Jedna strana pošle žádost o ukončení, čímž provede tak zvané polouzavření. Od té doby již nesmí posílat žádná data, ale musí potvrzovat příjem. Až se protějšek vypovídá, také on provede polouzavření a asociace bude ukončena. Pro nouzové případy je pochopitelně k dispozici i přerušení, kdy jeden z partnerů vykřikne „už musím letět“ a okamžitě skončí.

Poslední zajímavostí SCTP je, že podporuje tzv. multihoming – tedy situaci, kdy komunikující uzel má několik IP adres. Dostupné adresy si partneři vyměňují při vytvoření asociace a může se jednat o libovolnou směs IPv4 a IPv6 adres. Během komunikace je jedna z nich brána jako primární a na ni jsou odesílána data. Pro opakování však vybírá jinou a pokud má primární adresa častější problémy s dostupností, přejde odesilatel na jinou (je-li k dispozici). SCTP totiž monitoruje všechny cesty a udržuje si přehled o jejich stavu.

A jak je to s implementacemi? SCTP je dost mladé – jeho definice v RFC 2960 pochází z října roku 2000. Tomu odpovídá i skutečnost, že zatím se jedná o velmi exotickou záležitost.

Tipy C

Existuje referenční implementace pro několik různých odrůd Unixu. Kromě ní se dá najít implementace od Siemens AG a Univerzity Essen, která by měla fungovat pod Linuxem, FreeBSD a Mac OS X. Dále existují exempláře pro Linux (jádro 2.4) a Solaris 8 a to je, zdá se, vše. Nepodařilo se mi najít žádnou implementaci pro MS Windows. Když jsem nechal vyhledat SCTP na www.microsoft.com, obdržel jsem pouze stránku s čísly portů…

Právě na implementacích však bude nejvíc záviset, zda se SCTP prosadí nebo ne. Takže uvidíme.

Byl pro vás článek přínosný?

Autor článku

Autor dělá nepořádek v příslovích, protože sítě nejen dělá, ale i učí a dokonce také řídí. Působí na Ústavu nových technologií a aplikované informatiky na Technické univerzitě v Liberci. Píše knihy.
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).