Python การใช้งานโปรโตคอล Go-back-N สำหรับการถ่ายโอนไฟล์โดยใช้การสื่อสารเซิร์ฟเวอร์ไคลเอนต์ผ่าน UDP
ไคลเอนต์ถ่ายโอนไฟล์เดียวไปยังไดเร็กทอรีในเครื่องของเซิร์ฟเวอร์ผ่าน UDP บนเครือข่ายที่ไม่น่าเชื่อถือ มาก เริ่มต้นด้วยการอ่านข้อมูลจำนวนหนึ่งจากไฟล์และส่งเป็นแพ็กเก็ต (ขนาดแพ็กเก็ต < 1KB) ไปยังเซิร์ฟเวอร์ที่รับทราบแพ็กเก็ตที่ได้รับ สิ่งที่จับได้ก็คือโปรแกรมไคลเอนต์สามารถส่งหลายแพ็กเก็ตไปยังเซิร์ฟเวอร์โดยไม่ต้องรอการตอบรับ แต่ถูกจำกัดให้รักษาหน้าต่างขนาด N ไว้ในช่วงหมายเลขลำดับของแพ็กเก็ตที่ไม่รู้จัก 'ฐาน' ขอบเขตล่างคือหมายเลขลำดับของแพ็กเก็ตที่ยังไม่ได้รับทราบที่เก่าที่สุด และขอบเขตบนคือขนาดหน้าต่างทั้งหมด นอกจากนี้ยังรักษา nextSeqnum ที่กำหนดไว้ให้เป็นหมายเลขลำดับของแพ็กเก็ตที่จะส่ง ในทางกลับกัน โปรแกรมเซิร์ฟเวอร์จะรักษาหมายเลขลำดับของแพ็กเก็ตตามลำดับถัดไปเท่านั้น
เพื่อต่อสู้กับความไม่น่าเชื่อถือของเครือข่าย โปรโตคอลนี้รวมการใช้หมายเลขลำดับ การตอบรับแบบสะสม การตรวจสอบ และการดำเนินการหมดเวลา/ส่งซ้ำ
หากแพ็กเก็ตหลุด ทำซ้ำ หรือจัดส่งผิดลำดับ Seqnum ของแพ็กเก็ตที่ได้รับจะไม่อยู่ในลำดับ นั่นคือ seqnum ที่คาดหวังและ seqnum ที่ได้รับไม่ตรงกัน เซิร์ฟเวอร์จะละทิ้งแพ็กเก็ตที่ไม่เรียงลำดับและส่ง ACK อีกครั้งสำหรับแพ็กเก็ตตามลำดับที่ได้รับล่าสุด เหตุการณ์การหมดเวลาเกิดขึ้นที่ไคลเอนต์ ซึ่งนำไปสู่การส่งแพ็กเก็ตทั้งหมดที่ถูกส่งไปแล้วแต่ยังไม่ได้รับการยอมรับอีกครั้ง
หากมีการสร้างข้อผิดพลาดบิตเดียวภายในแพ็กเก็ต ค่า Checksum จะบ่งชี้ว่าแพ็กเก็ตเสียหาย โปรแกรมไคลเอนต์คำนวณผลรวมตรวจสอบข้อมูลโดยใช้ไลบรารีแฮชและผนวกค่าที่คำนวณได้เข้ากับแพ็กเก็ตที่ส่ง โปรแกรมเซิร์ฟเวอร์จะแยกค่าเช็คซัมนี้ คำนวณเช็คซัมของข้อมูลที่ได้รับอีกครั้ง และเปรียบเทียบค่าทั้งสองค่า หากแพ็กเก็ตเสียหาย เซิร์ฟเวอร์จะละทิ้งแพ็กเก็ตและส่ง ACK สุดท้ายอีกครั้ง สิ่งนี้นำไปสู่การส่งสัญญาณซ้ำของแพ็กเก็ตที่เสียหายจากฝั่งไคลเอ็นต์