无法接收 UDP 数据包

无法接收 UDP 数据包

我正在尝试将 UDP 数据包从 Network Simulator 3 (NS-3) 发送到多线程 Python 服务器(使用 UDP 套接字),但无法在服务器端接收数据包。从主机,我可以使用 Netcat 工具接收 UDP 数据包。

NS3 和 Python Server 都在同一台机器上运行。

我能够从 NS3 节点(设备) ping 服务器。

您能帮忙看看问题出在哪里吗?为什么在这种情况下数据包无法到达服务器?

答案1

第一个问题可能是,如果数据包的源和接收者都在同一台机器上,它们实际上并不是通过外部接口 (10.0.0.1) 的地址相互通信,而是通过环回 127.0.0.1。因此,例如,防火墙中的不同过滤规则或策略集可能适用。

需要使用分析仪检查网络通信。

您可以使用 Wireshark 应用程序进行实际尝试。首先找出两个接口的名称:

ip addr

我假设它们是eth0lo。运行 Wireshark 并首先在eth0接口上捕获数据包,然后在 上捕获数据包lo。在这两种情况下,都使用显示过滤器icmp在 Wireshark 中仅显示 ping 数据包。并在尝试使用 UDP 时使用udp.port==5566显示过滤器捕获 UDP 数据包。

我敢打赌,即使你 ping IP 地址 10.0.0.1,你也不会在eth0接口上捕获 ICMP 数据包,而是在 上lo。这就是它在我所有的电脑上的工作方式。

然后使用 UDP 测试检查情况如何。

尝试使用 127.0.0.1 作为目标地址,而不是 10.0.0.1。

另一个问题是,某些应用程序netcat在使用 netstat 检查时没有可见的监听 UDP 套接字。

如果您在同一台机器上运行两个 netcat 实例,监听同一个 UDP 端口,则不会报告任何错误,但实际上只有一个 netcat 应用程序接收数据。这里可能是问题的另一个来源:“看不见的”端口冲突。

使用 Wireshark 您将看到数据包是否正在发送和接收。

我希望这可以为问题的解决提供启示。

相关内容