Вы находитесь на странице: 1из 13

SCTP : Stream Control Transmission Protocol

Protocole et Services
EFORT http://www.efort.com
Les protocoles usuels de transport de linformation dans les rseaux IP sont TCP (Transmission Control Protocol) et UDP (User Datagram Protocol). Pour rpondre aux besoins du transport des protocoles de signalisation tlphonique sur IP notamment dans le contexte NGN (Next Generation Network), lIETF (Internet Engineering Task Force) a labor un protocole spcifique trs fiable, SCTP (Stream Control Transmission Protocol) qui est prsent au mme niveau que TCP et UDP. Ainsi il est possible de remplacer le transport coteux et complexe des protocoles de signalisation INAP, ISUP, MAP, CAP traditionnellement sur SS7, Q.931 traditionnellement sur LAPD et V5.2 traditionnellement sur LAPv5, par un transport conomique sur IP. Comme TCP et UDP ne sont pas assez fiables pour prendre en charge ce transport, SCTP a t dfini avec un ensemble de fonctions critiques par rapport aux contraintes de fiabilit et redondance, de scurit, de rapidit du transport de la signalisation tlphonique. SCTP est aussi considr comme nouveau transport pour certains protocoles de signalisation et de contrle du rseau de 4me gnration mobile EPS (Evolved Packet System) tels que S1-AP, X2-AP et DIAMETER. Le but de ce tutoriel est de prsenter les caractristiques du protocole SCTP, le comparer avec les protocoles de mme niveau, savoir TCP et UDP, et de dcrire ltablissement dassociation SCTP, le transfert de donnes SCTP et la libration dassociation SCTP.

1 Protocole SCTP
1.1 Caractristiques de base SCTP

SCTP est un protocole unicast et permet lchange de donnes en mode bidirectionnel entre deux endpoints SCTP. SCTP fournit un transport fiable, dtecte le rejet, la duplication de donnes ainsi que les donnes errones et retransmet les donnes corrompues. A ce propos, SCTP gre des temporisateurs plus courts que ceux de TCP car il s agit de transporter des donnes de signalisation qui ont des contraintes de temps de livraison plus strictes que celles lies aux donnes classiques. Alors que dans TCP un flux fait rfrence une squence doctets, un flux SCTP fait rfrence une squence de messages. SCTP est donc plus simple a interprter la rception. Le nom Stream Control Transmission Protocol dcoule de la fonction multi-streaming fournie par SCTP. Un stream (flot) est un canal logique unidirectionnel permettant lchange de messages entre terminaisons SCTP. Lors de ltablissement dune association SCTP, il est ncessaire de spcifier le nombre de streams que comportera cette association. La fonction multi-streaming permet de partitionner les donnes dans diffrents streams de telle sorte que la perte dun message dans un des streams nait dimpact sur le transport des donnes que sur ce stream. Une des fonctionnalits principales du protocole SCTP est le multi-homing, cest dire la capacit pour un endpoint SCTP de supporter plusieurs adresses IP. Ceci est un avantage compar TCP. Une connexion TCP est dfinie par une paire dadresses de transport (Adresse IP + numro de port TCP). Chaque endpoint dune association SCTP fournit lautre extrmit une liste dadresses IP avec un unique numro de port SCTP. Lendpoint

Copyright EFORT 2009

est donc lextrmit logique du protocole de transport SCTP. Une association SCTP associe toutes les combinaisons dadresses source et destination entre les deux nuds impliqus. Chaque endpoint SCTP peut tre adress par un autre endpoint SCTP travers plusieurs chemins correspondant plusieurs adresses de transport. La fonctionnalit de multi-homing est utilise des fins de redondance et non pour permettre un partage de charge entre diffrentes routes IP. Ltat de chaque chemin est supervis par SCTP en ce qui concerne son accessibilit, le dlai et le nombre de retransmissions conscutives. La supervision du chemin (path monitoring), lutilisation dun chemin alternatif pour des retransmissions et la slection dun chemin partir de son tat font de SCTP un protocole plus robuste que TCP lors de dfaillances partielles du rseau.

1.2

Comparaison entre SCTP, TCP et UDP

