Python-Implementierung des Go-back-N-Protokolls für die Dateiübertragung mithilfe der Client-Server-Kommunikation über UDP.
Der Client überträgt eine einzelne Datei über UDP in das lokale Verzeichnis des Servers in einem SEHR unzuverlässigen Netzwerk. Es beginnt mit dem Lesen von Datenblöcken aus einer Datei und dem Senden dieser als Pakete (Paketgröße < 1 KB) an den Server, der die empfangenen Pakete bestätigt. Der Haken daran ist, dass das Client-Programm mehrere Pakete an den Server senden kann, ohne auf eine Bestätigung zu warten, aber darauf beschränkt ist, ein Fenster der Größe N über einen Bereich von Sequenznummern unbestätigter Pakete aufrechtzuerhalten. Die untere Grenze „Basis“ ist die Sequenznummer des ältesten unbestätigten Pakets und die obere Grenze ist die gesamte Fenstergröße. Außerdem wird die nextSeqnum verwaltet, die als Sequenznummer des zu sendenden Pakets definiert ist. Andererseits verwaltet das Serverprogramm nur die Sequenznummer des nächsten Pakets in der richtigen Reihenfolge.
Um der Unzuverlässigkeit des Netzwerks entgegenzuwirken, umfasst dieses Protokoll die Verwendung von Sequenznummern, kommulativen Bestätigungen, Prüfsummen und einer Timeout-/Neuübertragungsoperation.
Wenn ein Paket verworfen, dupliziert oder in der falschen Reihenfolge zugestellt wird, ist die Reihenfolge der empfangenen Pakete nicht in der richtigen Reihenfolge – das heißt, die erwartete Reihenfolge und die empfangene Reihenfolge stimmen nicht überein. Der Server verwirft das Paket außerhalb der Reihenfolge und sendet erneut eine Bestätigung für das zuletzt empfangene Paket außerhalb der Reihenfolge. Beim Client tritt ein Timeout-Ereignis auf, das zur erneuten Übertragung aller Pakete führt, die gesendet, aber noch nicht bestätigt wurden.
Wenn in einem Paket ein Einzelbitfehler auftritt, zeigt der Wert der Prüfsumme an, dass das Paket beschädigt ist. Das Client-Programm berechnet mithilfe der Hash-Bibliothek die Prüfsumme der Daten und hängt den berechneten Wert an das gesendete Paket an. Das Serverprogramm extrahiert diesen Prüfsummenwert, berechnet die Prüfsumme anhand der empfangenen Daten neu und vergleicht die beiden Werte. Wenn das Paket beschädigt ist, verwirft der Server das Paket und sendet die letzte ACK erneut. Dies führt zur erneuten Übertragung des beschädigten Pakets von der Clientseite.