SCTP adatfolyamok
Míg a TCP a felhasználói adatok megbízható átvitelét az adatok szigorú küldési sorrendben történő átvitelével kapcsolja össze, az SCTP elkülöníti a datagramok megbízható átvitelét a szállítási mechanizmustól. Ez lehetővé teszi a protokoll használatának az SCTP-t használó alkalmazások igényeihez történő igazítását. Előfordulhat, hogy egyes alkalmazások a datagramoknak csupán részleges sorba rendezését igénylik, míg másoknak esetleg elegendő egy olyan megbízható átvitel, amely semmilyen sorrendiséget nem garantál.
Általános fogalmak
Az SCTP protokoll egyetlen SCTP társításon belül különböző üzenet-adatfolyamokat különít el. Ez egy olyan szállítási sémát tesz lehetővé, amelyben csupán az üzenetek adatfolyamon belüli sorrendjét kell megtartani (részleges sorrendi szállítás), csökkentve a különböző üzenet-adatfolyamok közötti szükségtelen sor eleji blokkolást. Az SCTP emellett biztosít egy mechanizmust a sorrendi szállítási szolgáltatás megkerülésére, így az SCTP felhasználója részére küldött üzenetek kézbesítése azok teljes megérkezésekor történik meg (érkezési sorrendben történő kézbesítés).
Az SCTP protokoll forgalomszabályozása és torlódásszabályozása úgy van kialakítva, hogy a hálózaton belül biztosítja az SCTP forgalom TCP forgalommal azonos viselkedését. Ez lehetővé teszi az SCTP szolgáltatások problémamentes bevezetését a meglévő IP hálózatokba (lásd még: Performance Evaluation of the Stream Control Transmission Protocol).
Az SCTP kétféle szinten működik:
- Egy társításon belül a datagramok megbízható szállítását egy ellenőrzőösszeg, egy sorozatszám, valamint egy szelektív újraküldési mechanizmus biztosítja. A kezdeti sorozatot nem tekintve minden megfelelően fogadott adatblokk szállítása egy második, független szintre történik meg.
- A második szint egy rugalmas szállítási mechanizmust valósít meg, amely a datagramok egy társításon belüli több független adatfolyamára épül.
Az összes adatblokk küldő oldalon történő, úgynevezett szállítási sorozatszámmal (Transport Sequence Number - TSN) való megszámozása lehetővé teszi az adatblokkok elvesztésének vagy ismétlődésének észlelését. A fogadó oldal által a küldő fél felé küldött nyugtázás ezekre a sorozatszámokra épül. Az újraküldést egy timer vezérli. A timer időtartama a körbejárási időkésések folyamatos mérésével határozható meg. Amikor egy ilyen újraküldő timer lejár (és a torlódásszabályozás engedélyezi a küldést), akkor megtörténik minden nyugtázatlan adatblokk újraküldése, és a timer a kezdeti időtartam kétszeresére beállítva újraindul (a TCP protokollhoz hasonlóan). Ha a fogadó fél egy vagy több hiányt észlel az adatblokkok sorozatában, akkor minden fogadott SCTP csomagot egy szelektív nyugtázással (SACK) nyugtáz, jelezve az összes hiányt. Az SACK egy specifikus vezérlő adatblokkban foglal helyet. Ha a küldő fél egymás után négy, ugyanazzal az adatblokkal kapcsolatos SACK üzenetet kap, akkor az adott adatblokk újraküldése azonnal megtörténik (gyors újraküldés). A legkorszerűbb operációs rendszerek már támogatják a TCP protokoll hasonló opcionális kiterjesztését (lásd: RFC 2018).
Datagramok rugalmas szállítása
Az SCTP felhasználója az egyes datagramokat a társításon belüli több adatfolyam valamelyikéhez rendelheti. Egy társítás indításakor a felek kicserélik az adatfolyamok irányonkénti lehetséges számát. Az SCTP minden adatfolyamon belül független adatfolyam-sorozatszámokat (Stream Sequence Numbers - SSN) jelöl ki a felhasználói datagramok számára. A fogadó fél ezeket a számokat használja a kézbesítés sorrendjének meghatározására. Az SCTP adatfolyamonkénti sorrendi szállítást végez (minden olyan datagram esetében, amely nincs soron kívüli kézbesítéshez megjelölve). Ez a mechanizmus megakadályozza az egy társításon belüli független datagram-adatfolyamok közötti sor eleji blokkolást. A TCP protokoll esetében ez csak több kapcsolat (adatfolyamonként egy) indítása esetén érhető el, ami további költséggel és járulékos adminisztrációval jár.
Ahogy korábban említettük, az SCTP lehetővé teszi a datagramok érkezési sorrendben történő kézbesítéshez történő megjelölését. Ez olyan fontos üzenetekhez használható, amelyeknél megengedett, hogy megelőzzenek másokat, pl. egy alkalmazás tranzakciójának megszakítására vonatkozó üzenetek. Ha nem szükséges a sorrend megtartása, akkor minden datagram ennek megfelelően jelölhető meg.