Les principaux avantages de SCTP par rapport TCP sont (Tableau 1): Le support du multihoming qui est directement support par SCTP alors quavec TCP lapplication devra sappuyer sur plusieurs connexions TCP et grer le basculement si une connexion TCP est perdue. Le support du multi-streaming qui est propos par SCTP permettant dmuler plusieurs flots parallles alors que TCP ne gre quun seul flot. Il est possible dmuler cette fonction au niveau applicatif si TCP est le transport. Lapplication devra tablir plusieurs connexions TCP et rpartir la charge sur lensemble des connexions. La scurit intrinsque SCTP alors que TCP ne fournit aucune scurit. Avec SCTP il y a authentification au moment de ltablissement de lassociation SCTP et par ailleurs chaque paquet transmis par toute entit SCTP mettrice doit contenir une signature qui doit tre valide par lentit SCTP rceptrice..
Caractristique Transfert de donnes fiable Contrle de congestion Dcouverte MTU Multiplexage de message Support du Multi-homing Support du Multi-streaming Livraison de donnes dsordonne Scurit Heartbeat intgr SCTP Oui Oui Oui Oui Oui Oui Oui Oui Oui TCP Oui Oui Oui Oui Non Non Non Non Non UDP non non non non non non oui non non

Tableau 1 : Comparaison entre les trois protocoles de transport SCTP, TCP et UDP

1.3

Multihoming

Dans la terminologie IP, un nud de communication ou une machine est appel multihomed si il peut tre adress par plusieurs adresses. Multi-homed signifie que la machine host a t installe avec plusieurs cartes dinterface, chacune ayant une adresse IP. Un endpoint SCTP est une entit Emettrice/ Rceptrice logique de paquets SCTP. Un endpoint une adresse de transport qui est un couple adresse IP et port SCTP sur une machine qui possde une adresse IP. Un exemple de endpoint est le couple [192.25.13.26 : 120]. Un endpoint SCTP est dit Multi-Homed sil a t tabli sur une machine possdant plusieurs adresses IP et si lui-mme agrge plusieurs adresses IP (host multi-homed). Un exemple de endpoint multi-homed est [192.25.13.26, 192.27.14.23, 192.21.13.14:120] Puisque SCTP est un protocole de transport fonctionnant en mode connect, deux endpoints SCTP doivent initier une procdure dtablissement de la communication.

Copyright EFORT 2009

Cette relation de communication est appele association SCTP. Un exemple dassociation SCTP est le couple de endpoints {[192.25.13.26, 192.27.14.23, 192.21.13.14:2905] : [128.120.11.14, 128.120.11.44 :2905]}. On remarquera que les deux endpoints qui constituent lassociation sont multi-homed.

1.4

Le paquet SCTP

La PDU (Protocol Data Unit) SCTP est appele un paquet SCTP. Le paquet SCTP est encapsul dans un paquet IP, qui est rout la destination. Le paquet SCTP est compos dun en-tte commun et de Chunks. Un Chunk contient soit des donnes de contrle soit des donnes utilisateur (Figure 1). Plusieurs Chunks peuvent tre multiplexs dans un mme paquet SCTP sauf dans le cas des Chunks de contrle INIT, INIT ACK et SHUTDOWN COMPLETE. Ces derniers ne peuvent pas tre regroups avec dautres chunks dans un mme paquet SCTP. Si un message utilisateur (e.g., message ISUP) ne peut pas tre contenu dans un seul paquet SCTP du fait de sa taille, il est possible de fragmenter le message en plusieurs chunks qui seront encapsuls dans diffrents paquets SCTP.

Messages utilisateur

Utilisateur SCTP Chunks de contrle SCTP SCTP

Chunks de donnes SCTP

Paquets SCTP

Paquets IP

IP

Figure 1 : Chunks SCTP


0 1 2 3 01234567 89012345 67890123 45678901 Source Port Number Destination Port Number Verification Tag Checksum Chunk Flags Chunk Length Chunk Value Chunk ID Chunk Flags Chunk Value Chunk Length Chunk 2 Chunk 1

Chunk ID

...
Chunk ID Chunk Flags Chunk Value Chunk Length Chunk N

Figure 2 : Format dun paquet SCTP Len-tte SCTP, dune longueur de 12 octets identifie une association SCTP travers le mme concept de port utilis par TCP et UDP (Figure 2). Des numros de port en mission

Copyright EFORT 2009

