* Plusieurs petits fichiers vs un seul gros fichier Faire deux transmissions réelles avec scp (par ex.), une avec plusieurs petits fichiers, l'autre avec un gros fichier qui les englobe, pour vérifier la différence de débit. Création des petits fichiers : mkdir test cd test for i in `seq 64` ; do dd if=/dev/zero of=$i bs=1k count=8 ; done Création du gros fichier : tar cvf ../test.tar * * Ethereal http://www.onlamp.com/pub/a/security/2004/05/13/etherealtips.html - Introduction - faire une capture - ouverture des fichiers scp.raw et ecn-kdedev.raw - Follow TCP stream - filtres d'affichage - Menu Statistics - graphique du débit d'un flux ** Questions - Pourquoi on ne voit pas cwnd, ssthresh etc. dans les paquets ? * /proc/sys/net/ipv4 Regardez les pseudo-fichiers /proc/sys/net/ipv4/tcp* en vous inspirant du lien donné en cours. * Programmation réseau : contrôle de congestion simple au-dessus d'UDP Écrire au-dessus d'UDP un logiciel qui envoie des données. Les données envoyées sont simplement des octets 0. Les paquets échangés sont de deux types : données et accusés de réception. Les données circulent du serveur au client, les accusés du client au serveur. L'en-tête des paquets de données a un seul champ : le numéro de séquence (2 octets). Les paquets d'accusé contiennent un seul champ : numéro cumulatif de séquence accusée. Le transfert se passe comme suit : - le serveur se met en attente d'une connexion - le client envoie un message au serveur, initiant ainsi la connexion - le serveur commence à lui envoyer des paquets de 1 ko suivant le principe du contrôle de congestion TCP - le client attend des paquets et, à chaque paquet reçu, envoie tout de suite un accusé cumulatif. Le timeout des accusés est fixe, par ex. de 30 ms (ou une autre valeur que vous jugez meilleure). Si l'exercice est fait sur un lien local, une perte ne sera observée pratiquement jamais. Dans ce cas, rejeter un paquet de temps en temps côté serveur ou côté client. Liens pour la programmation réseau en C : http://www.ecst.csuchico.edu/~beej/guide/net/ http://www.commentcamarche.net/, rubrique client-serveur Utiliser les squelettes client.c et server.c. Compiler les deux programmes (gcc -Wall -O2 ...) et les exécuter comme suit : - ./server - ./client localhost Vous pouvez prendre des simplifications, par exemple des tableaux statiques etc. a. Y a-t-il besoin d'une somme de contrôle dans l'en-tête ? b. Implémenter le slow start. De quelles variables avez-vous besoin ? (ssthresh, cwnd, ...) c. Afficher le débit : toutes les 1/N secondes, afficher le nombre de paquets * taille des paquets / N. (N=10 par ex.) En même temps, afficher d'autres informations, comme le RTT, la taille de la fenêtre de congestion et la valeur de ssthresh. d. Implémenter la congestion avoidance. (e. Implémenter le fast retransmit.) (f. Implémenter le fast recovery.) NOTES : Le serveur envoie des données et reçoit des accusés en même temps. Pour implémenter cela, vous pouvez utiliser la fonction select (man select).