تنفيذ Python لبروتوكول Go-back-N لنقل الملفات باستخدام اتصال خادم العميل عبر UDP.
ينقل العميل ملفًا واحدًا إلى الدليل المحلي للخادم عبر UDP على شبكة غير موثوقة تمامًا . يبدأ الأمر بقراءة أجزاء من البيانات من ملف وإرسالها كحزم (حجم الحزمة أقل من 1 كيلو بايت) إلى الخادم الذي يتعرف على الحزم المستلمة. المشكلة هي أن برنامج العميل يمكنه إرسال حزم متعددة إلى الخادم دون انتظار الإقرار ولكنه مقيد بالحفاظ على نافذة بالحجم N عبر نطاق من الأرقام التسلسلية للحزم غير المعترف بها. الحد الأدنى "الأساسي" هو الرقم التسلسلي لأقدم حزمة غير معترف بها والحد الأعلى هو إجمالي حجم النافذة. كما أنه يحتفظ بـ nextSeqnum الذي تم تعريفه ليكون الرقم التسلسلي للحزمة المراد إرسالها. ومن ناحية أخرى، يحتفظ برنامج الخادم بالرقم التسلسلي للحزمة التالية بالترتيب فقط.
لمكافحة عدم موثوقية الشبكة، يتضمن هذا البروتوكول استخدام الأرقام التسلسلية والإقرارات التراكمية والمجاميع الاختبارية وعملية المهلة/إعادة الإرسال.
إذا تم إسقاط حزمة أو تكرارها أو تسليمها خارج الترتيب، فإن تسلسل الحزم المستلمة سيكون خارج الترتيب - وهذا هو التسلسل المتوقع وعدم تطابق التسلسل المستلم. يتجاهل الخادم الحزمة التي انتهت صلاحيتها ويعيد إرسال ACK للحزمة المرتبة التي تم استلامها مؤخرًا. يحدث حدث انتهاء المهلة عند العميل مما يؤدي إلى إعادة إرسال جميع الحزم التي تم إرسالها ولكن لم يتم الإقرار بها بعد.
إذا تم إنشاء خطأ بت واحد داخل الحزمة، فإن قيمة المجموع الاختباري تشير إلى أن الحزمة تالفة. يقوم برنامج العميل بحساب المجموع الاختباري للبيانات باستخدام مكتبة التجزئة وإلحاق القيمة المحسوبة بالحزمة المرسلة. يستخرج برنامج الخادم قيمة المجموع الاختباري هذه، ويعيد حساب المجموع الاختباري للبيانات المستلمة ويقارن القيمتين. في حالة تلف الحزمة، يتجاهل الخادم الحزمة ويعيد إرسال آخر ACK. يؤدي هذا إلى إعادة إرسال الحزمة التالفة من جانب العميل.