Le test :
J'ai utilisé deux machines : mon ordinateur avec sa connexion Noos (que j'appellerai par la suite "client"), et un gros serveur dans un data center qui a une connexion bien plus grosse que ma connexion Noos (que j'appellerai "serveur").
Le but : établir une connexion TCP entre le client et le serveur, et faire transiter divers type de données, toujours dans le sens serveur -> client, pour étudier la vitesse de transfert. Sur le client comme sur le serveur, les deux connexions sont "au repos", presque rien ne transite à part les données du test.
On va utiliser un fichier de 100 Mo de données binaires relativement aléatoires, et on va faire 3 tests:
- téléchargement par protocole HTTP;
- téléchargement direct dès la connexion TCP;
- téléchargement via protocole Bittorrent.
Le port utilisé sur le serveur est le port 8080. Mon port 80 est déjà utilisé, et cela reste un port assez courant sur le web, donc allons-y pour le 8080.
Étape 1: créer le fichier de données
On crée un fichier de 100 Mo de données binaires aléatoires (ou suffisament aléatoires). Il y a mille et une méthodes, j'ai choisi celle-ci.
Code : Tout sélectionner
bash$ perl -MDigest::SHA1=sha1 -e 'for (1 .. 5242880) {print sha1($_)}' > bigfile.dat
Étape 2: téléchargement du fichier en HTTP
Sur le serveur, je configure un serveur Web pour qu'il écoute sur le port 8080 et je place le fichier bigfile.dat à un endroit accessible. Puis, sur le client, je télécharge le fichier avec wget (je masque l'adresse IP, je suis pudique):
Code : Tout sélectionner
bash$ wget http://xx.xx.xx.xx:8080/bigfile.dat
Étape 3: téléchargement direct sans encapsulation dans un quelconque protocole
À l'aide de netcat.
Sur le serveur:
Code : Tout sélectionner
bash$ cat bigfile.dat | nc -l -p 8080 -q 0
Code : Tout sélectionner
bash$ date; nc xx.xx.xx.xx 8080 > big.dat; date
Code : Tout sélectionner
jeudi 23 novembre 2006, 15:28:20 (UTC+0100)
jeudi 23 novembre 2006, 15:29:52 (UTC+0100)
Étape 4: téléchargement via le protocole Bittorrent
Là, il ne faut pas se tromper. Pour être sûr de ce qu'on fait, on ne va pas utiliser de client Bitorrent. En effet, l'algorithme du client pourrait être la cause d'une vitesse trop faible. On va donc utiliser exactement la même méthode qu'à l'étape précédente, mais en maquillant grossièrement les données pour qu'elles aient l'air d'un échange entre 2 peers via Bittorrent.
On récupère le début d'un transfert Bittorrent à l'aide d'un sniffer tel que ethereal. On lance ethereal, puis on lance son client bittorrent avec n'importe quel torrent susceptible de générer du traffic. On attend un peu, puis on stoppe la capture des paquets, et on peut fermer son client Bittorrent. Dans le traffic capturé, on cherche le début d'un transfert de fichier. Ethereal est pratique, il connaît le protocole Bittorrent et on peut lui demander de n'afficher que le transfert lié à Bittorrent. Il affiche même les paquets qui correspondent à l'initialisation d'un transfert, qu'il présente comme "Bittorrent handshake". On regarde le contenu d'un tel paquet, on lui demande de sauvegarder, en binaire, la partie qui concerne le protocole Bittorrent (c'est-à-dire tout ce qui est au-dessus de TCP dans le paquet).
J'ai appelé ce fichier bittorrent.dat, voici son contenu:
Code : Tout sélectionner
bash$ hexdump -C bit.dat
00000000 13 42 69 74 54 6f 72 72 65 6e 74 20 70 72 6f 74 |.BitTorrent prot|
00000010 6f 63 6f 6c 00 00 00 00 00 00 00 00 f3 d8 05 8c |ocol........óØ..|
00000020 bc b8 9e 64 d2 ca 77 1e 6e 63 bd 7f db 1d 6c 69 |Œž.dÒÊw.ncœ.Û.li|
00000030 2d 6c 74 30 41 34 30 2d 78 f0 64 c5 f9 cc 18 60 |-lt0A40-xðdÅùÌ.`|
00000040 07 57 23 ec |.W#ì|
00000044
On insère le contenu de ce fichier au début de notre bigfile.dat, par exemple comme ceci:
Code : Tout sélectionner
bash$ cat bigfile.dat >> bittorent.dat
bash$ mv bittorrent.dat bigfile.dat
Donc, avec notre nouveau fichier bigfile.dat, on refait l'étape précédente. Et là... on attend, on attend, longtemps. on regarde la taille du fichier en local pour voir à quelle vitesse il grandit. Résultat: 2 Ko/s. C'est-à-dire 500 fois moins vite que tout à l'heure. Conclusion: lorsque Noos voit que le traffic correspond au protocole Bittorrent, eh bien il vous met des batons dans les roues, et vous vous dîtes "ça allait plus vite avec mon modem 56K".
Conclusion
Télécharger 100 Mo en HTTP ou en n'importe quoi, depuis le port 8080 d'un serveur, ça va vite. Faire pareil avec juste quelques octets au début du transfert qui ressemblent à du Bittorrent, et vous passez de 1000 Ko/s à 2 Ko/s.
Donc je ne sais pas qui sont ces personnes chez Noos qui prétendent qu'il n'y a pas de filtrage et qu'il n'y en a jamais eu, mais ce que je sais c'est que c'est faux. Elles ne mentent peut-être pas, c'est peut-être ce qu'on leur fait croire chez Noos. Ou bien on leur a interdit de dire qu'il y a du filtrage, car si une source officielle le disait, ça se répandrait trop vite, alors que là, on l'a vu, le doute subsiste. Enfin subsistait.