首先,我理解 UDP 不是一个可靠的协议,并且我不能保证通过网络接收数据包。
但是,如果数据包确实到达了我的机器,我是否可以保证在应用程序级别接收它,或者网络堆栈可以将其丢弃而不受惩罚?
我问的原因是我似乎偶尔会丢失数据包,即使我知道它们在线上(简单的 EtherCAT 总线,所以数据包总是环回)。
首先,我理解 UDP 不是一个可靠的协议,并且我不能保证通过网络接收数据包。
但是,如果数据包确实到达了我的机器,我是否可以保证在应用程序级别接收它,或者网络堆栈可以将其丢弃而不受惩罚?
我问的原因是我似乎偶尔会丢失数据包,即使我知道它们在线上(简单的 EtherCAT 总线,所以数据包总是环回)。
不,即使数据包到达您的机器,也不能保证数据包会到达您的应用程序。
内核的 UDP 接收队列是有限的,如果数据包到达的速度比您的应用程序处理它们的速度快,则队列将填满并且一些数据包将被丢弃。
您可以增加接收缓冲区的大小(请参阅此问题),但不能使其不受限制。