SCTP csomagok

Az SCTP protokoll adategységeit (PDU-k) SCTP csomagoknak nevezzük. Ha az SCTP protokoll IP fölött fut (az RFC2960-ban leírtak szerint), akkor egy SCTP csomag egy IP csomag hasznos adattartalmát képezi. Az SCTP csomagok egy közös fejlécből, valamint adatblokkokból (chunk) állnak. Több adatblokk legfeljebb a Path-MTU méretig egyetlen csomagba multiplexálható. Egy adatblokk vezérlési információkat és felhasználói adatokat is tartalmazhat.

attachment:pdu60.png

Több adatblokkot tartalmazó SCTP adategység

A közös fejléc

A közös fejléc 12 bájtot tartalmaz. Az SCTP a társítás azonosításához a TCP és UDP protokollokkal megegyező porthasználatot alkalmazza. Az átviteli hibák észlelése érdekében minden SCTP csomag egy 32-bites ellenőrzőösszeggel van védve (Adler-32 algoritmus), amely robusztusabb, mint a TCP és UDP 16-bites ellenőrzőösszege. Az érvénytelen ellenőrzőösszeggel rendelkező SCTP csomagokat a rendszer csendben figyelmen kívül hagyja. A közös fejléc egy ellenőrző címke (verification tag) nevű 32-bites értéket is tartalmaz. Az ellenőrző címke társításspecifikus, és a társítás kezdetekor megtörténik a végpontok közötti cseréje. Egy társítás tehát két címkeértéket használ. A címkékkel kapcsolatos részletes információk az SCTP állapotok részben találhatók.

Adatblokkok

Minden adatblokk egy adatblokk-típus mezővel kezdődik, amely a különböző adatblokk-típusokat különbözteti meg. Ezt követi egy adatblokk-specifikus flag, majd egy adatblokk-hossz mező, amelyre a különböző hosszúságú adatblokkok miatt van szükség. Az érték mező tartalmazza az adatblokk tényleges hasznos adattartalmát. Eddig 13 adatblokk-típus van normál használathoz definiálva. Ezek az alábbiakban láthatók. Az egyszerűség kedvéért ezek definícióját az RFC2960 dokumentumból másoltuk ki:

   Azonosító       Adatblokk-típus
   -----           ----------
   0          - Hasznos adatok (DATA)
   1          - Inicializálás (INIT)
   2          - Inicializálás nyugtázása (INIT ACK)
   3          - Szelektív nyugtázás (SACK)
   4          - Heartbeat kérés (HEARTBEAT)
   5          - Heartbeat nyugtázás (HEARTBEAT ACK)
   6          - Megszakítás (ABORT)
   7          - Leállítás (SHUTDOWN)
   8          - Leállítás nyugtázása (SHUTDOWN ACK)
   9          - Műveleti hiba (ERROR)
   10         - Állapot cookie (COOKIE ECHO)
   11         - Cookie nyugtázás (COOKIE ACK)
   12         - Explicit torlódás-értesítési echo (ECNE) számára fenntartva
   13         - Csökkentett torlódási ablak (CWR) számára fenntartva
   14         - Leállítás befejezve (SHUTDOWN COMPLETE)
   15 - 62    - IETF által fenntartva
   63         - IETF által definiált adatblokk-bővítések
   64 - 126   - IETF által fenntartva
   127        - IETF által definiált adatblokk-bővítések
   128 - 190  - IETF által fenntartva
   191        - IETF által definiált adatblokk-bővítések
   192 - 254  - IETF által fenntartva
   255        - IETF által definiált adatblokk-bővítések

Hasznos adatok

A DATA adatblokkhoz az alábbi formátumot KELL használni:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 0   | Fenntartva|U|B|E|  Hossz                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                              TSN                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Adatfolyam-azonosító S     |  Adatfolyam sorozatszáma n    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                Hasznos adat protokollazonosító                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                                                               /
      /           Felhasználói adatok (S adatfolyam n sorozat)        /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Inicializálás (INIT)

