1

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

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

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

  1. 客户端的 UDP 数据包使用源端口 58963(不断变化)发送到端口 1234 的目标

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

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

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

4

1 回答 1

1

原因是服务器使用新的 UDP 套接字发送回复,而不是使用接收请求的相同套接字。从经济角度来看,这是一种糟糕的做法,而且它也使得任何所需的 UDP 打孔变得不可能。

于 2015-02-17T05:10:36.920 回答