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+0Zdrojový portCílový port 32Verifikační tag 64Kontrolní součet 96Typ chunku 1Příznaky chunku 1Délka chunku 1 128Data chunku 1………Typ chunku NPříznaky chunku NDélka chunku N…Data chunku N

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. . Castagnoli's et al. work on algorithmic selection of CRC polynomials. Verifikace Castagnoliho výsledků úplným prohledáním a některé nové vhodné polynomy

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