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 lestermes suivants : “head-of-line blocking” et
“multi-homing” :)
Quelques références :
comments