Multipath TCP
Le Multipath TCP (MPTCP) est un effort continu du groupe de travail sur Multipath TCP de l'Internet Engineering Task Force (IETF) qui vise à permettre à TCP d'utiliser plusieurs chemins d'accès afin de maximiser l'utilisation des ressources et l'augmentation de la redondance tout en restant compatible avec les équipements actuels (pare-feux, NAT, ...). En outre il permet d'avoir des débits de geudins avec une résistance aux pannes de fou.
En janvier 2013, l'IETF a publié les spécifications de Multipath comme une norme expérimentale dans la RFC 6824.
INFORMATION
MPTCP n'étant pas présent dans les dépôts Debian et sont statuts de développement pas clairement définit, je ne fait pas encore une documentation propre sur le sujet. Prendre ce qui suit comme un brouillon fonctionnel à des fins de testsInstallation
apt install dirmngr apt-transport-https
#Ajout de la clé GPG du dépôt du projet
apt-key adv --keyserver hkp://keys.gnupg.net --recv-keys 379CE192D401AB61
#Ajout du dépôt du projet
echo 'deb https://dl.bintray.com/cpaasch/deb jessie main' >> /etc/apt/sources.list
apt update
#Téléchargement
apt install linux-mptcp
Un redémarrage est nécessaire (peut-être qu'un modprob
permettrai de s'en passer).
Usage
Informations d'installation
dmesg | grep MPTCP
#Donne la version de MPTCP activé
ls /proc/sys/net/mptcp/
cat /proc/sys/net/mptcp/mptcp_enabled
#1 par défaut, donc activé
Utilisation
Pour que MPTCP fonctionne il faut au moins 2 interfaces réseaux actives avec une route chacune minimum. Si elles sont dans le même sous réseau ça ne fonctionne pas. Si le fichier /proc/sys/net/mptcp/mptcp_enabled
est à 1, c'est transparent.
En pratique
J'ai pris deux PC avec chacun 2 interfaces réseau gigabyte derrière un commutateur Cisco gigabyte. J'ai fait 2 VLAN différents sur ce dernier et ai branché chacune des interfaces des PC dans l'un de ces VLAN :
PC1_____________
\ \
VLAN180 VLAN181
PC2____/________/
Avec cette configuration, un fichier de 2,5Go a été flashé à 221Mo/s ! Et constant en plus, du début du téléchargement à sa fin. Cette technologie est très prometteuse.
De plus la coupure d'un des deux liens n’entraîne en rien la perturbation du téléchargement. Le débit du lien manquant est simplement soustrait, et se rajoute de nouveau en cas de refonctionnent sans jamais avoir aucune répercutions sur le transfère.
Sur le PC1
J'ai monté un volume RAM et créé un fichier de 2,5Go afin de ne pas être limité par le disque dur
mount -t tmpfs -o rw,size=3G none /mnt dd if=/dev/zero of=/mnt/toto.dd bs=1M count=2500
Ensuite j'ai lancé un serveur WEB sur ce répertoire pour le PC2
busybox httpd -f -h /mnt
Sur le PC2
Montage du volume RAM
mount -t tmpfs -o rw,size=3G none /mnt
Téléchargement du fichier
wget 192.168.181.13/toto.dd -P /mnt
Problème
MPTCP n'est pas tout à fait stable, lors de certains téléchargements , le message d'erreur suivant s'affiche dans la console (vrai console, pas terminal) et est visible via dmesg
mptcp_verif_dss_csum csum is wrong: 0x100 data_seq 4178570997 dss_csum_added 1 overflowed 0 iterations 1
Le résultat est que le wget s'arrete, la pile TCP est morte. Il faut relancer le téléchargement. On peut utiliser la commande suivante pour ce faire
wget 192.168.181.13/toto.dd -P /mnt -c
Interrogations
- Qu'es qui cause l'erreur mptcp_verif_dss_csum ?
- Faut-il Installer MPTCP sur les deux machines (lors de mes tests c'était le cas et il semblerai que ce soit obligatoire puisqu'il y a un double handshak avec une option JOIN spécifique à MPTCP) ?
- Le redémarrage est-il obligatoire ou un
modprob
permet-il de s'en passer ? - Comment désactivé MPTCP pour une interface (si on a pas envi de consommer le forfait dessus par exemple) : voir