(2 octets) et rception (2 octets) prsents dans len-tte combins aux numros dadresses IP en mission et rception (inclus dans len-tte du paquet IP) identifient sans ambigut les endpoints schangeant des paquets SCTP. Pour la dtection des erreurs de transmission, chaque paquet SCTP est protg par un total de contrle (checksum) sur 4 octets qui est plus robuste que le checksum TCP ou UDP dune longueur de 2 octets. Un paquet SCTP dont le checksum est invalide est rejet. Lentte contient enfin une marque de vrification (verification tag) dont le rle est dcrit plus loin. Chaque Chunk dbute par un champ chunkID indiquant le type de Chunk afin de distinguer les Chunks de donnes et les diffrents Chunks de contrle. Dans le cas dun chunk de donnes, la valeur de ChunkID est gale 0. Suivent des fanions de Chunk (Chunk Flags), la longueur de Chunk (Chunk Length) ncessaire du fait de la taille variable dun chunk, et la valeur de Chunk (Chunk Value) qui contient les donnes utiles du chunk. Le tableau 2 dfinit lensemble des identificateurs de Chunks (Chunk ID) utiliss afin de dterminer le type de Chunk.
Chunk ID 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 11111111 Chunk Type Payload Data (DATA) Initiation (INIT) Initiation Acknowledgement (INIT ACK) Selective Acknowledgement (SACK) Heartbeat Request (HEARTBEAT) Heartbeat Acknowledgement (HEARTBEAT ACK) Abort (ABORT) Shutdown (SHUTDOWN) Shutdown Acknowledgement (SHUTDOWN ACK) Operation Error (ERROR) State Cookie (COOKIE ECHO) Cookie Acknowledgement (COOKIE ACK) Reserved for Explicit Congestion Notification Echo (ECNE) Reserved for Congestion Window Reduced (CWR) Shutdown Complete (SHUTDOWN COMPLETE) Rserv par l'IETF

Tableau 2: Types de Chunk SCTP

1.5

Les Chunks SCTP

Le Chunk INIT permet linitiation dune association entre deux endpoints SCTP. Comme indiqu plus haut, le paquet SCTP contenant ce Chunk ne peut contenir dautres Chunks. Le Chunk INIT ACK permet lendpoint rcepteur du Chunk INIT de confirmer linitiation de lassociation. Comme pour le Chunk INIT, le paquet SCTP encapsulant le Chunk INIT ACK ne contient pas dautres Chunks. Le Chunk DATA contient linformation de la couche cliente de SCTP (e.g., M3UA, M2UA, SUA, IUA, V5UA). Le Chunk SACK acquitte la rception d'un ensemble de Chunks DATA et informe ventuellement lmetteur dabsence de Chunks DATA intermdiaires grce au numro de squence TSN (Transmission Sequence Number) prsent dans chaque Chunk DATA. Le Chunk HEARTBEAT est mis par un endpoint SCTP un autre endpoint afin de sonder laccessibilit dune adresse de transport particulire associe cet autre endpoint. Le Chunk HEARTBEAT ACK est la rponse au CHUNK HEARTBEAT. Il est toujours mis ladresse IP source du paquet IP contenant le message HEARTBEAT. Le Chunk ABORT permet labandon de lassociation en indiquant au rcepteur la raison de labandon. Tout Chunk de contrle lexception dINIT, INIT ACK et SHUTDOWN
Copyright EFORT 2009

COMPLETE peut tre regroup avec un Chunk ABORT dans le mme paquet SCTP mais doit tre plac devant le Chunk ABORT, sinon il est ignor. Le Chunk SHUTDOWN permet de librer proprement lassociation. Lentit souhaitant librer lassociation arrte dmettre des Chunks DATA et doit attendre davoir reu tous les acquittements SACK correspondant aux donnes dj mises. Le Chunk SHUTDOWN qui est alors envoy contient le numro de squence du dernier Chunk DATA reu. Le rcepteur rpond par un message SHUTDOWN COMPLETE. Le Chunk ERROR est utilis afin dinformer un endpoint SCTP derreurs en indiquant les causes derreur. Par exemple, la rception dun Chunk avec des paramtres obligatoires invalides ou avec absence de paramtres obligatoires conduisent lenvoi dun Chunk ERROR. Le Chunk COOKIE ECHO est mis par lentit SCTP qui initie lassociation SCTP afin de terminer le processus dinitialisation. Lorsquun endpoint SCTP reoit un Chunk INIT, il rpond par un Chunk INIT ACK contenant un champ State Cookie. Ce dernier indique entre autres linstant de cration du champ State Cookie et la dure de vie de ce champ. A la rception de ce Chunk, lentit initiatrice de lassociation copie linformation du champ State Cookie et linsre dans un Chunk COOKIE ECHO qui est alors transmis. Ce Chunk doit tre mis avant lenvoi de tout Chunk DATA dans lassociation mais peut partager le mme paquet SCTP que des Chunks DATA qui suivent. Si le Chunk COOKIE ECHO est reu sans erreur (avec le mme champ State Cookie que celui envoy dans le message INIT ACK), et avant lexpiration de la dure de vie du State Cookie, le rcepteur du Chunk COOKIE ECHO renvoie un message COOKIE ACK. Dans le cas contraire, un Chunk ERROR est retourn.

