Caractéristiques SCTP

Stream Control Transmission Protocol (SCTP) est un protocole relativement nouveau, mais qui se développe beaucoup et vient en complément des protocoles TCP et UDP. Il possède un aussi haut niveau de fiabilité que TCP, mais utilise moins de temps système.

SCTP possède des fonctionnalités très intéressantes. Pour ceux qui veulent en savoir plus, voir la RFC 3286 - An Introduction to the Stream Control Transmission Protocol et la RFC 2960 - Stream Control Transmission Protocol. Le premier document est une introduction à SCTP. Le second est la spécification du protocole, ce qui vous intéressera peut être moins sauf si vous êtes programmeur de ce protocole.

Ce protocole fut à l'origine développé pour la téléphonie sur IP, ou voix sur IP (VoIP), et possède certains attributs intéressants qui en proviennent. Le niveau de l'industrie VoIP requiert une très haute fiabilité, ce qui veut dire une grande faculté de récupération pour gérer les différentes sortes de problèmes. Ci-dessous une liste des fonctionnalités de base de SCTP.

Cette liste pourrait être plus longue. La plupart de ces informations est tirée de la RFC 3286 - An Introduction to the Stream Control Transmission Protocol.

Note

En terme de SCTP nous parlons de blocs d'information (chunks), pas de paquets ni de fenêtres, (NdT. nous parlerons dorénavant de "bloc". Un bloc consistant en un en-tête et un contenu spécifique. Voir la RFC 2960). Une trame SCTP peut contenir plusieurs blocs différents car le protocole est orienté message. Un bloc peut être soit un bloc de contrôle soit un bloc de données. Le bloc de contrôle est utilisée pour contrôler la session, et le bloc de données pour envoyer les données.

Initialisation et association

Chaque connexion est initialisée en créant une association entre les deux hôtes qui désirent entrer en contact. Cette association est initialisée quand un utilisateur en a besoin.

Cette initialisation est réalisée par 4 paquets. Le premier, un bloc INIT, est envoyé, en réponse il reçoit un INIT ACK contenant un témoin (cookie), ensuite la connexion peut démarrer en envoyant les données. Cependant, deux paquets supplémentaires sont envoyés. Le témoin reçoit en réponse un bloc COOKIE ECHO, lequel reçoit enfin un bloc COOKIE ACK.

Envoi de données et contrôle de session

SCTP, à ce niveau, peut envoyer des données. Dans SCTP il existe des blocs de contrôle et des blocs de données, comme vu précédemment. Les blocs de données sont envoyés en utilisant le bloc DATA, auquel il est répondu par un bloc SACK. Ça fonctionne pratiquement de la même façon que TCP SACK. Les blocs SACK sont des blocs de contrôle.

Au dessus de tout ça, il existe d'autres blocs de contrôle. Les blocs HEARTBEAT et HEARTBEAT ACK d'un côté, et les blocs ERROR de l'autre. Les blocs HEARTBEAT sont utilisées pour conserver la connexion active, et les blocs ERROR sont utilisés pour informer des divers problèmes ou erreurs de connexion, comme un id de flux invalide ou des paramètres de données obligatoires absents, etc.

Arrêt et abandon

La connexion est finalement fermée soit par un bloc ABORT soit plus "poliment" par un bloc SHUTDOWN. SCTP ne possède pas d'état semi-fermé comme TCP, un côté ne peut pas continuer à envoyer des données tandis que l'autre a fermé.

Quand un utilisateur/application désire fermer le socket SCTP de façon courtoise, il appelle le protocole SHUTDOWN. SCTP envoie alors toutes les données encore dans ses mémoires tampon, et ensuite envoie un bloc SHUTDOWN. Quand le destinataire reçoit le SHUTDOWN, il stoppera l'acceptation des données provenant de l'application et cessera d'envoyer des données. Une fois obtenu tous les SACK pour les données, il enverra un bloc SHUTDOWN ACK, et une fois que le côté qui ferme la connexion a reçu ce bloc, il répondra par un bloc SHUTDOWN COMPLETE. La session est maintenant complètement fermée.

Une autre façon de fermer une connexion est d'utiliser ABORT. Mais c'est un moyen pas très poli de supprimer une association SCTP. Quand une des deux parties désire arrêter une association SCTP instantanément, elle envoie un bloc ABORT avec toutes les valeurs correctes signées. Toutes les données dans les tampons seront déchargées et l'association terminée. Le destinataire fera de même après vérification du bloc ABORT.