UDP 数据包丢失(LAN-Netcat),切换服务器-客户端数据包正常

UDP packets lost (LAN-Netcat) , switching server-client sides packets are OK

我正在尝试 运行 一款在 LAN 上使用 UDP 套接字的游戏,但在我的网络中看不到另一台计算机,所以我尝试了一些东西来查看是什么导致了这个问题。 运行宁OS是:

PC1: Linux Ubuntu
PC2: Windows 10

问题是当PC2监听时,PC1可以发送和接收数据包:

$PC2> ncat -ul 8888
$PC1> ncat -u PC2 8888
OK

发送和接收工作正常,但是当client/server切换时,数据包丢失。

$PC1> ncat -ul 8888
$PC2> ncat -u PC1 8888

附带说明一下,在 PC2 上尝试使用 Python socket.sendto 函数发送数据包时,return 值不是 -1,而是数据包的大小。 在 PC2 上打开防火墙也没有帮助。

这是一个奇怪的问题,因为单向工作正常但切换 client/server 数据包丢失。

其中一台主机 (PC1) 可能在 NAT 后面,而另一台 (PC2) 在public 网络。如果您提供主机的 ip 地址,应该清楚是否是这种情况。 NAT 的存在可以解释为什么切换客户端和服务器会中断。

当数据包从PC1发送到PC2时,NAT会添加一个ip表格翻译记录 (PC1内部ip地址,port1)--(PC1publicip地址,port2), 并在需要时将内部地址转换为 public,反之亦然。

PC1 成为服务器时,无法从 PC2 通过 NAT。除非你配置 NAT 的端口转发或使用一些第三方 NAT 发现服务。

NAT 端口转发的工作方式如下。如果端口转发规则 (PC1 public ip address, port2) -- (PC1 internal ip address, port1)指定,所有数据包发送到(PC1 public ip address, port2) 被转发到 (PC1 internal ip address, port1).