libuv:响应的src端口与进程正在侦听的端口不同

时间:2015-02-17 04:55:53

标签: c sockets udp twisted libuv

我有一个用python-twisted编写的客户端,它将UDP数据包发送到IP aaa.bbb.ccc.ddd的端口1234,然后等待响应。 我也有用C-libuv编写的UDP服务器,它侦听端口1234并响应客户端。

现在,当它们在同一台机器上运行时,我可以从UDP服务器的日志中看到它接收到数据并且它已发回响应。 但是客户端的日志并没有显示任何收到UDP数据包的迹象。

当我使用wire-shark进行调查时,我发现了以下内容:

  1. 客户端发送的UDP数据包与源端口58963(不断变化)一起发送到端口1234的目的地

  2. UDP响应(来自UDP服务器)也从58845发送回58963

  3. 然后是ICMP Destination unreachable(Port unreachable)msg。

  4. 这种行为可能是什么原因?

1 个答案:

答案 0 :(得分:1)

原因是服务器正在使用新的UDP套接字发送回复,而不是使用收到请求的同一套接字。这在经济上是不好的做法,它也使得任何所需的UDP打孔都不可能。