Linux 或 OpenBSD TAP 适配器是否将数据包排队,或者如果我尝试在它们进入时在单个线程上处理它们,它会丢失数据包吗?我不担心无法处理所有进来的数据包,但是如果多个数据包在处理开始时正确进入,那么如果适配器没有内部队列,它可能会丢失一些数据包。
Linux 或 OpenBSD TAP 适配器是否将数据包排队,或者如果我尝试在它们进入时在单个线程上处理它们,它会丢失数据包吗?我不担心无法处理所有进来的数据包,但是如果多个数据包在处理开始时正确进入,那么如果适配器没有内部队列,它可能会丢失一些数据包。
在阅读了 Linux
drivers/net/tun.c
和 OpenBSD之后,sys/net/if_tun.c
我得出的结论是它们都使用队列来处理数据包。具体来说,Linux 使用 tun/tap 驱动程序中的队列,而 OpenBSD 使用预先存在的网络堆栈的队列。
我没有手动测试队列功能。