La Fibre

Télécom => Logiciels et systèmes d'exploitation => testdebit Iperf => Discussion démarrée par: sygirard le 08 janvier 2016 à 15:50:49

Titre: Iperf client/serveur sur le même PC
Posté par: sygirard le 08 janvier 2016 à 15:50:49
Bonjour,

dans le cadre de l'un de nos projet, on nous demande de mettre en place un banc de test iperf.

Ce dernier se compose d'un PC de contrôle (qu'on nommera PCtrl) où Iperf serveur et Iperf client tourneront.
Ce PC aura deux cartes réseau, avec chacune une IP fixe de configurée.

Il y aura deux PC portables (P1 et P2), possédant un port ethernet et un port Wifi.
On aura configuré une connexion de pont entre ces deux ports et on lui aura configuré une IP fixe.

On relie P1 sur la carte réseau 1 du PCtrl et P2 sur la carte réseau 2 du PCtrl.

Le flux de données passe donc de PCtrl vers P1 par câble, puis de P1 vers P2 via Wifi, puis de P2 vers PCtrl par câble.

Est-il possible de faire tourner Iperf serveur et iperf Client sur le même PC ?
Si oui, y a-t-il des paramètres de configuration Iperf me permettant de garantir un bon fonctionnement de cette manip ?

Je précise que l'on aura bien éteint les firewall, que les route IP seront correctement paramétrées, etc ...

Tous les PC seront sous Windows 7.

Merci
Sylvain
Titre: Iperf client/serveur sur le même PC
Posté par: vivien le 08 janvier 2016 à 17:53:53
Oui, pas de problème pour mettre iperf en client et en serveur sur le même PC, à condition d'utiliser des ports différents.

Pour spécifier un port, c'est l'option -p que tu rajoutes à la ligne de commande.

A noter que Windows 7 est connu pour avoir des pb de perf pour des latences < 10ms et des débits > 80 Mb/s en TCP, à cause d'une Rwin limitée à 64 Ko dans certains cas quand la latence est < 10ms.

iPerf2 à des pb de perf pour les très haut débit, je conseille vivement iperf3 en TCP.
En UDP, iPerf3 a un mode de fonctionnement bien différent de iPerf2 (plus possibilité de faire de DDOS avec iperf3) mais qui peut poser pb pour des tests => Je conseille iperf2 pour les tests UDP.
Titre: Iperf client/serveur sur le même PC
Posté par: Darklight le 08 janvier 2016 à 21:58:44
Rien à voir mais la compatibilité de Iperf3 laisse à désirer : sur le site la version binaire pour Windows fonctionne entre client et serveur mais l'installation du paquet pour Linux (Debian 7) échoue, donc pas moyen de faire le test pour le même serveur, et un apt install iperf n'utilise pas le bon port, je suppose que ça installe pas la bonne version mais iperf3 n'est pas reconnu par le gestionnaire apt.

Comment faire?
Titre: Iperf client/serveur sur le même PC
Posté par: BadMax le 08 janvier 2016 à 22:44:26
Faire tourner iperf client et serveur en effet ça marche.

Mais pas comme vous le souhaitez. En effet, si le but est de faire passer le flux à travers PC1 et PC2, il faut bypasser le routage local de linux : le iperf client ira directement se connecter sur iperf serveur sans passer par PC1 et PC2.

Le contournement serait de faire tourner le client ou le serveur dans un namespace différent pour l'une des cartes réseaux. Cherchez "linux namespace" et y'a plus qu'à :)
Titre: Iperf client/serveur sur le même PC
Posté par: vivien le 08 janvier 2016 à 23:42:43
Effectivement, je n'avais pas compris que le but était que le même flux sorte et rentre dans le même PC.

Le plus simple, pour répondre à la problématique est peut être de mettre un second PC virtuel sur le PC1 avec une VirtualBox.

Sinon, pour linux :
- Installation de iPerf2 : sudo apt install iperf
- Installation de iPerf3 : sudo apt install iperf3

Debian 7 stable propose la version 3.0.7 de iPerf3. Pour installer la version 3.0.11, il faut aller chercher le paquet en testing ou unstable.
Autre solution plus simple, suivre le tutoriel sur https://iperf.fr/iperf-download.php#more-recent

Les paquets installés par le tutoriel, sont ceux fourni par le mainteneur iPerf3 de Debian, Raoul Gunnar Borenius => https://qa.debian.org/developer.php?login=borenius@dfn.de
Titre: Iperf client/serveur sur le même PC
Posté par: Darklight le 09 janvier 2016 à 01:14:04
Bon j'essayerai ça sur mon Linux demain je te tiens au courant. Sinon c'est vraiment bien comme logiciel et très simple pour tester son réseau, un seul paramètre à rentrer dans la commande suffit, c'est un poil plus dur que faire un wget!  ;)
Titre: Iperf client/serveur sur le même PC
Posté par: sygirard le 11 janvier 2016 à 11:51:08
Si j'en reviens à mon problème, pourquoi ne peut-on pas lancer un serveur et un client sur un même PC avec deux cartes réseaux distinctes ?

