UDP数据包被networking堆栈丢弃的原因是什么?

我看到UDP数据到达我的Linux机器上(通过tcpdump),目标端口设置为25555.但是:

nc -l -u 25555 

没有显示交通。

我已经检查过了:

  1. iptables已closures
  2. 目的MAC地址与入接口匹配
  3. 目标IP地址与传入的接口匹配
  4. IP校验和是可以的
  5. UDP校验和是可以的

而且, 所有的数据包都被丢弃了,所以这并不是rx缓冲区溢出的问题。

任何想法还有什么可能会导致帕克丢弃?

Solutions Collecting From Web of "UDP数据包被networking堆栈丢弃的原因是什么?"

您的计算机上正在读取到达端口25555的数据报,您可以从/proc/net/udp看到:

 sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid timeout inode ref pointer drops 104: 00000000:63D3 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 1779298 2 fff810266fe0c 0 

所以,“窃取”你想要的数据报的过程是由root(uid = 0)拥有的。 而插座的inode是1779298,您可以在/proc/PID/fd下搜索root拥有的PID。 一旦你找出哪个进程正在监听,你需要决定是否终止,以便nc可以监听。

即使有多个进程试图从同一个地址读取,单播UDP数据报也只会在Linux系统上进行单个进程。

最后发现数据包被RPF过滤掉了。 请参阅Linux中的net.ipv4.all.rp_filter设置。