go back n udp
1.0.0
Python 實作 Go-back-N 協議,用於使用 UDP 上的客戶端伺服器通訊進行檔案傳輸。
客戶端在非常不可靠的網路上透過 UDP 將單一檔案傳輸到伺服器的本機目錄。它首先從檔案中讀取資料塊,並將它們作為資料包(資料包大小 < 1KB)發送到伺服器,伺服器確認收到的資料包。問題在於,客戶端程式可以在不等待確認的情況下向伺服器發送多個資料包,但僅限於在未確認資料包的序號範圍內維護大小為 N 的視窗。下限「base」是最舊的未確認資料包的序號,上限是總視窗大小。它還維護 nextSeqnum,它被定義為要傳送的資料包的序號。另一方面,伺服器程式僅維護下一個有序資料包的序號。
為了克服網路的不可靠性,該協定結合了序號、交換確認、校驗和以及逾時/重傳操作的使用。
如果資料包被丟棄、重複或亂序傳送,則接收到的資料包的 Seqnum 將亂序,即預期的 seqnum 和接收到的 seqnum 不符。伺服器丟棄無序資料包,並為最近收到的有序資料包重新發送 ACK。客戶端發生逾時事件,導致所有已發送但尚未確認的資料包重新傳輸。
如果資料包內出現單一位元錯誤,則校驗和的值表示資料包已損壞。客戶端程式使用雜湊庫計算資料的校驗和,並將計算的值附加到發送的資料包中。伺服器程式提取該校驗和值,重新計算接收到的資料的校驗和並比較兩個值。如果封包損壞,伺服器將丟棄該封包並重新傳送最後一個 ACK。這會導致客戶端重新傳輸損壞的資料包。