UDP 中的可靠性

Reliability in UDP

我要在Java做一个bittorrent应用程序项目,它需要通过UDP协议传输数据,而不是TCP。在这个项目中,老师让我保证UDP协议的可靠性。于是在网上搜索了一些解决方案,发现在java中,有"ReliableSocket"、"ReliableServerSocket"等类。所以我想知道这些 类 可以满足我的项目要求。这两个 类 有什么区别?

非常感谢您的帮助

UDP 是一种在 IP 协议之上运行的有损不可靠协议。与 TCP(处理可靠通信的所有方面)不同,它由应用层来处理丢弃的数据包和 "reliable" 传输协议的其他方面。因此,任何需要与 TCP 提供的可靠性相似程度的可靠性的实现都可能会产生额外的开销。

您可以预留两个端口 port Aport B。每个端口都是单向的,除非有丢包。

client 1 = port A = server 2

server 1 = port B = client 2

这使事情变得简单。服务器简单地发送数据并定期侦听,但仅在客户端丢弃信号时才接收消息。

客户就是否定。它接收信号并仅在丢失数据包时才发送。另一种实现方式是 client/server 对可以相互通信,使端口真正单向。

我们通过使用两个数据包索引在两个端口上获得消息可靠性。

client index 1 = server index 2

server index 1 = client index 2

每个索引都是单字节的,并在客户端发送新消息时递增。假定消息传递直到接收到特殊消息,该消息将是丢弃数据包的 UDP 消息。根据设计的字节顺序以及消息的索引,它可能包含最重要或最不重要的丢弃消息的信号 bit/byte。队列似乎也是必要的,但我还没有弄清楚它的细节。