Multipath TCP

De Wiki doc

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 tests

Installation

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

Ensuite j'ai lancé un serveur WEB sur ce répertoire pour le PC2

busybox httpd -f -h /mnt

Sur le PC2

Téléchargement du fichier

wget 192.168.181.13/toto.dd -O /dev/null

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

Source