Struktura SCTP paketu
Author
Albert FloresStruktura SCTP paketu je článek na české Wikipedii, který se zabývá strukturou paketu protokolu SCTP (Stream Control Transmission Protocol). SCTP je transportní protokol používaný v počítačových sítích pro spolehlivou přenosovou službu. Článek popisuje strukturu SCTP paketu včetně jednotlivých polí a jejich významu. Dále se zaměřuje na hlavičku SCTP paketu, která obsahuje informace potřebné pro správné směrování a zpracování dat. Struktura paketu je důležitá pro pochopení fungování protokolu SCTP a jeho implementace v různých sítových zařízeních.
Stream Control Transmission Protocol (SCTP) má jednodušší strukturu paketu než TCP. Každý paket má dvě části: # Společná hlavička - je vždy na začátku a má pevnou délku 12 bytů. Na obrázku vpravo je vyznačena tmavě modrým podkladem. # Datové bloky nazývané chunk, které tvoří zbytek paketu. Na obrázku má první chunk zelené pozadí a poslední z N chunků (Chunk N) má červené pozadí.
{| nowrap | ||||
---|---|---|---|---|
Bity | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 23 | %"| 24 - 31 |
+0 | ||||
32 | ||||
64 | ||||
96 | ||||
128 | ||||
… | ||||
… | ||||
… |
Společná hlavička
Každý SCTP paket musí začínat společnou hlavičkou délky 12 bytů, která obsahuje následující informace:
Zdrojový port : Číslo portu jako u protokolu TCP nebo UDP.
Cílový port : Tento port slouží pro výběr aplikace na přijímající straně.
Verifikační tag : 32bitová náhodná hodnota zvolená při inicializaci pro odlišení vlastních paketů od zatoulaných paketů z předchozích spojení.
Kontrolní součet : Původní návrh SCTP používal Adler-32; ale v RFC 3309 byla definována podpora algoritmu CRC32c.
Chunky
Každý SCTP paket se skládá ze společné hlavičky a informačních chunků. Všechny chunky mají stejný formát a liší se pouze obsahem. +more Na obrázku vpravo je chunk vyznačen zeleným pozadím.
Typ chunku : 8bitová hodnota definovaná IETF pro rozlišení obsahu chunku.
Příznaky chunku : Osm bitů příznaků, jejichž definice závisí na typu chunku. Implicitní hodnota je nula.
Délka chunku : 16bitová hodnota bez znaménka udává celkovou délku chunku v bytech, která zahrnuje pole typ, příznaky, délka a data chunku, ne však jeho zarovnání na násobek 4.
Data chunku : Libovolná data závislá na typu chunku.
Pokud se délka chunku nerovná násobku 4, pak protokol implicitně doplní (padding) chunk byty s kódem 0.
{| nowrap | ||
---|---|---|
+ | %"| Bity 0 - 15 | %"| 16 - 31 |
0 | ||
32 |
Každý typ chunku může definovat sadu parametrů, které jsou umístěny uvnitř pole hodnota chunku (a jejichž délka je zahrnuta v délce chunku).
Existují dva typy parametrů: * Pevné parametry - musí být vždy přítomné v uvedeném pořadí * Volitelné parametry proměnnou délkou - následují vždy až po pevných parametrech a může jich být libovolný počet v libovolném pořadí.
Pro volitelné parametry (které mají proměnnou délku) se pole typ parametru, délka parametru a hodnota parametru chovají jako příslušná pole v chunku. Minimální velikost parametru 4 byty je použita, když je pole hodnota parametru prázdné a parametr obsahuje pouze pole typ parametru a délka parametru.
Typy chunků
RFC 2960 definuje následující seznam typů chunků.
hodnota | Zkratka | Popis |
---|---|---|
0 | DATA | Uživatelská data |
1 | INIT | Inicializace |
2 | INIT ACK | Potvrzení inicializace |
3 | SACK | Selektivní potvrzení |
4 | HEARTBEAT | Udržovací zpráva (heartbeat) |
5 | HEARTBEAT ACK | Potvrzení udržovací zprávy |
6 | ABORT | Zrušení (odmítnutí) spojení |
7 | SHUTDOWN | Žádost o ukončení |
8 | SHUTDOWN ACK | Potvrzení žádosti o ukončení |
9 | ERROR | Chyba |
10 | COOKIE ECHO | Stavové cookie |
11 | COOKIE ACK | Potvrzení stavového cookie |
12 | ECNE | Explicitní oznámení o zahlcení (rezervováno) |
13 | CWR | Okno zahlcení zmenšeno (rezervováno) |
14 | SHUTDOWN COMPLETE | Ukončení provedeno |
15-62 | N/A | Rezervováno IETF |
63 | N/A | rozšiřující chunk definovaný organizací IETF |
64-126 | N/A | Rezervováno IETF |
127 | N/A | rozšiřující chunk definovaný organizací IETF |
128-190 | N/A | Rezervováno IETF |
191 | N/A | rozšiřující chunk definovaný organizací IETF |
192-254 | N/A | Rezervováno IETF |
255 | N/A | rozšiřující chunk definovaný organizací IETF |
Následují tabulky definující jednotlivé chunky a jejich parametry. Na obrázcích jsou použity následující barvy podkladu: * šedá: pole chunku * červená: pevné parametry * střídající se zelená a modrá barva: volitelné parametry
DATA chunk
{| nowrap | |||||||
---|---|---|---|---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 11 | %"| 12 | %"| 13 | %"| 14 | %"| 15 | %"| 16 - 31 |
0 | |||||||
32 | |||||||
64 | |||||||
96 | |||||||
128 |
:; typ chunku : pro payload data (DATA) vždy nula. :; příznaky chunku : V roce 2006 byly definovány 3 příznaky: ::* I - SACK chunk byl odeslán zpět bez zpoždění. +more ::* U - Pokud je nastaven, indikuje, že tato data jsou neřazený chunk a pořadové číslo není validní. Pokud je fragmentován neřazený chunk, pak každý fragment má nastaven tento příznak. ::* B - Pokud je nastaven, označuje počáteční fragment. Nefragmentované chunky mají tento příznak nastaven. ::* E - Pokud je nastaven, označuje koncový fragment. Nefragmentované chunk mají tento příznak nastaven.
:; délka chunku : Délka chunku má minimální hodnotu 17, protože data délky 0 nejsou dovolena.
: Pevné parametry: :; Transmission sequence number (TSN) : Pořadové číslo pro celý proud DATA (použitý pro sestavení fragmentovaných bloků). :; Identifikátor proudu : Identifikátor proudu, do kterého tento datový chunk patří :; Stream sequence number : Identifikátor pořadového čísla pro zprávu v tomto proudu. +more Pokud zpráva je fragmentovaná, pak tato hodnota se udržuje pro všechny fragmenty. :; Payload protokol identifikátor : Identifikátor protokolu závislý na aplikaci. SCTP samotné toto pole nepoužívá ani nemodifikuje, může být však modifikováno zařízeními po trase. Hodnota 0 má význam žádný paylod protokol není zadán. :; Data : Data závislá na aplikaci.
: Volitelné parametry: žádné.
INIT chunk
{| nowrap | |||
---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 31 |
0 | |||
32 | |||
64 | |||
96 | |||
128 | |||
160 | |||
192 | |||
224 | |||
256 | |||
288 | |||
320 | |||
352 | |||
384 | |||
416 | |||
448 | |||
480 | |||
512 | |||
544 | |||
576 | |||
608 | |||
640 |
:; typ chunku : Pro inicializaci (INIT) vždy 1. :; příznaky chunku : Zatím není definován žádný příznak. +more :; délka chunku : délka chunku, minimálně 20, když hodnota chunku je prázdná a žádné volitelné parametry nejsou použity.
: Pevné parametry mají stejný význam jako u INIT ACK: :; Initiate tag : 32bitové číslo bez znaménka, které je obsaženo ve společné hlavičce každého SCTP paketu v poli verifikační tag. :; Oznámený kredit okna příjemce (a_rwnd) : Množství vyhrazeného místa ve vyrovnávací paměti pro tuto asociaci, které musí být vždy zachováno. +more :; počet odchozích proudů : počet odchozích proudů (ve směru od odesilatele zprávy INIT), které bude možné používat v této asociaci. Nula není povolená hodnota a příjemce na ni musí odpovědět ABORT. :; počet příchozích proudů : Neprovádí se žádné vyjednávání, musí být dostupných minimálně tolik proudů kolik bylo udáno. :; Počáteční TSN : Libovolně zvolená počáteční hodnota transmission sequence number.
: Volitelné parametry jsou vyznačeny střídáním zeleného a modrého pozadí: :; typ parametru = 5 : Tento parametr obsahuje všechny IPv4 adresy použité na odesílající straně. Pro multihomed spojení. +more :; typ parametru = 6 : Tento parametr obsahuje všechny IPv6 adresy použité na odesílající straně. Pro multihomed spojení. :; typ parametru = 9 : Tento parametr obsahuje navrhovaný přírůstek doby života, o který by příjemce měl zvětšit svoji implicitní hodnotu doby života cookie (v milisekundách). :; typ parametru = 11 : Tento parametr je jméno počítače (hostname) podle RFC 1123, část 2. 1. Vyhodnocení (resolution) tohoto jména není součástí SCTP. Jméno musí končit znakem s kódem 0, který musí být zahrnut v délce parametru. :; typ parametru = 12 : Tento parametr obsahuje typy adres, které odesilatel podporuje (např. IPv4 = 5, IPv6 = 6, hostname = 11). :; typ parametru = 32768 : Tento parametr je rezervovaný pro podporu explicitních oznámení o zahlcení.
INIT ACK chunk
INIT ACK chunk obsahuje stejné hodnoty jako INIT, ale typ chunku je vždy 2.
: Povinné parametry, pouze pro INIT ACK: :; typ parametru = 7 (State Cookie): State cookie obsahuje minimální informace pro vytvoření Transmission Control Block a je podepsána soukromým klíčem odesilatele. Formát cookie není specifikován.
SACK chunk
{| nowrap | |||
---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 31 |
0 | |||
32 | |||
64 | |||
96 | |||
128 | |||
… | |||
96+N*32 | |||
128+N*32 | |||
… | |||
96+N*32+X*32 |
:; typ chunku : Pro selektivní acknowledgment (SACK) vždy 3. :; příznaky chunku : Zatím není definován žádný příznak. +more :; délka chunku : délka chunku má minimální hodnotu 16, pokud chunk neobsahuje žádné informace o dírách nebo duplicitách.
: Pevné parametry:
:; Kumulativní TSN ACK : Potvrzuje všechna pořadová čísla přijatá ve správném pořadí - je to pořadové číslo posledního přijatého bytu. Následující byte zatím nebyl přijat. +more :; Oznámený kredit okna příjemce : Množství vyhrazeného místa ve vyrovnávací paměti pro tuto asociaci, které musí být vždy zachováno. :; počet potvrzení chybějících bloků : indikuje počet potvrzených chybějících bloků (děr). :; počet duplicitních TSN : indikuje počet duplicitních TSN, které byly přijaty.
: Volitelné parametry jsou vyznačeny střídáním zeleného a modrého pozadí:
:; Začátek chybějícího bloku : potvrzuje, že byl přijat chybějící blok TSN (přidaný ke kumulativnímu TSN ACK) bloku TSN, který se potvrzuje. :; Konec chybějícího bloku : potvrzuje, že byl přijat chybějící blok TSN (přidaný ke kumulativnímu TSN ACK) bloku TSN, který se potvrzuje. +more :; Duplicitní TSN číslo x : TSN, který byl přijat více než jednou. TSN se objeví v tomto seznamu pokaždé, když byl přijat opakovaně.
HEARTBEAT chunk
{| nowrap | |||
---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 31 |
0 | |||
32 | |||
64+ |
:; typ chunku : Pro udržovací zprávu (HEARTBEAT) má vždy hodnotu 4. :; příznaky chunku : Zatím není definován žádný příznak. +more :; délka chunku : délka chunku; minimálně 8, pokud není zadána žádná hodnota parametru.
: Pevné parametry: žádné
: Volitelné parametry jsou vyznačeny střídáním zeleného a modrého pozadí:
:; typ parametru = 1 : Tento parametr obsahuje libovolné informace zadané odesilatelem
HEARTBEAT ACK chunk
{| nowrap | |||
---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 31 |
0 | |||
32 | |||
64+ |
:; typ chunku : Pro udržovací (heartbeat) potvrzení (HEARTBEAT ACK) má vždy hodnotu 5. :; příznaky chunku : Zatím není definován žádný příznak. +more :; délka chunku : délka chunku je minimálně 8, pokud není obsažena žádná hodnota parametru.
: Pevné parametry: žádné
: Volitelné parametry jsou vyznačeny střídáním zeleného a modrého pozadí:
:; typ parametru = 1 : Tento parametr obsahuje informace z udržovací zprávy.
ABORT chunk
{| nowrap | ||||
---|---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 14 | %"| 15 | %"| 16 - 31 |
0 | ||||
32 |
:; typ chunku : Pro zrušení (ABORT) vždy 6. :; příznaky chunku : Zatím je definován pouze jeden příznak: ::; T : Nastaven, pokud odesilatel nemá TCB. +more :; délka chunku : délka chunku; minimálně 4, pokud nejsou přítomné žádné kódy chyb.
: Volitelné parametry (příčiny chyb) jsou definovány u chunku ERROR.
SHUTDOWN chunk
{| nowrap | |||
---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 31 |
0 | |||
32 |
:; typ chunku : Pro ukončení (SHUTDOWN) má vždy hodnotu 7. :; příznaky chunku : Zatím není definován žádný příznak. :; délka chunku : délka chunku, která je vždy 8.
:Pevné parametry:
:; kumulativní TSN ACK : Obsahuje poslední TSN přijaté odesilatelem ve správném pořadí.
SHUTDOWN ACK chunk
{| nowrap | |||
---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 31 |
0 |
:; typ chunku : Pro ukončení potvrzení (SHUTDOWN ACK) má vždy hodnotu 8. :; příznaky chunku : Zatím není definován žádný příznak. :; délka chunku : délka chunku, která je vždy 4.
ERROR chunk
{| nowrap | |||
---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 31 |
0 | |||
32 | |||
64 | |||
96 | |||
128 | |||
160 | |||
192 | |||
224 | |||
256 | |||
288 | |||
320 | |||
352 | |||
384 | |||
416 | |||
448 | |||
480 | |||
512 | |||
544 | |||
576 | |||
608 |
:; typ chunku : Pro error (ERROR) má vždy hodnotu 9. :; příznaky chunku : Zatím není definován žádný příznak. +more :; délka chunku : délka chunku (minimální hodnotu je 8, pokud pole hodnota obsahuje pouze jednu chybu. Velikost je 4 bytů plus velikost všech příčin chyby.
: Pevné parametry: žádné.
: Volitelné parametry jsou vyznačeny střídáním zeleného a modrého pozadí:
:; typ parametru = 1 : Tento parametr identifikuje, že odesilatel přijal nevalidní identifikátor proudu. :; typ parametru = 2 : Tento parametr indikuje, že odesilatel přijal INIT nebo INIT ACK chunk s chybějícími povinnými parametry. +more :; typ parametru = 3 : Tento parametr indikuje přijetí validního stavového cookie, který byl opožděn o zadaný počet mikrosekund. :; typ parametru = 4 : Tento parametr indikuje, že odesilatel nemá prostředky pro spojení; obvykle v ABORT chunku. :; typ parametru = 5 : Tento parametr identifikuje adresu, kterou odesilatel nemohl resolvovat (pravděpodobně protože nepodporuje příslušný typ adresy); obvykle v ABORT chunku. :; typ parametru = 6 : Tento parametr identifikuje chybný chunk, když nejvyšší dva bity typu chunku jsou 01 nebo 11. :; typ parametru = 7 : Tento parametr identifikuje, že povinný parametr v INIT nebo INIT ACK chunku má chybnou hodnotu. :; typ parametru = 8 : Tento parametr je určen odesilateli INIT ACK chunku, který obsahoval chybný parametr. :; typ parametru = 9 : Tento parametr indikuje, že DATA chunk neobsahoval uživatelská data; obvykle v ABORT chunku. :; typ parametru = 10 : Tento parametr indikuje, že odesilatel přijal COOKIE ECHO, když byl ve stavu SHUTDOWN-ACK-SENT.
COOKIE ECHO chunk
{| nowrap | |||
---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 31 |
0 | |||
32+ |
:; typ chunku : Pro cookie echo (COOKIE ECHO) má vždy hodnotu 10. :; příznaky chunku : Zatím není definován žádný příznak. +more :; délka chunku : délka chunku. :; Chunk hodnota : Obsahuje cookie data.
COOKIE ACK chunk
{| nowrap | |||
---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 15 | %"| 16 - 31 |
0 |
:; typ chunku : Pro cookie potvrzení (COOKIE ACK) má vždy hodnotu 11. :; příznaky chunku : Zatím není definován žádný příznak. :; délka chunku : pro tento typ vždy 4.
ECNE chunk
Zatím není definován.
CWR chunk
Zatím není definován.
SHUTDOWN COMPLETE chunk
{| nowrap | ||||
---|---|---|---|---|
+ | %"| Bity 0 - 7 | %"| 8 - 14 | %"| 15 | %"| 16 - 31 |
0 |
:; typ chunku : Pro ukončení complete (SHUTDOWN COMPLETE) má vždy hodnotu 14. :; příznaky chunku : Zatím je definován pouze jeden příznak: ::; T : Nastaven, pokud odesilatel nemá TCB. +more :; délka chunku : Délka chunku; vždy 4.
Odkazy
Reference
Související články
Stream Control Transmission Protocol * TCP/IP * Signalizační systém č. +more 7 * SIGTRAN.
Externí odkazy
RFC 4960 Stream Control Transmission Protocol (Obsoletes: 2960, 3309) * RFC 4460 Stream Control Transmission Protocol (SCTP) Specification Errata and Issues * RFC 3873 Stream Control Transmission Protocol (SCTP) Management Information Base (MIB) * RFC 3758 Stream Control Transmission Protocol (SCTP) Partial Reliability Extension * RFC 3554 On the Use of Stream Control Transmission Protocol (SCTP) with IPsec * RFC 3436 Transport Layer Security over Stream Control Transmission Protocol * RFC 3309 Stream Control Transmission Protocol (SCTP) Checksum Change * RFC 3286 An Introduction to the Stream Control Transmission Protocol * RFC 3257 Stream Control Transmission Protocol Applicability Statement * RFC 2960 Stream Control Transmission Protocol
Kategorie:Aplikační protokoly IP Kategorie:Signalizační systém č. +more 7 Kategorie:Telekomunikace.