Parce que le flux de test entre et sort par le même port (5001 par défaut) ?

J'ai vu une option : -B Host

Cette option ne permet-elle pas justement de choisir par quelle carte réseau le flux rentre (serveur) et sort (client) en y donnant l'adresse IP de la carte ?

Ou alors j'ai pas tout compris à leur documentation.



Titre: Iperf client/serveur sur le même PC
Posté par: corrector le 11 janvier 2016 à 13:33:05
Je ne vois pas bien ce que cherches à faire.
Titre: Iperf client/serveur sur le même PC
Posté par: vivien le 11 janvier 2016 à 13:47:13
Ce qui pose problème et sous réserve que j'ai bien compris, c'est que tu cherche a ce que ton PC initie une connexion TCP avec lui même mais en sortant par le réseau (sans faire de bouclage interne)

Pourquoi ne pas lancer un VM afin d'éviter que le même PC initie une connexion vers lui même, si c'est bien ton besoin ?

Sinon cela va donner ça :

$ iperf3 -c 192.168.1.18
Connecting to host 192.168.1.18, port 5201
[  4] local 192.168.1.18 port 40246 connected to 192.168.1.18 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  4.71 GBytes  40.4 Gbits/sec    0   1.25 MBytes       
[  4]   1.00-2.00   sec  4.46 GBytes  38.3 Gbits/sec    0   1.25 MBytes       
[  4]   2.00-3.00   sec  4.48 GBytes  38.5 Gbits/sec    0   1.25 MBytes 


40 Gb/s, car cela reste un transfert en interne dans mon PC
Titre: Iperf client/serveur sur le même PC
Posté par: corrector le 11 janvier 2016 à 14:02:11
Une connexion vers l'adresse locale passe toujours par le périphérique de bouclage "loopback".
Titre: Iperf client/serveur sur le même PC
Posté par: kgersen le 11 janvier 2016 à 16:33:14
Pourquoi ne pas lancer un VM afin d'éviter que le même PC initie une connexion vers lui même, si c'est bien ton besoin ?
attention: le seul moyen de faire ca est de dédier une des 2 cartes réseaux a une VM. Il ne faut pas que la carte réseau soit paramétrée en IP sur l’hôte.
si non ca fera juste du traffic hote<->VM en interne sans sortir de la machine.

La prochaine version de Windows Server (2016) supportera les namespace et les containers. On pourra donc faire comme sur Linux et partitionner. En attendant il n'y a pas trop de choix:

- VM sur une carte réseau dédiée
ou
- système de NAT dans un PC1 ou PC2 pour avoir 2 réseaux différents: au lieu de faire une connexion de pont dans PC1 ou PC2 on fait un NAT entre les 2 réseaux. Mais il faut s'assurer avant que la performance CPU ne va pas fausser les résultats.

Windows 7 supporte de base du NAT avec "netsh interface portproxy".

Exemple sur PC1:

PC2 va faire donc une connexion de pont comme avant.
sur PC1 on ne fait pas de pont, on configure 2 réseaux IP , un coté PCtrl (lan), un coté PC2 (wifi)
Sur PC1 on peut donc joindre PCtrl via 2 IP différentes.

IP_PC1_LAN = adresse LAN de PC1 (donc adresse relié a PCtrl)
IP_PCtrl_LAN2 = adresse LAN de PCtrl vers PC2

la commande a saisir sur PC1:

netsh interface portproxy add v4tov4 listenport=5201 listenaddress=IP_PC1_LAN connectaddress=IP_PCtrl_LAN2 connectport=5201 protocol=tcp

=> PC1 va écouter sur le port 5201 tcp et renvoyer tout ce qui y arrive sur IP_PCtrl_LAN2 (= PCtrl via wifi via PC2).

sur PCtrl on lance un serveur IPerf en écoute:
iperf3 -s   (on peut limiter l'IP d'écoute avec -B si on souhaite)
et sur PCtrl on lance un client IPerf vers PC1 (et via le portproxy ca nous revenir via PC2).
iperf3 -c IP_PC1_LAN -i 1
Je n'ai pas tester mais "ca devrait marcher" sauf oubli/erreur de ma part. Le débit sera éventuellement limité  par le CPU de PC1 mais bon le wifi risque d’être le maillon lent avant (surveiller quand meme la conso CPU de PC1).

portproxy fonctionne aussi en IPv6 et v4tov6 et v6tov4. mais pas en UDP.

pour supprimer la redirection :
netsh interface portproxy delete v4tov4 listenport=5201 listenaddress=IP_PC1_LANou carrèment:
netsh interface portproxy reset
pour voir la ou les redirections actives:
netsh interface portproxy show all
Titre: Iperf client/serveur sur le même PC
Posté par: sygirard le 12 janvier 2016 à 10:32:27
Ce que je cherche à faire ...

