go back n udp
1.0.0
Python 实现 Go-back-N 协议,用于使用 UDP 上的客户端服务器通信进行文件传输。
客户端在非常不可靠的网络上通过 UDP 将单个文件传输到服务器的本地目录。它首先从文件中读取数据块,并将它们作为数据包(数据包大小 < 1KB)发送到服务器,服务器确认收到的数据包。问题在于,客户端程序可以在不等待确认的情况下向服务器发送多个数据包,但仅限于在未确认数据包的序列号范围内维护大小为 N 的窗口。下限“base”是最旧的未确认数据包的序列号,上限是总窗口大小。它还维护 nextSeqnum,它被定义为要发送的数据包的序列号。另一方面,服务器程序仅维护下一个有序数据包的序列号。
为了克服网络的不可靠性,该协议结合了序列号、交换确认、校验和以及超时/重传操作的使用。
如果数据包被丢弃、重复或乱序传送,则接收到的数据包的 Seqnum 将乱序,即预期的 seqnum 和接收到的 seqnum 不匹配。服务器丢弃无序数据包,并为最近收到的有序数据包重新发送 ACK。客户端发生超时事件,导致所有已发送但尚未确认的数据包重新传输。
如果数据包内出现单比特错误,则校验和的值表明数据包已损坏。客户端程序使用哈希库计算数据的校验和,并将计算出的值附加到发送的数据包中。服务器程序提取该校验和值,重新计算接收到的数据的校验和并比较两个值。如果数据包损坏,服务器将丢弃该数据包并重新发送最后一个 ACK。这会导致客户端重新传输损坏的数据包。