UDP数据包被网络堆栈丢弃的原因是什么

时间:2014-03-24 12:53:37

标签: linux udp iptables packet

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

nc -l -u 25555

显示没有流量。

我已经查过:

  1. iptables已关闭
  2. 目标MAC地址与传入接口匹配
  3. 目标IP地址与传入接口匹配
  4. IP校验和正常
  5. UDP校验和正常
  6. 此外,所有数据包都被丢弃,因此上传rx缓冲区不会出现问题。

    有什么想法可能导致pakcets掉线吗?

2 个答案:

答案 0 :(得分:2)

您的计算机上有另一个进程正在读取到达端口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系统上进入单个进程,即使有多个进程试图从同一地址读取。

答案 1 :(得分:0)

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