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: