SCTP adatküldés
Contents
Az SCTP implementációknak az RFC2960 értelmében folyamatvezérléssel és torlódásszabályozással kell rendelkezniük, amelyek biztosítják az SCTP olyan hálózatokba történő bevezetését, ahol a TCP elterjedten használatos (lásd még: Performance Evaluation of the Stream Control Transmission Protocol).
Általános fogalmak
Az SCTP 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 fenntartani (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 (lásd még: SCTP adatfolyamok).
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 egy vagy több adatfolyamhoz tartozó adatblokkok egyetlen SCTP csomagba foglalhatók és szállíthatók, feltéve, hogy azok nem hosszabbak az aktuális útvonal MTU értékéné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, ugyanannak az adatblokknak a hiányát jelző 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).
Forgalomszabályozás
Az SCTP egy végponttól végpontig történő, ablak-alapú forgalom- és torlódásszabályozási mechanizmust alkalmaz, a TCP-protokollból jól ismert mechanizmushoz hasonlóan (lásd: RFC 2581 - TCP Congestion Control). Az adatokat fogadó fél az oktet-alapú ablak (az úgynevezett vevőablak - Receiver Window) méretének megadásával és az SACK adatblokkokkal együtt történő visszaküldésével szabályozhatja az adatok küldő általi küldésének sebességét. A küldő fenntart egy függő bájtok (a nyugtázásig küldhető bájtok) maximális számát szabályozó Torlódási ablak (Congersion Window - CWND) nevű változót. Minden fogadott adatblokkot nyugtázni kell, és a fogadó fél bizonyos ideig (általában 200 ms) várakozik a nyugtázás megérkezésére. Ha ezalatt az idő alatt nagyobb számú adatot tartalmazó SCTP csomag érkezik, akkor minden második adatot tartalmazó csomagot azonnal nyugtázni kell az SACK adatblokk küldő részére való elküldésével.
Szelektív nyugtázás
A nyugtázások az összes olyan TSN számot tartalmazzák, amelyeknek a megfelelő csomagjait a másik oldal megkapta. Vagyis van egy úgynevezett Kumulatív TSN Ack érték, amely az összes, a másik oldal által sikeresen újból összeállított és vagy a címzett felsőbb színtű folyamat által fogadott, illetve a kérésre kézbesített összes adatot tartalmazza. Emellett vannak az úgynevezett Gap blokkok, amelyek azt jelzik, hogy érkeztek adatblokk-szegmensek, azonban vannak hiányzó köztes, adatot tartalmazó adatblokkok. Ha az átvitel során egyes adatblokkok elvesztek, akkor azokat a küldő vagy a küldő timer lejártakor, vagy négy, ugyanazon adatblokk hiányát jelző SACK csomag kézhezvétele után újraküldi. Utóbbi esetben a hiányzó adatok újraküldése a Gyors újraküldés mechanizmus használatával történik. Ha egy csomag elvesztését jelző újraküldés történik, akkor annak megvalósításának frissítenie kell a torlódás- és forgalomszabályozás paramétereit.
Többkapcsolatos végpontok forgalomszabályozása
Alapértelmezésben minden küldés egy kézbesítési címhalmazból előre kiválasztott címre történik, ezt a címet nevezzük Elsődleges címnek. Az újraküldéseket különböző útvonalakon kell végezni, így ha az egyik útvonal túlterhelt, akkor az újraküldések ezt az útvonalat nem érintik (kivéve, ha a olyan a hálózati topológia, hogy az újraküldések ugyanabba a hálózati pontba érkeznek, ahol az adat a torlódás miatt elveszett). Bizonyos hálózati topológiák előnyösen befolyásolhatják a teljes átviteli sebességet. A nyugtázásokat arra a szállítási címre kell küldeni, ahonnan az adatok erednek. Ha az aktív útvonalon nagy számú hiba történik, és a hibaszámláló túllép egy határértéket, akkor az SCTP implementáció értesíti a felsőbb szintű folyamatot, hogy az útvonal inaktívvá vált. Ezután az alkalmazásnak egy új elsődleges útvonalat lehet (és valószínűleg kell) választani (további információkért lásd: SCTP multihoming).
Torlódásszabályozás
Egy SCTP implementáció RFC2960 szerinti torlódásszabályozásának viselkedése akkor lehet a hálózat működésére hatással, ha szükség van az üzenetek időben történő kézbesítésére (vagyis jelzésadatok szállítása). Ez ugyanakkor biztosítja az SCTP megfelelő működését olyan nagy méretű csomagkapcsolt hálózatokra való bevezetés esetén, mint az Internet. Az SCTP torlódásszabályozási mechanizmusa az RFC 2581 - TCP Congestion Control specifikációból származik, és multihoming alkalmazás számára van adaptálva. Minden kézbesítési címhez (vagyis minden lehetséges útvonalhoz) egy diszkrét torlódásszabályozási paraméterkészlet van tárolva, azaz a hálózat szemszögéből egy több útvonallal rendelkező SCTP társítás ugyanannyi TCP kapcsolathoz hasonlóan működhet.
Lassú indítás és torlódáselkerülés
A SCTP protokollnak a TCP protokollhoz hasonlóan kétféle üzemmódja van; a lassú indítás és a torlódáselkerülés. Az üzemmódot torlódásszabályozási változók egy csoportja határozza meg, és ahogy azt már említettük, ezek útvonalspecifikusak. Így míg az elsődleges útvonal felé történő átvitel esetleg torlódás-elkerülési üzemmódban van, az implementáció a tartalék útvonal(ak)on használhat lassú indítást. A sikeresen kézbesített és nyugtázott adatokra vonatkozó torlódási ablak változó (CWND) értékét a rendszer folyamatosan növeli, és amint egy adott határértéket (úgynevezett Lassú indítási küszöbértéket - Slow Start Threshold, SSTRESH) meghalad, az üzemmód Lassú indításból Torlódáselkerülési módba vált át. Lassú indítás üzemmódban a CWND növelése általában gyorsabban történik (durván SACK adatblokkonként egy MTU értékkel), Torlódáselkerülési módban pedig csak durván körbejárási időnként (RTT) egy MTU értékkel. Az újraküldést okozó események (időtúllépések vagy gyors újraküldés) az SSTHRESH értékének drasztikus csökkenését és a CWND alapértékre állítását okozzák (ahol az időtúllépés eredménye egy CWND=MTU értékű Lassú indítás, illetve egy CWND=SSTHRESH beállítású Gyors újraküldés).
Az útvonal MTU értékének feltérképezése
Mivel az Útvonal MTU értéke igen fontos (a torlódásszabályozást befolyásoló) változó, az SCTP implementációknak fenn kell tartaniuk egy változót az egyes útvonalakhoz tartozó Maximális átviteli egység (Útvonal MTU értéke) aktuális értéke számára. Ennek módja részletesebben megtalálható az RFC 1191 - Path MTU Discovery és az RFC 1981 - Path MTU Discovery for IP Version 6 dokumentumokban.