我有一个用python-twisted编写的客户端,它将UDP数据包发送到IP aaa.bbb.ccc.ddd的端口1234,然后等待响应。 我也有用C-libuv编写的UDP服务器,它侦听端口1234并响应客户端。
现在,当它们在同一台机器上运行时,我可以从UDP服务器的日志中看到它接收到数据并且它已发回响应。 但是客户端的日志并没有显示任何收到UDP数据包的迹象。
当我使用wire-shark进行调查时,我发现了以下内容:
客户端发送的UDP数据包与源端口58963(不断变化)一起发送到端口1234的目的地
UDP响应(来自UDP服务器)也从58845发送回58963
然后是ICMP Destination unreachable(Port unreachable)msg。
这种行为可能是什么原因?
答案 0 :(得分:1)
原因是服务器正在使用新的UDP套接字发送回复,而不是使用收到请求的同一套接字。这在经济上是不好的做法,它也使得任何所需的UDP打孔都不可能。