2 Fonctionnement du protocole SCTP


2.1 Etablissement dune association SCTP

Ltablissement dune association entre deux entits SCTP se fait gnralement par avance, comparable la mise en service dun canal smaphore dans le rseau SS7. Il requiert lchange de quatre chunks : INIT, INIT ACK, COOKIE ECHO et COOKIE ACK.

2.1.1

Chunk INIT

Chaque entit SCTP est initialement dans ltat Closed . Lentit qui souhait tablir lassociation met un Chunk de contrle nomm INIT (Figure 3). Le champ Chunk Flags a une valeur gale 0. La valeur du champ InitateTag est gnre alatoirement et diffrente de 0. Le paquet SCTP contenant le Chunk INIT a une tiquette de vrification (Verification Tag) dont la valeur est gale 0. Lentit rceptrice du Chunk INIT stocke la valeur du champ InitiateTag. Le champ Verification Tag de chaque paquet SCTP mis par lentit rceptrice sur cette association aura pour valeur celle du champ InitiateTag. Le Chunk INIT contient par ailleurs un champ Advertised Receiver Credit Window (a_rwnd) qui indique lespace mmoire en nombre doctets que lmetteur a allou pour lassociation qui sera tablie. Pendant la dure de vie de lassociation, cet espace mmoire ne peut diminuer mais peut augmenter. Le paramtre Number of Outbound Streams (OS) spcifie le nombre de flux unidirectionnels (streams) que lmetteur souhaite crer dans cette association. La valeur 0 ne peut pas tre utilise. Le paramtre Number of Inbound Streams (MIS) dfinit le nombre maximum de flux unidirectionnels (streams) que lmetteur permet au rcepteur de crer dans cette association. La valeur 0 ne peut pas tre utilise.

Copyright EFORT 2009

Le paramtre Initial TSN indique le numro de TSN (Transmission Sequence Number) initial que lmetteur utilisera lors de lenvoi du premier Chunk DATA dans cette association. Le paramtre TSN prsent dans chaque Chunk DATA permet de numroter de faon incrmentale ces Chunks dans le contexte dune association. Le Chunk INIT peut par ailleurs contenir un nombre de paramtres optionnels ou de longueur variable (Optional / Variable-Length parameters). Parmi ces paramtres figurent ladresse IPv4 ou IPv6 de lmetteur. Combine au numro de port SCTP de lmetteur prsent dans le paquet SCTP, cette adresse permet lmetteur dindiquer au rcepteur ladresse de transport quil supporte pour cette association. Plus dun paramtre dadresse Ipv4 ou IPv6 peut tre inclus dans un Chunk INIT si lentit SCTP mettrice est de type multi-homed

1 2 3 0 01234567 89012345 67890123 45678901 0 0 0 0 0 0 0 1 Chunk Flags Chunk Length Initiate Tag Advertised Receiver Credit Window
Number of Outbound Streams Number of Inbound Streams

Initial TSN Optional / Variable-length Parameter Format

Figure 3: Chunk INIT

2.1.2

Chunk INIT ACK