Ez az adatblokk két végpont közötti SCTP társítás kezdeményezésére szolgál. Az INIT adatblokk formátuma az alábbiak szerinti:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 1   |Adatbl. flagek |    Adatblokk hossza           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Inicializálási címke                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           Meghirdetett vevőablak jóváhagyás (a_rwnd)          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Kimenő adatfolyamok száma   |  Bemenő adatfolyamok száma    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Kezdeti TSN                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                                                               /
      /              Opcionális/változó hosszparaméterek              /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Inicializálás nyugtázása (INIT ACK)

Az INIT ACK adatblokk az SCTP társítási kezdeményezések nyugtázására használatos. Az INIT ACK paraméter részének formátuma az INIT adatblokkéhoz hasonló. Két további változóparamétert használ: Az Állapot Cookie-t és a Nem felismert paramétert:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 2   |Adatbl. flagek |    Adatblokk hossza           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Inicializálási címke                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |              Meghirdetett vevőablak jóváhagyás                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Kimenő adatfolyamok száma   |  Bemenő adatfolyamok száma    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Kezdeti TSN                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                                                               /
      /              Opcionális/változó hosszparaméterek              /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Szelektív nyugtázás (SACK)

Ez az adatblokk a másik végpont felé küldve a vett DATA adatblokkok nyugtázására, valamint a soron következő DATA adatblokkokban keletkezett hiány másik végpont felé történő jelzésére szolgál az adatblokkokban lévő TSN-eknek megfelelően. Az SACK blokknak tartalmaznia KELL a Kumulatív TSN Ack, valamint a Meghirdetett vevőablak nyugtázás (a_rwnd) paramétereket. A Kumulatív TSN Ack. paraméter definíció szerint a szünet előtti utolsó fogadott TSN a TSN-ek sorában, az ezt követő TSN értékét az SACK adatblokkot küldő végpont még nem kapta meg. Ez a paraméter ezért az összes, ezzel az értékkel egyenlő vagy ennél kisebb értékű TSN fogadását nyugtázza. Az SACK ezenkívül nulla vagy több Gap Ack blokkot tartalmaz. Minden Gap Ack blokk egy szünet utáni TSN részsorozatot nyugtáz a fogadott TSN-ek sorrendjében. A Gap Ack blokkok által nyugtázott összes TSN definíció szerint nagyobb, mint a Kumulatív TSN Ack értéke.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 3   |Adatbl. flagek |    Adatblokk hossza           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Kumulatív TSN                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           Meghirdetett vevőablak jóváhagyás (a_rwnd)          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Gap Ack blokkok száma = N   |  Ismétlődő TSN-ek száma = X   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  1. Gap Ack blokk kezdete     |   1. Gap Ack blokk vége       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                                                               /
      /                              ...                              /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  N. Gap Ack blokk kezdete     |  N. Gap Ack blokk vége        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       1. Ismétlődő TSN                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                                                               /
      /                              ...                              /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       X. Ismétlődő TSN                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Heartbeat kérés (HEARTBEAT)

Ezt az adatblokkot egy végpont által a másik végpont felé küldve ellenőrizhető a jelenlegi társításban definiált célponti szállítási cím elérhetősége. A paramétermezőben található a Heartbeat információ, amely egy változó hosszúságú, kizárólag a küldő által értelmezhető rejtjelezett adatszerkezet.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 4   |Adatbl. flagek |      Heartbeat hossza         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                                                               /
      /           Heartbeat információs TLV (változó hosszúságú)      /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Heartbeat nyugtázás (HEARTBEAT ACK)

Ezt az adatblokkot egy végpontnak kell a másik végpont felé küldenie egy HEARTBEAT adatblokkra adott válaszul (lásd a 8.3. szakaszt). A HEARTBEAT ACK blokkot a küldő mindig azt a HEARTBEAT adatblokkot tartalmazó IP datagram forrás IP-címére küldi, amelyre ez a nyugtázás vonatkozik. A paramétermező egy változó hosszúságú rejtjelezett adatszerkezetet tartalmaz.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 5   |Adatbl. flagek |    Heartbeat Ack hossza       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                                                               /
      /           Heartbeat információs TLV (változó hosszúságú)      /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Társítás megszakítása (ABORT)

