Struktura SCTP paketu

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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

hodnotaZkratkaPopis
0DATAUživatelská data
1INITInicializace
2INIT ACKPotvrzení inicializace
3SACKSelektivní potvrzení
4HEARTBEATUdržovací zpráva (heartbeat)
5HEARTBEAT ACKPotvrzení udržovací zprávy
6ABORTZrušení (odmítnutí) spojení
7SHUTDOWNŽádost o ukončení
8SHUTDOWN ACKPotvrzení žádosti o ukončení
9ERRORChyba
10COOKIE ECHOStavové cookie
11COOKIE ACKPotvrzení stavového cookie
12ECNEExplicitní oznámení o zahlcení (rezervováno)
13CWROkno zahlcení zmenšeno (rezervováno)
14SHUTDOWN COMPLETEUkončení provedeno
15-62N/ARezervováno IETF
63N/Arozšiřující chunk definovaný organizací IETF
64-126N/ARezervováno IETF
127N/Arozšiřující chunk definovaný organizací IETF
128-190N/ARezervováno IETF
191N/Arozšiřující chunk definovaný organizací IETF
192-254N/ARezervováno IETF
255N/Arozš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.

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top