A la rception du Chunk INIT, lentit SCTP rceptrice retourne un Chunk INIT ACK (Figure 4). Ce dernier a un format similaire celui du Chunk INIT. Il rajoute deux paramtres, Cookie State et Unrecognized. Le rcepteur rappelle les valeurs des paramtres quil a reu dans le Chunk INIT. Il ne lui est pas possible de ngocier une valeur du paramtre Number of Inbound Streams (MIS) suprieure celle reue. La valeur du paramtre Initial TSN indique la valeur de TSN que lmetteur du message INIT ACK utilisera lors de lenvoi de son premier Chunk DATA dans cette association. Le Chunk INIT ACK contient un nombre de paramtres de longueur variable (Optional / Variable-Length parameters) et ventuellement des paramtres optionnels. Le seul paramtre obligatoire dont la taille est variable est State Cookie. Parmi les paramtres optionnels figurent la ou les adresses IPv4 et/ou IPv6 de lentit rceptrice qui seront utilises dans cette association, ainsi que Unrecognized. Ce dernier sera inclus dans le Chunk INIT ACK lorsque lentit rceptrice du Chunk INIT ne reconnat par un des paramtres.

Copyright EFORT 2009

0 1 2 3 01234567 89012345 67890123 45678901 0 0 0 0 0 0 1 0 Chunk Flags Chunk Length Initiate Tag Advertised Receiver Credit Window
Number of Outbound Streams Number of Inbound Streams

Initial TSN Optional/Variable-length Parameter Format

Figure 4 : Chunk INIT ACK

2.1.3

Chunk COOKIE ECHO

A la rception du Chunk INIT ACK, linitiateur de lassociation renvoie un Chunk COOKIE ECHO afin de finaliser ltablissement de lassociation (Figure 5). Ce Chunk doit prcder lenvoi de tout Chunk DATA mais peut partager le mme paquet SCTP que des Chunks DATA en tant le premier Chunk du paquet. La valeur du champ Chunk Flags est gale 0 et ignore la rception. Le Chunk COOKIE ECHO doit contenir le paramtre Cookie dont la valeur est celle du paramtre State Cookie reu dans le Chunk INIT ACK.
0 1 2 3 01234567 89012345 67890123 45678901 0 0 0 0 1 0 1 0 Chunk Flags Chunk Length Cookie

Figure 5 : Chunk COOKIE ECHO

2.1.4

Chunk COOKIE ACK

A la rception du Chunk COOKIE ECHO, un Chunk COOKIE ACK est retourn. La valeur du champ Chunk Flags est positionne 0 alors que la longueur du Chunk (Chunk Length) est gale 4 (Figure 6). Ce Chunk doit prcder tout Chunk DATA envoy par lmetteur de ce Chunk COOKIE ECHO, et avant tout message SACK acquittant des messages DATA reus. Par contre, il peut partager le mme paquet SCTP que ces Chunks DATA et SACK, mais en premire position dans ce paquet.
1 2 3 0 01234567 89012345 67890123 45678901 00001011 00000000 00000000 00000100

Figure 6 : Chunk COOKIE ACK

2.2
2.2.1

Transfert de donnes SCTP


Le Chunk DATA

Le Chunk DATA est utilis afin de transporter les donnes provenant de la couche cliente (Figure 7).

Copyright EFORT 2009

Le bit U (Unordered) sil est positionn 1 indique que les donnes doivent tre dlivres par SCTP la couche cliente rceptrice, dans lordre reu. Il est possible de fragmenter un message utilisateur dont la taille est suprieure celle du paquet SCTP. Les bits B et E sont utiliss afin dinformer le rcepteur de cette fragmentation (Tableau 3). Le bit B (Beginning) sil est positionn la valeur 1 indique le premier fragment du message utilisateur. Le bit E (end) mis la valeur 1 prcise quil sagit du dernier fragment du message. Pour un message non fragment, les bits B et E ont pour valeur 1.
Bit B Bit E 1 0 0 0 0 1 1 1 Signification Premire partie d'un message fragment Partie intermdiaire d'un message fragment Dernire partie d'un message fragment Message non fragment