Az ABORT adatblokkot az egyik fél a másik társítási partner felé küldi a társítás lezárása érdekében. Az ABORT adatblokk tartalmazhat Ok-paramétereket, amelyek a megszakítás okáról tájékoztatják a címzettet. Az ABORT blokk NEM LEHET DATA adatblokkal egy csomagban. A vezérlő adatblokkok (kivéve az INIT, INIT ACK és SHUTDOWN COMPLETE blokkokat) SZEREPELHETNEK az ABORT csomaggal együtt, de az SCTP csomagban az ABORT előtt KELL lenniük, ellenkező esetben a címzett figyelmen kívül hagyja ezeket. Ha egy végpont formátumhibával vagy nem létező társításhoz kapja meg az ABORT blokkot, akkor csendben figyelmen kívül KELL hagynia azt. Ezenfelül az ABORT blokkot fogadó végpont semmilyen körülmények között NEM válaszolhat az ABORT blokkra saját ABORT blokk küldésével.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 6   | Fenntartva  |T|           Hossz               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                                                               /
      /                    nulla vagy több Hibaok                     /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Társítás leállítása (SHUTDOWN)

Egy társítás végpontjának ezt az adatblokkot KELL használnia a partnerrel való társítás kíméletes bezárásának kezdeményezéséhez. Ennek az adatblokknak a formátuma a következő:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 7   |Adatbl. flagek |      Hossz = 8                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Kumulatív TSN                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Leállítás nyugtázása (SHUTDOWN ACK)

A SHUTDOWN adatblokk fogadását ezzel az adatblokkal KELL nyugtázni a leállítási folyamat befejezésekor. A részleteket lásd a 9.2. szakaszban. A SHUTDOWN ACK blokkhoz nem tartozik paraméter.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 8   |Adatbl. flagek |      Hossz = 4                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Műveleti hiba (ERROR)

Ezt az adatblokkot bizonyos hibaállapotokról történő értesítéshez küldi egy végpont a partner végpont részére. Egy vagy több hibaok szerepel benne. A Művelet hiba önmagában nem jelent végzetes hibát, de egy ABORT adatblokkal együtt küldve használható végzetes hiba jelzésére.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 9   |Adatbl. flagek |           Hossz               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                                                               /
      /                      egy vagy több Hibaok                     /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Paraméterként szerepel benne egy változó hosszúságú mező, amely az előforduló hiba típusát tartalmazza:

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |            Ok kódja           |         Ok hossza             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                     Okspecifikus információk                  /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Minden hibaok tartalmazhatja saját paraméterkészletét. Az eddig definiált hibaokok a következők:

      Ok kódja
      Érték           Ok kódja
      ---------      ----------------
       1              Érvénytelen adatfolyam-azonosító
       2              Hiányzó kötelező paraméter
       3              Elavult cookie hiba
       4              Kevés erőforrás
       5              Feloldhatatlan cím
       6              Nem felismert adatblokk-típus
       7              Érvénytelen kötelező paraméter
       8              Nem felismert paraméterek
       9              Nincs felhasználói adat
      10              Cookie ékezett leállítás közben

Ez az adatblokk csak társítás inicializálása alatt használatos. Ezt egy társítás kezdeményezője küldi a partner részére az inicializálási folyamat befejezéséhez. Ennek az adatblokknak minden, a társításon belül küldött DATA adatblokk előtt KELL szerepelnie, de SZEREPELHET egy vagy több DATA adatblokkal egy csomagban.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 10  |Adatbl. flagek |           Hossz               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      /                     Cookie                                    /
      /                                                               /
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Ez az adatblokk csak társítás inicializálása alatt használatos. A COOKIE ECHO adatblokk nyugtázására szolgál. Ennek az adatblokknak minden, a társításon belül küldött DATA vagy SACK adatblokk előtt KELL szerepelnie, de SZEREPELHET egy vagy több DATA vagy SACK adatblokkal egyazon SCTP csomagban.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Típus = 11  |Adatbl. flagek |      Hossz = 4                |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+