SCTP állapotok

TableOfContents

Ez a fejezet az SCTP protokoll egy példánya által a társításkor, illetve annak megszűnésekor felvett állapotokat írja le. Ezzel kapcsolatban néhány fogalom magyarázata szükséges. Egy társítás inicializálása négy üzenet váltását követően fejeződik be mindkét oldalon. A passzív oldal (nevezzük kiszolgálónak) addig nem allokál erőforrásokat, amíg a harmadik üzenet meg nem érkezik és nincsen érvényesen elfogadva. Ezzel ellenőrizhető, hogy a társítás-indítási kérés a megfelelő partnertől érkezik (kizárva a hozzáférési jogokkal való visszaélés lehetőségét).

Normál társítás felépítése

A kiszolgáló oldal

A kiszolgáló általában CLOSED állapotban kap egy társítás-indítási kérést (egy INIT adatblokkot), és feldolgozza az adatblokkban szereplő adatokat. Ebből generálja az összes értéket, amely a felépített kapcsolathoz ezen az oldalon szükséges, valamint generál egy biztonságos hash értéket ezen értékek és egy titkos kulcs segítségével (pl. MD5 vagy SHA-1 algoritmus használatával). Ez értékek ezután a származtatott üzenet-hitelesítő kóddal (MAC) együtt az úgynevezett COOKIE-ba kerülnek. Ez a COOKIE lesz az INIT adatblokk küldőjének visszaküldve egy INIT-ACK adatblokkban. A kiszolgáló CLOSED állapotban marad, és teljesen elfelejti a kapott INIT adatblokkot.

Egy COOKIE-ECHO adatblokk (amely egy COOKIE adatszerkezetet tartalmaz paraméterként) fogadásakor a kiszolgáló kicsomagolja a COOKIE-ban található adatokat, majd ellenőrzi a benne található MAC-kódot, hogy valóban ez-e az adott COOKIE forrása. Ha a MAC számítása rendben van, akkor ez egy érvényes COOKIE, amelyet korábban a kiszolgáló hozott létre, és az SCTP példány a COOKIE-ban található adatokkal lett létrehozva. A kiszolgáló egy COOKIE-ACK adatblokkot küld a kliens részére (opcionálisan adatot csatolva a COOKIE-ACK adatblokkhoz), majd ESTABLISHED állapotba vált. Ekkor készen áll adatok fogadására, illetve maga is képes adatblokkokat küldeni.

A kliens oldal

Amikor egy felsőbb szintű protokoll (ULP) el akar indítani egy társítást, meghívja az ASSOCIATE primitívet (lásd: SCTP API), és megtörténik az INIT adatblokk összeállításához szükséges adatszerkezetek inicializálása. Ez az INIT adatblokk lesz a kiszolgáló egyik szállítási címére (vagyis az IP-cím és port kombinációjára) elküldve. Elindul egy init timer, amely az INIT adatblokk ismétlődő küldését indítja, amíg egy kiszolgálótól érkező INIT-ACK adatblokk érkezése előtt le nem jár. Ha egy beállítható számú küldési esemény után nem érkezik INIT-ACK adatblokk, akkor egy hibajelentés érkezik az ULP felé, és nem elérhetőként jelenti a partner végpontot. Miután a kliens az első INIT adatblokkot elküldte, COOKIE-WAIT állapotba vált.

Amikor a COOKIE-WAIT állapotban lévő kliens INIT-ACK adatblokkot kap a kiszolgálótól, leállítja az init timer-t, egy COOKIE-ECHO adatblokkot állít össze, a kiszolgáló COOKIE-ját a fogadott INIT-ACK adatblokkból a COOKIE-ECHO adatblokkba helyezi át, majd visszaküldi a kiszolgálónak. Ezután elindít egy cookie timer-t, amely elindítja ennek a COOKIE-ECHO adatblokknak az ismétlődő küldését, amíg egy COOKIE-ACK nem érkezik a kiszolgálótól. A protokoll-példány az első COOKIE-ECHO elküldése után COOKIE-ECHOED állapotba vált. Ha egy beállítható számú COOKIE-ECHO küldési esemény után nem érkezik COOKIE-ACK, akkor az nem elérhető végpontot jelent.

A COOKIE-ACK adatblokk kiszolgáló felőli megérkezését követően a kliens ESTABLISHED állapotba vált. Megjegyzendő, hogy a COOKIE-ECHO már tartalmazhat értékes adattal rendelkező adatblokkot. A kiszolgáló dönti el,hogy elfogadja-e az adatblokkot, vagy eldobja azt.

attachment:states60smooth.gif

Egy SCTP protokoll-példány állapotdiagramja

A jobb oldali képen egy klienstől egy kiszolgálónak küldött INIT adatblokk látható. A kép az Ethereal programból származik (lásd még a szoftverek listáját az SCTP hivatkozások oldalon). A részletekért kattintson a képre. Egy INIT adatblokk látható, amelyet egy 132.252.150.214 IP-című gazdagép küldött egy 132.252.151.52 című gazdagépnek. Az INIT adatblokk inicializálási címkéje 0x191c240f, és 15 kimenő, valamint 15 bemenő adatfolyamot kér. Emellett szállítja a „Supported Address Types”-TLV paramétert, valamint az adatblokkot küldő kliens IPv4-címét tartalmazó paramétert.

attachment:init.png

Az INIT adatblokkra adott, azt nyugtázó választ INIT-ACK adatblokknak nevezzük. Az INIT-ACK adatblokkal nagyon hasonló paraméterek küldhetők át. Ebben a példában a 132.252.151.52 IP-címen lévő kiszolgáló a saját, 0x29e1115e értékű címkéjét adja vissza az INIT-ACK adatblokkban, az általa elfogadott bemenő és kimenő adatfolyamok számával együtt (itt mindkét érték 15). Megfigyelhető, hogy az SCTP közös fejlécben szereplő címke megegyezik a kliens által az INIT adatblokkban közzétett értékkel. Az INIT-ACK adatblokkal egy változó hosszúságú paraméter is el lett küldve, ez az úgynevezett COOKIE adatszerkezet. A COOKIE-nak minden olyan adatot tartalmaznia kell, amelyre egy kiszolgálónak egy új társítás inicializálásához szüksége van. Ennek az adatszerkezetnek a létrehozásakor a kiszolgáló nem allokálhat ténylegesen erőforrásokat. A kiszolgáló csak akkor allokálhat erőforrásokat az új társításhoz, ha a társítást felépíteni kívánó klienstől egy teljesen megegyező COOKIE szerkezetet kap vissza. A COOKIE-ban szereplő bármilyen adattal történő esetleges visszaélés elkerülése érdekében a szerkezetben szerepel egy biztonságos üzenet-hitelesítő kód (az adatszerkezet MD5 vagy SHA-1 hash és egy titkos kulcs).

attachment:initack.png