Tableau 3 : Signification des bits B et E Lorsquun message utilisateur est fragment en plusieurs Chunks DATA, le champ TSNs (Transmission Sequence Number) est utilis afin de rassembler le message. Ce champ TSN identifie le message utilisateur dans le contexte dune association indpendamment dun stream particulier et est incrment chaque envoi dun Chunk DATA modulo 232 1. Le champ Stream Identifier (S) indique le flux (stream) auquel appartient ce Chunk DATA. Le champ Stream Sequence Number n indique la position de ce Chunk DATA dans le flux. Lorsquun message utilisateur est fragment par SCTP, toutes les parties du message encapsul dans des Chunks DATA ont le champ SSN positionn la mme valeur. Le champ Payload Protocol Identifier reprsente un identificateur de protocole de la couche cliente. La valeur associe est passe par la couche cliente mettrice SCTP et retourne la couche cliente rceptrice afin de lui permettre didentifier le type dinformation transporte dans ce DATA Chunk. Le champ User Data contient le message utilisateur sur un nombre doctets multiple de 4. Si la longueur du message utilisateur nest pas un multiple de 4, des octets de bourrage (au maximum 3) pourront alors tre insrs dont la valeur sera 00000000 . Le champ Length indique la longueur du Chunk DATA en octets, partir du premier champ (Chunk Type dont la valeur est 00000000) jusqu la fin du champ User Data en excluant les octets de bourrage. Un Chunk DATA sans donnes utilisateur un champ Length positionn la valeur 16 (00010000).
1 2 3 0 01234567 89012345 67890123 45678901 0 0 0 0 0 0 0 0 Reserved U B E Length TSN Stream Identifier S Stream Sequence Number n Payload Protocol Identifier User Data

Figure 7 : Chunk DATA

Copyright EFORT 2009

Prenons lexemple dune fragmentation dun message utilisateur SCTP, provenant de la couche M3UA (MTP3 User Adaptation). Le message doit tre dlivr sur le stream 5 dans lordre dmission (Figure 8). Ce message est dcompos en quatre fragments. Les quatre fragments sont des chunks DATA SCTP. Ils ont leur champ U positionn 0. Les donnes doivent tre rordonnes larrive avant dtre dlivres la couche suprieure. Les bit B/E sont positionnes 1 0 pour le premier fragment. Il sagit du premier fragment mais pas du dernier. Dautres fragments suivent. Les second et troisime fragments ont leur bit B/E positionns 0 0. Ils ne sont ni le premier ni le dernier fragment du message. Les bits B et E du quatrime fragment sont mis 0 1 puisquil ne sagit pas du premier mais du dernier fragment. Tous les fragments doivent tre mis sur le stream numro 5. Le numro de squence est le mme pour tous les fragments puisquil sagit de fragments dun mme message. Par contre, le champ TSN est incrment de 1 chaque nouveau chunk mis sur lassociation SCTP. Enfin le payload Id indique le type de contenu des chunks DATA. Dans lexemple le contenu des chunks DATA provient de la couche M3UA dont le type est 3.
Original message (Payload Type = 3, i.e., M3UA) To be sent to stream 5 as message 2 using the ordered delivery mode

Part 1 of the message U=0 B/E=10 TSN = 20 Stream ID = 5 Stream Seq = 6 Payload ID = 3

Part 2 of the message U=0 B/E=00 TSN = 21 Stream ID = 5 Stream Seq = 6 Payload ID = 3

Part 3 of the message U=0 B/E=00 TSN = 22 Stream ID = 5 Stream Seq = 6 Payload ID = 3

Part 4 of the message U=0 B/E=01 TSN = 23 Stream ID = 5 Stream Seq = 6 Payload ID = 3

Figure 8 : Fragmentation SCTP

2.2.2

Chunk SACK

Le Chunk SACK est mis par une entit SCTP afin dacquitter les Chunks DATA reus de lautre entit SCTP et de linformer dventuels gaps ou absences dans les Chunks DATA conscutifs reus. Sa structure est prsente la Figure 9.
0 1 2 3 01234567 89012345 67890123 45678901 0 0 0 0 0 0 1 1 Chunk Flags Chunk Length Cumulative TSN ACK Advertised Receiver Credit Window
Number of Gap Ack Blocks = N Gap Ack Block #1 Start Gap Ack Block #N Start

Duplicate TSN 1 Duplicate TSN X

... ...

Number of Duplicate TSNs = X Gap Ack Block #1 End Gap Ack Block #N End

Figure 9 : Chunk SACK

Copyright EFORT 2009

