# Bureau d'étude réseau - Répertoire de travail Je mets ici le résultat de mes travaux pour le bureau d'étude réseau de 3ème année MIC à l'INSA de Toulouse. Veuillez noter que je ne mets que `mictcp.c` et que vous allez avoir besoin du reste de l'environnement pour compiler et utiliser le protocole. ## Avancement * La v1 a été implémentée et est parfaitement fonctionnelle. * La v2 a été implémentée et fonctionne. Aucun paquet n'est perdu (des compteurs permettent de le vérifier) et les performances sont acceptables. * La v3 est fonctionnelle. Elle peut être testée en mettant DO_HANDSHAKE = 0 * La v4.1 est fonctionnelle et le handshake permet l'échange du ADMITTED_LOSS_RATE ## Notes pour le correcteur *Remarque : Ces notes sont disponibles dans l'entête du fichier mictcp.c.* ``` TP BE Réseaux À L'ATTENTION DU CORRECTEUR: - Ce fichier est le seul fichier que j'ai modifié - La v1 a été implémenté et fonctionne avec tsock_texte et tsock_video. - La v2 a été implémentée et reprise de perte ok. Pour tester la v2, vous devez faire quelques modifications : * Régler les parametres comme suivant : MOD_SEQ_NUM = 2 ADMITTED_LOSS_RATE = 0 * Il faut décommenter les lignes commençant par // [V2] Ces lignes sont dans la fonction process_received_PDU(). - La v3 est implémentée et fonctionnelle. ADMITTED_LOSS_RATE permet de parametrer le taux de paquets perdus abandonnés. S'il vaut 5, alors 5% des paquets perdus ne seront pas renvoyés. Pour tester la v3, passez : * DO_HANDSHAKE = 0 Utiliser cette version permet d'avoir moins de ralentissements, mais au prix de coupure et des pertes d'informations. - La v4.1 est implémentée et fonctionnelle. Le handshake permet également d'échanger le taux de pertes admissibles. Pour tester la v3, le handshake peut être désactivé avec DO_HANDSHAKE = 0. On peut faire plusieurs remarques sur le programme final : - Le taux de pertes admis (ADMITTED_LOSS_RATE) est calculé à chaque itération à partir de l'ensemble des pertes et des envoies fait jusqu'à présent. On aurait pu implémenter une fenêtre (e.g. avec une pile FIFO, et ça serait plus pertinent pour de longues transmissions) mais il est alors plus difficile d'observer les effets de la v3 et de se s'arrurer que les taux de pertes admises sont corrects. - La gestion des pertes admissibles est entièrement gérée par la source et fonctionne sur le principe du stop and wait uniquement. Améliorations possibles : Je vous propose ici quelques idées pour aller plus loin que je n'ai pas eu le temps d'implémenter : - Mettre en place de l'asynchronisme entre le client et MIC TCP. Cela pourrait être fait avec un buffer créant une file d'attente avant le stop and wait. - Mettre en place le multiplexage, en passant toutes les variables globales dans un struct pour chaque socket et utiliser le numéro de port pour identifier à quel socket un paquet appartient. - Utiliser le RTT plutôt qu'un timeout fixe - Regarder l'implémentation de TCP pour le remplacer par MIC-TCP avec par exemple l'utilisation de LD_PRELOAD (bon ça, c'est vraiment ambitieux). ```