UDP中的可靠性

时间:2016-12-25 09:30:40

标签: sockets udp reliability

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

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

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

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

client 1 = port A = server 2

server 1 = port B = client 2

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

客户是否定的。它接收信号,只有在丢失数据包时才发送。另一种实现方式是客户端/服务器对可以相互通信,使端口真正单向。

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

client index 1 = server index 2

server index 1 = client index 2

每个字节的索引都是单字节,并在客户端发送新消息时递增。假定消息传递直到接收到特殊消息,该特殊消息将是用于丢弃分组的UDP消息。根据设计的字节顺序以及消息的索引,它会将丢弃消息的信号包含在最重要或最不重要的位/字节中。队列似乎也是必要的,但我还没有详细说明。