Afin dillustrer lutilisation du Chunk SACK considrons lexemple suivant tir du RFC SCTP : Lmetteur transmet 8 Chunks DATA conscutifs numrots de 10 17. Le rcepteur reoit les Chunks DATA numrots 10, 11, 12, 14, 15 et 17 par leur TSN (Transmission Sequence Number). Les Chunks DATA 13 et 16 sont manquants. Les Chunks DATA 12 et 15 sont reus quant eux deux fois (Figure 10). Le message SACK retourn par lentit rceptrice des Chunks DATA contient les champs suivants (Figure 11): Le champ Cumulative TSN ACK indique le TSN du dernier Chunk DATA reu en squence avant un gap . Dans notre exemple, la valeur de ce champs sera 12. Le champ Advertised Receiver Credit Window (a_rwnd) indique lespace mmoire en rception mis jour par lmetteur du Chunk SACK. Cela permet au rcepteur du Chunk SACK de grer la quantit de donnes mises afin de ne pas gnrer de dbordement de tampons et donc de pertes de donnes. Le champ Number of Gap Ack Blocks indique le nombre de gaps prsents dans la squence acquitter. Lexemple en prsente 2. Le champ Number of Duplicate TSNs prcise le nombre de TSNs reus plus dune fois. Dans lexemple considr, ce champ est positionn la valeur 2 correspondant 2 TSNs, numrots 12 et 15. Le champ Gap Ack Block # 1 Start indique la valeur 2 qui correspond la diffrence entre Cumulative TSN Ack qui vaut 12 et la plus petite valeur TSN reue aprs le premier gap qui vaut 14. Le champ Gap Ack Block # 1 End indique la valeur 3 qui correspond la diffrence entre Cumulative TSN Ack qui vaut 12 et la plus grande valeur TSN reue aprs le premier gap qui vaut 15. Le champ Gap Ack Block # 2 Start indique la valeur 5 qui correspond la diffrence entre Cumulative TSN Ack qui vaut 12 et la plus petite valeur TSN reue aprs le second gap qui vaut 17. Le champ Gap Ack Block # 1 End indique la valeur 5 qui correspond la diffrence entre Cumulative TSN Ack qui vaut 12 et la plus grande valeur TSN reue aprs le second gap qui vaut 15. Le champ Duplicate TSNs indique les TSNs reus plus dune fois depuis lenvoi du dernier SACK. Chaque fois quun mme TSN est dlivr plus dune fois un rcepteur, ce dernier le rajoute une liste de TSNs dupliqus. Le compteur Number of Duplicate TSNs est rinitialis 0 aprs lenvoi de tout Chunk SACK. Si un TSN est reu trois fois, alors la valeur de ce TSN est rpte deux fois dans le champ Duplicate TSN du Chunk SACK.
TSN = 17 Manquant TSN = 15 TSN = 14 Manquant TSN = 12 TSN = 11 TSN = 10 Dupliqu TSN = 12 Dupliqu TSN = 15

Figure 10 : Exemple avec donnes manquantes et donnes dupliques

Copyright EFORT 2009

1 2 3 0 01234567 89012345 67890123 45678901 Cumulative TSN ACK = 12 Advertised Receiver Credit Window
Number of Gap Ack Blocks = 2 Gap Ack Block #1 Start 2 Gap Ack Block #N Start 5 Number of Duplicate TSNs = 2 Gap Ack Block #1 End 3 Gap Ack Block #N End 5

Duplicate TSN 12 Duplicate TSN 15

Figure 11 : Chunk SACK de lexemple

2.3

Libration dune association SCTP

Lassociation est libre proprement par un chunk SHUTDOWN ou abandonne brutalement par un chunk ABORT. Quand un utilisateur/application dsire fermer le socket SCTP proprement, il utilise le chunk SHUTDOWN. Lendpoint SCTP envoie alors toutes les donnes encore dans ses mmoires tampon, et ensuite met le chunk SHUTDOWN. Quand le destinataire reoit le chunk SHUTDOWN, il arrte d accepter des donnes provenant de l'application et cesse d'envoyer des donnes. Une fois obtenus tous les SACK pour les donnes, il enverra un chunk SHUTDOWN ACK, et une fois que le ct qui libre lassociation a reu ce chunk, il rpondra par un chunk SHUTDOWN COMPLETE. Lassociation est dornavant compltement libre. Une autre faon de terminer lassociation est d'utiliser le chunk ABORT. Mais c'est un moyen plus brutal de terminer une association SCTP. Quand une des deux parties dsire terminer une association SCTP instantanment, elle met ce chunk ABORT. Toutes les donnes dans les tampons sont alors supprimes et l'association termine. Le destinataire fait de mme aprs vrification du chunk ABORT.

