如何在C中使用UDP分配PacketID以跟踪不可靠网络上的数据包?

时间:2018-12-08 03:06:14

标签: c udp

很抱歉,这个问题看起来很奇怪。现在,我有一个客户端使用UDP通过可靠的网络将数据包发送到服务器。对于我的项目,我必须使用UDP在不可靠的网络上发送这些数据包。为了模拟不可靠的网络,我正在运行sudo tc qdisc add dev lo root netem delay 100ms 20ms 25% loss 0.5% duplicate 1% reorder 25% 50%

由于数据包被丢弃和复制,我想为每个数据包分配一个PacketID以便跟踪每个数据包。例如,如果跳过PacketID 5,则在正确发送5之前不会发送其他数据包。如果要复制PacketID 5,它将不接受重复的版本。

我觉得我了解分配PacketID的方法,但是我对套接字编程还很陌生,我不知道是否有更有效的方法。我不是要答案(因为这是一个上课的项目),而是要提供一些有关我应该如何解决的建议和提示

1 个答案:

答案 0 :(得分:0)

需要确认数据包。另外,可以使用计时器。 如果接收方收到ID为n的数据包,它将等待n + 1个数据包ID,并且将一直等待直到定时器集到期。所有ID大于n + 1的数据包将被丢弃。当接收到n + 1个数据包时,必须以n + 1的形式从接收方向发送方发送一个确认数据包,因为这表示已接收到该数据包。发件人可以等到收到ack数据包。