Stream Control Transport Protocol

SCTP, une nouvelle conception du transport

Le protocole SCTP

Le protocole Stream Control Transport Protocol est un protocole de transport, défini en 2000 par l'IETF. Il est introduit dans la RFC3286, et est spécifié par la RFC4960.

Initialement, il a été conçu et implémenté pour des applications de téléphonie sur IP, mais ses apports étant intéressants pour beaucoup d'applications, sont périmètre d'utilisation s'est élargi.

Son but est de proposer le meilleur d'UDP et de TCP dans un même protocole, tout en apportant un nombre de nouvelles fonctionnalités.

Tout comme ses deux homologues introduits précédemment, il se situe en couche 4 du modèle OSI :

Ses caractéristiques, supportées également par UDP ou TCP, sont les suivantes :

  • Protocole orienté association, et non pas connexion
  • Orienté message
  • Gestion des congestions
  • Supporte la fiabilité (séquencement, ACK)


Ses apports sont les suivants :

  • Gestion du Multi-homing
  • Gestion du Multi-streaming
  • Support des SACK en natif
  • Établissement d'une connexion en 4 temps
  • Choix de la méthode de livraison (ordre ou non)

La notion d'association

L'association peut être comparé à la connexion en TCP. Il s'agit d'une mise en relation entre deux processus distants. La différence majeure est que l'association SCTP peut mettre en scène plusieurs interfaces réseaux, et donc plusieurs adresses IP :

Dans l'exemple ci-dessus, le noeud A va être joignable via l'une de ses interfaces réseaux NIC1, NIC2 ou NIC3.

Contrairement à TCP, l'adresse de transport ne va donc plus se limiter à associer une adresse IP à un port logique, mais va être du type [Port : @IP1, @IP2, ...].

On peut donc imagine la communication ci-dessous, entre un client et un serveur, et pour laquelle les deux machines sont accessible via plusieurs adresses IP.

La mise en place de l'association entre un noeud A et un noeud B, à l'initiative de A, s'effectue via les échanges de paquets suivants :

L'association s'effectue en 4 temps, avec un échange de cookie afin d'éviter les attaques de type Deny of Service. Ainsi, le destinataire est certain au moment de l'allocation des ressources, que le processus ayant initié l'association est toujours le même.

A la mise en place de l'association, les machines s'échangent (à la manière d'une publication) les adresses IP qu'elles veulent utiliser pour être joignable. Une des adresse IP destination est choisi par la source afin de constituer le Primary Path sui sera le "chemin" utilisé par défaut.

Ces différents chemins accessibles pour une communication entre deux processus introduit la notion de multi-homing.

Le multi-homing

Une fois l'association effectuée, le mutli-homing va permettre une communication entre deux processus via plusieurs adresses IP.

Cette nouvelle fonctionnalités peut être utilisée :

  • Pour augmenter la fiabilité : un message peut être envoyé vers 2 interfaces distantes différentes pour assurer la transmission
  • Pour augmenter le débit : les messages peuvent être envoyés, à tour de rôle, vers l'une et l'autre des interfaces afin de tirer profit des deux réseaux différents (dans le cas deux réseaux d'accès différents, voir ci-dessous).
  • Pour augmenter la robustesse : en se servant de cette fonctionnalité comme système de load-balancing
  • ...

Tout comme le montre l'illustration ci-dessous, les différentes interfaces réseaux peuvent se trouver sur des réseaux d'accès différents. Dans ce cas, on parle de multi-path transfer.

Le multi-streaming

Le multi-streaming est un nouvel apport du protocole SCTP. Il va permettre aux processus en communication de s'échanger des messages, au sein d'une même association, par l'intermédiaire de plusieurs flux (streams) logiques de transmission.

Le nombre de streams en émission et réception est négocié lors de la mise en place de l'association.

Les communications via des streams distints vont éviter l'apparition de Head-of-Line Blocking, effet de bord du protocole TCP.

Les utilisations de cette fonctionnalité sont nombreuses, parmis elles :

  • Chargement parallélisé d'une page Web (stream1 : fichier HTML, stream2 : images)
  • FTP : données et contrôle sur 2 flux différents !
  • ...

Les stream en émission et en réception peuvent être différents :