2.3.1

Chunk SHUTDOWN

Le chunk SHUTDOWN apparat quand un des endpoints d'une association dsire fermer l'association en cours. Lendpoint qui le transmet doit vider tous ses tampons avant d'expdier le chunk SHUTDOWN, et ne doit pas envoyer d'autres chunks DATA par la suite. Le destinataire doit galement vider ses tampons d'mission et ensuite expdier le chunk SHUTDOWN ACK correspondant. Le chunk SHUTDOWN contient les champs suivants (Figure 12): Le champ Chunk Flags dont la valeur est positionne 0 Le champ Chunk Length qui indique la longueur du Chunk et dont la valeur est gale 8 Le champ Cumulative TSN ACK indique le TSN du dernier Chunk DATA reu en squence avant un gap .
1 2 3 0 01234567 89012345 67890123 45678901 0 0 0 0 0 1 1 1 Chunk Flags Chunk Length = 8 Cumulative TSN Ack

Figure 12 : Chunk SHUTDOWN

Copyright EFORT 2009

2.3.2

Chunk SHUTDOWN ACK

Le chunk SHUTDOWN ACK est utilis pour accuser rception d'un bloc SHUTDOWN reu. Avant que le bloc SHUTDOWN ACK soit envoy, toutes les donnes dans les tampons d'envoi doivent tre expdies, les tampons ne doivent plus accepter aucune donne provenant de l'application. Le chunk SHUTDOWN ACK contient les champs suivants (Figure 13): Le champ Chunk Flags dont la valeur est positionne 0 Le champ Chunk Length qui indique la longueur du Chunk et dont la valeur est gale 4
1 2 3 0 01234567 89012345 67890123 45678901 0 0 0 0 1 0 0 0 Chunk Flags Length = 4

Figure 13 : Chunk SHUTDOWN ACK

2.3.3

Chunk SHUTDOWN COMPLETE

Le chunk SHUTDOWN COMPLETE est envoy, par l'expditeur du SHUTDOWN, en rponse au chunk SHUTDOWN ACK. Il est expdi pour accuser rception que l'association est totalement ferme. Le chunk SHUTDOWN COMPLETE contient les champs suivants (Figure 14): Le champ Chunk Flags dont la valeur est positionne 0 Le champ Chunk Length qui indique la longueur du Chunk et dont la valeur est gale 4.
0 1 2 3 01234567 89012345 67890123 45678901 0 0 0 0 1 1 1 0 Reserved T Length = 4

Figure 14 : Chunk SHUTDOWN COMPLETE

2.3.4

Chunk ABORT

Le chunk ABORT est utilis pour abandonner une association (Figure 15). Parmi les causes derreur qui conduisent lenvoi du chunk ABORT figurent : Out of resource : Lendpoint mettant lABORT nest pas en mesure de maintenir lassociation cause de problmes de ressources internes. Unresolvable Address Error : Lendpoint a reu une adresse de hostname de lautre endpoint pendant la phase dinitialisation de lassociation. Or cette adresse de hostname ne peut pas tre rsolue par le DNS en une adresse IP. Invalid Mandatory Parameter : Il est possible quun des chunks reus prsente un paramtre obligatoire invalide. Par exemple, lmetteur du chunk INIT a positionn le champ nombre de streams la valeur 0 qui nest pas une valeur acceptable. Le rcepteur du chunk INIT lacquitte alors par un ABORT en prcisant la cause de lerreur. No User Data Error : Si un endpoint SCTP met un chunk DATA sans donnes utilisateur, le rcepteur est dans lobligation de retourner un chunk ABORT et de supprimer lassociation.

1 2 3 0 01234567 89012345 67890123 45678901 0 0 0 0 0 1 1 0 Reserved Length 0 or more Error Causes


Figure 15 : Chunk ABORT

Copyright EFORT 2009

Rfrences
RFC 4960, R. Stewart et al., Stream Control Transmission Protocol , Sept 2007. RFC 3286, L.Ong et al. An Introduction to the Stream Control Transmission Protocol (SCTP), May 2002. Randall R. Stewart, Qiaobing Xie, Stream Control Transmission Protocol : A reference Guide, Addison Wesley, Dec 2001.

Copyright EFORT 2009