如何解决这样的一个致命的简单设计问题(发送UDP包),可能出现错误的ACK的问题,高手请进
通过UDP发送信息,客户端发送的UDP包分别带0,1,0,1,0,1...的序列号,每次仅仅发送一个UDP包,同时设置一个Timer
服务器接收这些带序列号的UDP包,从0开始,假如这一次收到一个0序列的UDP,那末下一个包应该带序列号1,如果是1,那么下一个因该带0,这样假如下一个UDP带的序列号不符合这个规则,就丢掉下这个带错误序列的包
如果符合这个规则,就发送一个ack,客户端收到,才允许发送下一个UDP,假如客户太长时间没有收到ack,time out就把当前的再次发送
实际上是一个stop wait的简单协议
现在的问题是
我发送一个比如带1序列号的udp,服务器收到了,于是发送一个带1序列号的ack,但是由于无联接协议的特性,这个ack在网络上传递的时间很长,这个时候客户端time out,再次发送这个带序列号1的udp,服务器收到后,再次发送一个带1序列号的ack,这个ack到达客户端,客户端就发送下一个带序列号0的udp,这个upd成功到达,它的带序列号0的ack也成功到达客户,于是客户端发送下一个带序列号1的udp,发送后,这个包却丢失了,没有到达服务端,所以也没有这个带序列号1的ack反馈给客户
但是,还记得刚刚开始时候哪个在在网络上传递的时间很长的带序列号1的ack吗,它突然到达了客户端,于是客户端误以为当前带1序列号的udp到达了服务器(实际上没有!!)
这个问题我刚刚发现,求救各位高人停等协议如何解决这个问题
up有分!!!!!!!!!!!!!

