Struktura SCTP paketu

Stream Control Transmission Protocol (SCTP) má jednodušší strukturu paketu než TCP. Každý paket má dvě části:

  1. 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.
  2. 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í.
Bity Bity 0 – 7 8 – 15 16 – 23 24 – 31
+0 Zdrojový port Cílový port
32 Verifikační tag
64 Kontrolní součet
96 Typ chunku 1 Příznaky chunku 1 Délka chunku 1
128 Data chunku 1
Typ chunku N Příznaky chunku N Délka chunku N
Data chunku N

Společná hlavička

editovat

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. [1][2]

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. 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.

Definice volitelného parametru (s proměnnou délkou)
+ Bity 0 – 15 16 – 31
0 typ parametru délka parametru
32 parametr hodnota

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ů

editovat

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 rozšiřující chunk definovaný organizací IETF
64-126 Rezervováno IETF
127 rozšiřující chunk definovaný organizací IETF
128-190 Rezervováno IETF
191 rozšiřující chunk definovaný organizací IETF
192-254 Rezervováno IETF
255 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

editovat
+ Bity 0 – 7 8 – 11 12 13 14 15 16 – 31
0 typ chunku=0 Rezervováno I U B E délka chunku
32 TSN
64 Identifikátor proudu Pořadové číslo proudu
96 Payload protokol identifikátor
128
Data

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í.
  • 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. 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

editovat
+ Bity 0 – 7 8 – 15 16 – 31
0 typ chunku = 1 příznaky chunku délka chunku
32 Initiate tag
64 Oznámený kredit okna příjemce
96 počet odchozích proudů počet příchozích proudů
128 Počáteční TSN
160 typ parametru = 5 délka parametru = 8
192 IPv4 address of sending endpoint
224 typ parametru = 6 délka parametru = 20
256 IPv6 address of sending endpoint
288
320
352
384 typ parametru = 9 délka parametru = 8
416 Navrhovaný přírůstek životní doby cookie (milisekund)
448 typ parametru = 11 délka parametru
480 Jméno počítače zakončená znakem NULL
512 typ parametru = 12 délka parametru
544 Typ adresy číslo 1 Typ adresy číslo 2
576 Typ adresy číslo 3
608 typ parametru = 32768 délka parametru
640 Explicitní oznámení o zahlcení (rezervováno)
typ chunku
Pro inicializaci (INIT) vždy 1.
příznaky chunku
Zatím není definován žádný příznak.
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.
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í.
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

editovat

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

editovat
+ Bity 0 – 7 8 – 15 16 – 31
0 typ chunku = 3 příznaky chunku délka chunku
32 kumulativní TSN ACK
64 Oznámený kredit okna příjemce
96 počet potvrzení chybějících bloků = N počet duplicitních TSNs = X
128 Potvrzení chybějícího bloku číslo 1 – začátek Potvrzení chybějícího bloku číslo 1 – konec
96+N*32 Potvrzení chybějícího bloku číslo N – začátek Potvrzení chybějícího bloku číslo N – konec
128+N*32 Duplicitní TSN číslo 1
96+N*32+X*32 Duplicitní TSN číslo X
typ chunku
Pro selektivní acknowledgment (SACK) vždy 3.
příznaky chunku
Zatím není definován žádný příznak.
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.
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.
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

editovat
+ Bity 0 – 7 8 – 15 16 – 31
0 typ chunku = 4 příznaky chunku délka chunku
32 typ parametru = 1 délka parametru
64+ Heartbeat info
typ chunku
Pro udržovací zprávu (HEARTBEAT) má vždy hodnotu 4.
příznaky chunku
Zatím není definován žádný příznak.
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

editovat
+ Bity 0 – 7 8 – 15 16 – 31
0 typ chunku = 5 příznaky chunku délka chunku
32 typ parametru = 1 délka parametru
64+ Heartbeat info
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.
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

editovat
+ Bity 0 – 7 8 – 14 15 16 – 31
0 typ chunku = 6 Rezervováno T délka chunku
32 Nula nebo více chybových kódů
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.
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

editovat
+ Bity 0 – 7 8 – 15 16 – 31
0 typ chunku = 7 příznaky chunku délka chunku
32 kumulativní TSN ACK
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

editovat
+ Bity 0 – 7 8 – 15 16 – 31
0 typ chunku = 8 příznaky chunku délka chunku = 4
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

editovat
+ Bity 0 – 7 8 – 15 16 – 31
0 typ chunku = 9 příznaky chunku délka chunku
32 typ parametru = 1 délka parametru = 8
64 Identifikátor proudu Nuly (rezervováno)
96 typ parametru = 2 délka parametru
128 Počet chybějících parametrů = N
160 Typ chybějícího parametru číslo 1 Typ chybějícího parametru číslo 2
192 Typ chybějícího parametru číslo N
224 Typ parametru = 3 délka parametru = 8
256 Measure of staleness (mikrosekund)
288 typ parametru = 4 délka parametru = 4
320 typ parametru = 5 délka parametru
352 Chybná (unresolvable) adresa
384 typ parametru = 6 délka parametru
416 chybný chunk
448 typ parametru = 7 délka parametru = 4
480 typ parametru = 8 délka parametru
512 chybné parametry
544 typ parametru = 9 délka parametru = 8
576 TSN hodnota
608 typ parametru = 10 délka parametru = 4
typ chunku
Pro error (ERROR) má vždy hodnotu 9.
příznaky chunku
Zatím není definován žádný příznak.
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.
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.
editovat
+ Bity 0 – 7 8 – 15 16 – 31
0 typ chunku = 10 příznaky chunku délka chunku
32+ Cookie
typ chunku
Pro cookie echo (COOKIE ECHO) má vždy hodnotu 10.
příznaky chunku
Zatím není definován žádný příznak.
délka chunku
délka chunku.
Chunk hodnota
Obsahuje cookie data.
editovat
+ Bity 0 – 7 8 – 15 16 – 31
0 typ chunku = 11 příznaky chunku délka chunku = 4
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

editovat

Zatím není definován.

CWR chunk

editovat

Zatím není definován.

SHUTDOWN COMPLETE chunk

editovat
+ Bity 0 – 7 8 – 14 15 16 – 31
0 typ chunku = 14 Rezervováno T délka chunku = 4
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.
délka chunku
Délka chunku; vždy 4.

Reference

editovat

V tomto článku byl použit překlad textu z článku SCTP paket structure na anglické Wikipedii.

  1. CASTAGNOLI, G., S. Braeuer; M. Herrman. Optimization of Cyclic Redundancy-Check Codes with 24 and 32 Parity Bity. IEEE Transactions on Communications. 1993, s. 883. DOI 10.1109/26.231911. . Castagnoli's et al. work on algorithmic selection of CRC polynomials
  2. Koopman, P. 32-Bit Cyclic Redundancy Codes Pro Internet Applications. The International Conference on Dependable Systems and Networks. 2002, s. 459. Dostupné online. DOI 10.1109/DSN.2002.1028931. . Verifikace Castagnoliho výsledků úplným prohledáním a některé nové vhodné polynomy

Související články

editovat

Externí odkazy

editovat
  • 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