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í.
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
|
|
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.
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
+
|
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é.
+
|
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 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.
+
|
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ě.
+
|
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
+
|
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.
+
|
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.
+
|
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í.
+
|
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.
+
|
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.
+
|
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.
+
|
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.
Zatím není definován.
Zatím není definován.
+
|
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.
V tomto článku byl použit překlad textu z článku SCTP paket structure na anglické Wikipedii.
- ↑ 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. Je zde použita šablona
{{Cite journal}}
označená jako k „pouze dočasnému použití“.. Castagnoli's et al. work on algorithmic selection of CRC polynomials
- ↑
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. Je zde použita šablona
{{Cite journal}}
označená jako k „pouze dočasnému použití“.. Verifikace Castagnoliho výsledků úplným prohledáním a některé nové vhodné polynomy
- 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