Python Implémentation du protocole Go-back-N pour le transfert de fichiers utilisant la communication client-serveur via UDP.
Le client transfère un seul fichier vers le répertoire local du serveur via UDP sur un réseau TRÈS peu fiable. Cela commence par la lecture de morceaux de données à partir d'un fichier et leur envoi sous forme de paquets (taille du paquet < 1 Ko) au serveur qui accuse réception des paquets reçus. Le problème est que le programme client peut envoyer plusieurs paquets au serveur sans attendre un accusé de réception, mais est contraint de maintenir une fenêtre de taille N sur une plage de numéros de séquence de paquets non accusés de réception. La limite inférieure « base » est le numéro de séquence du paquet non reconnu le plus ancien et la limite supérieure est la taille totale de la fenêtre. Il conserve également le nextSeqnum qui est défini comme étant le numéro de séquence du paquet à envoyer. D'un autre côté, le programme serveur conserve uniquement le numéro de séquence du paquet suivant dans l'ordre.
Pour lutter contre le manque de fiabilité du réseau, ce protocole intègre l'utilisation de numéros de séquence, d'accusés de réception commulatifs, de sommes de contrôle et d'une opération de temporisation/retransmission.
Si un paquet est abandonné, dupliqué ou livré dans le désordre, le numéro de séquence des paquets reçus sera dans le désordre, c'est-à-dire le numéro de séquence attendu et la non-concordance du numéro de séquence reçu. Le serveur rejette le paquet dans le désordre et renvoie un ACK pour le paquet en ordre reçu le plus récemment. Un événement de délai d'attente se produit chez le client, entraînant la retransmission de tous les paquets envoyés mais n'ayant pas encore été reconnus.
Si une erreur sur un seul bit est créée dans un paquet, la valeur de Checksum indique que le paquet est corrompu. Le programme client calcule la somme de contrôle sur les données à l'aide de la bibliothèque de hachage et ajoute la valeur calculée au paquet envoyé. Le programme serveur extrait cette valeur de somme de contrôle, recalcule la somme de contrôle sur les données reçues et compare les deux valeurs. Si le paquet est corrompu, le serveur le rejette et renvoie le dernier ACK. Cela conduit à la retransmission du paquet corrompu du côté client.