Protocole IP : Une introduction à SCTP [partie 1]

SCTP est un protocole particulièrement méconnu visant à remplir certains manques fonctionnels de TCP et d'UDP. Ne me faites pas dire ce que je n'ai pas dit : SCTP n'est pas "mieux" que TCP ou UDP, il occupe simplement une autre case de l'écosystème IP. Il correspond à d'autres besoins pour lesquels TCP ou UDP sont moins adaptés, notamment dans la téléphonie.

Je ne sais plus comment j'ai connu SCTP, mais je sais que lorsque je me suis enfin décidé à bosser dessus et que j'ai cherché un peu de documentation pour écrire ce billet, j'ai galéré un maximum. SCTP n'est à ma connaissance quasiment pas utilisé. Le fait qu'il n'y ai pas d'implémentation native pour les systèmes Windows en est probablement une des raisons, mais je pense que son arrivée tardive sur Internet et la consécration des protocoles reposant sur les vénérables TCP et UDP reste la cause majeure de son invisibilité. De ce fait SCTP n'a pas encore obtenu le status d'"Internet Standard" au sein de l'IETF : c'est un peu le problème de la poule et de l'oeuf, il faudrait que le protocole soit bien diffusé et éprouvé pour qu'il devienne un "Internet Standard", mais sans ce label les différents acteurs sont réticents à implémenter des outils basés sur un protocole susceptible d'être modifié.

Historiquement, ce protocole a été dans une première mouture appelé MDTP et était une couche protocolaire reposant sur UDP. Il a été développé pour des réseaux de téléphonie afin de pallier à certaines faiblesses de TCP dont :

  • les problèmes de head-of-line blocking qui arrivent lorsqu'un paquet est perdu et que tous les paquets suivants doivent être mis en cache avant livraison en attendant la retransmission du paquet perdu, ce qui bloque la totalité du flux
  • le fait que TCP soit un protocole en mode flux et donc qui nécessite l'ajout de marqueurs de début et de fin de message

C'est lors de sa normalisation au sein de l'IETF qu'il a été décidé de le faire évoluer comme un protocole de transport à part entière au même niveau que TCP ou UDP.

Fonctionnellement, SCTP emprunte à TCP et a IP. C'est un protocole de communication par message comme UDP, mais il y a un contrôle d'intégrité comme TCP. Autrement dit vous envoyez des paquets du client vers le serveur ET vous êtes certains que tous les paquets arriveront intacts et dans le bon ordre. Là où cela devient particulièrement intéressant, c'est que SCTP pratique le multi-homing, il est capable d'assurer la continuité de service en cas de changement d'IP source mais également en cas de changement d'IP destination. C'est particulièrement utile dans le cas des appareils disposant de multiples connexions au réseau : un ordinateur portable avec une connexion wifi et filaire ou un téléphone 4g et wifi pourraient tout à fait basculer d'une connexion à une autre sans interruption du service. Enfin, il est possible de distinguer des séries de messages comme faisant partie de conversations différentes (des sous-flux) ce qui permet de continuer à transmettre les paquets d'une conversation "B" même si l'un des paquets de la conversation "A" a été perdu et que toute la conversation "A" est bloquée en attendant la retransmission du paquet manquant.

Dans mon prochain billet sur SCTP, je mettrais un exemple de client/serveur SCTP en C. En attendant je vous invite à me trouver des traductions pour les termes suivants : head-of-line blocking et multi-homing :)

Quelques références :

Vus : 1457
Publié par Mathieu Ignacio : 6