如果UDP数据包在线上,我保证在应用层得到它们吗?

时间:2012-06-08 07:33:04

标签: c# windows udp reliability ethercat

首先,我感谢UDP不是一个可靠的协议,我不能保证通过网络接收数据包。

但是,如果数据包到达我的机器,我保证会在应用程序级别接收它,或者网络堆栈是否可以将其丢弃而不受惩罚?

我问的原因是我偶尔会丢失数据包,即使我知道它们在线路上(简单的EtherCAT总线,因此数据包总是会回送)。

1 个答案:

答案 0 :(得分:6)

不,即使数据包到达您的计算机,也无法保证数据包能够到达您的应用程序。

内核的UDP接收队列是有限的,如果数据包到达的速度比应用程序可以处理的速度快,则队列将填满,部分数据包将被丢弃。

您可以增加接收缓冲区的大小(请参阅this question),但不能无限制地使用它。

相关问题