正如你在标题中看到的,我必须建立一个可靠的P2P数据传输使用UDP(我是一个学生),所以我要求你们不要给我代码,实际上,我讨厌复制和粘贴这么多,我觉得这样做很痛苦,我寻求帮助,告诉我我需要什么工具,我熟悉Javascript,Java和Python,随时帮助我,如果你知道这些语言中的任何一种。
可靠性部分将通过校验和和ACK(确认)实现,因此我必须实现它们:- 我知道如何计算校验和。-ACK可以通过Stop-and-wait协议实现(我认为这是最简单的一个),如果你知道另一个协议,也可以。
我真的迷路了,我不知道我从哪里开始,如果你有一些代码示例,请分享一个链接,这将是有帮助的,所以我可以建立一个想法,我从哪里开始。
谢谢。
2条答案
按热度按时间kmpatx3s1#
这里有一些可靠的UDP例子,比如kcp,quic,utp,你可以阅读它们,从中得到一些基本的东西。
至于怎么做,有几点小建议:
1.您需要ACK来检查是否有任何数据包/数据报丢失,然后重新传输
1.您需要使用FEC
1.拥塞算法可以稍后考虑。
当你试图构建自己的代码时,在每一步都要有一个小目标,不要一开始就构建一个复杂的协议。
cvxl0en22#
如果您需要解释,请参阅以下资源
从一个学生到另一个学生-我的网络课使用Kurose和Ross,他们的第3章3. 4节关于可靠的数据传输以一种非常好的方式分解了这一点。
他们首先假设通过网络进行可靠的数据传输,使用“rdt 1.0”协议通过该网络进行传输,然后慢慢添加不同类型的不可靠性(比如数据包丢失或数据包损坏)。当你达到“RDT 3. 0”时,你应该有了你想要的--在UDP之上的可靠数据传输。当然,他们的方法有点抽象,但这是一个很好的解释。我可以链接在他们的最终发送者和接收者状态机,以及教科书的名称。
以下是这本教科书的详细解释:
1.首先假设一个完全可靠的网络,你只需要把数据包从发送者发送到接收者。
1.假设网络现在有位损坏。您将需要传输校验和,以便在数据包损坏的情况下进行恢复。这也需要ACK(最初是NAK,但ACK上的序列号消除了这一点)。记住,您的ACK也是通过网络的数据包,它们也可能损坏!(解决方案是在ACK上使用序列号)
1.假设网络现在可能丢失数据包,可靠的数据传输现在需要一个超时机制来重新发送一个没有收到ACK的数据包。
如果您只需要实施-以下是资源
教科书- Kurose和Ross,计算机网络,自上而下的方法第3章,第3.4节
接收器状态机留给读者作为练习,但应该很容易从他们的解释中拿起。
注意-我与这个问题中提到的教科书没有任何关系。我只是用它来上网络课,我觉得它对所问的问题有很好的解释。