我正在尝试将 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
我假设它们是eth0
和lo
。运行 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 您将看到数据包是否正在发送和接收。
我希望这可以为问题的解决提供启示。