Aujourd'hui, on a un banc de test composé de :
    - 2 PC fixes (client iperf, serveur iperf)
    - 2 PC portables (avec un pont effectué entre le port ethernet et le port Wifi), ou autre appareils (téléphone, bornes wifi, etc ....)
Le but du banc de test est d'obtenir les performances réseau des appareils (2 portables ou autres appareils) en fonction de certaines contraintes
imposés sur le Wifi (ou autre techno de communication selon appareil testé).

Notre client voudrait réaliser la même manipulation, mais il ne veut qu'un seul PC fixe (iperf client et serveur).

En schéma, voir pièce jointe.

Titre: Iperf client/serveur sur le même PC
Posté par: sygirard le 12 janvier 2016 à 10:35:28
Les perturbations étant amenées par un émulateur de canal RF piloté par le même PC fixe qui lancera iperf client et serveur.
Titre: Iperf client/serveur sur le même PC
Posté par: kgersen le 12 janvier 2016 à 14:40:46
C'est que la mesure du lien Wifi qui importe ou aussi les performances de connexion de pont des 2 portables ?

Il me semble plus simple et plus precis de mettre iperf sur les 2 portables (un en client, l'autre en serveur) que de faire cela depuis un ou 2 PC fixe non ?

Si il y'a des besoins d'automation/script on peut très bien tout lancer et controller depuis un PC fixe avec PSExec  (https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx)par exemple:

psexec \\Portable1 iperf3 -s

psexec \\Portable2 iperf3 -c Portable1 -i 1
Titre: Iperf client/serveur sur le même PC
Posté par: sygirard le 12 janvier 2016 à 14:50:38
Non c'est la mesure du lien Wifi seulement.

On ne lance pas depuis les deux portables, car comme je le disais, les 2 PC portables peuvent être d'autres appareils comme une borne Wifi, un téléphone portable, ou autre.

La question n'est pas de savoir comment faire, ni comment paramétré le réseau, mais seulement de savoir si c'est possible de lancer iperf serveur et client sur le même réseau, si il y a des options spécifiques auxquelles je dois faire attention, lesquelles, et tout autre mise en garde qui pourrait m'être utile.

Le client veut juste un seul PC sur son banc de test hors PC utilisés pour les tests (sur mon schéma => les eux portables).

Merci
Titre: Iperf client/serveur sur le même PC
Posté par: kgersen le 12 janvier 2016 à 15:16:15
Non c'est la mesure du lien Wifi seulement.

On ne lance pas depuis les deux portables, car comme je le disais, les 2 PC portables peuvent être d'autres appareils comme une borne Wifi, un téléphone portable, ou autre.

La question n'est pas de savoir comment faire, ni comment paramétré le réseau, mais seulement de savoir si c'est possible de lancer iperf serveur et client sur le même réseau, si il y a des options spécifiques auxquelles je dois faire attention, lesquelles, et tout autre mise en garde qui pourrait m'être utile.

Le client veut juste un seul PC sur son banc de test hors PC utilisés pour les tests (sur mon schéma => les eux portables).

Merci

-> un seul réseau ou un seul PC ...

un seul PC = pas possible sauf si sous Linux ou avec une VM (Windows ou Linux) en plus.

si Windows est l'environnement maîtrisé alors une VM avec Windows me semble le plus simple (meme WinPE devrait suffire).

Au niveau d'IPerf lui-meme il n'y a rien de spécifique la.
Titre: Iperf client/serveur sur le même PC
Posté par: sygirard le 12 janvier 2016 à 15:29:22
Pardon, faute de frappe, il fallait bien lire "si c'est possible de lancer iperf serveur et client sur le même PC"

Quelle particularité à Linux pour qu'il puisse faire ce que je veux et pas Windows ?
Titre: Iperf client/serveur sur le même PC
Posté par: kgersen le 12 janvier 2016 à 15:42:59
ca été répondu deja (posts de Badmax et Vivien notamment).

une machine ne peut joindre sa propre IP à  partir d'une autre en 'sortant' sur le réseau physique. Le routage local va toujours passer par le loopback.

Sur Linux on peut partitionner la machine en 2 et faire en sorte que 2 processus voient des config réseaux différentes (notion de namespace).
On peut aussi manipuler la table ARP et iptables pour obtenir ce genre de fonctionnement (assez compliqué à  faire, les namespace sont plus simples).

Sur Windows c'est impossible.
Titre: Iperf client/serveur sur le même PC
Posté par: corrector le 12 janvier 2016 à 17:13:35
Sur Linux on peut partitionner la machine en 2 et faire en sorte que 2 processus voient des config réseaux différentes (notion de namespace).
On peut aussi manipuler la table ARP et iptables pour obtenir ce genre de fonctionnement (assez compliqué à  faire, les namespace sont plus simples).
Avec la table local de iptables?

J'avais essayé de comprendre ce truc à une époque...