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).
我正在尝试 运行 一款在 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).