[英]UDP packets lost (LAN-Netcat) , switching server-client sides packets are OK
我試圖運行一個在LAN上使用UDP套接字的游戲,但看不到網絡中的另一台計算機,因此我嘗試了一些措施來查看可能引起此問題的原因。 正在運行的操作系統是:
PC1: Linux Ubuntu
PC2: Windows 10
問題在於,當PC2正在偵聽時,PC1可以發送和接收數據包:
$PC2> ncat -ul 8888
$PC1> ncat -u PC2 8888
OK
發送和接收正常,但是當客戶端/服務器切換時,數據包丟失。
$PC1> ncat -ul 8888
$PC2> ncat -u PC1 8888
附帶說明一下,在PC2上,當嘗試使用Pythons socket.sendto
函數發送數據包時,返回值不是-1
,它是數據包的大小。 同樣,在PC2上打開防火牆也無濟於事。
這是一個奇怪的問題,因為單向工作正常,但是切換客戶端/服務器會丟失數據包。
其中一台主機( PC1 )可能位於NAT之后 ,而另一台主機 ( PC2 )在公共網絡中。 如果提供主機的ip地址,則應明確情況。 NAT的存在將解釋為什么切換客戶端和服務器中斷的原因。
當數據包從PC1發送到PC2時 , NAT將添加以下格式的IP轉換記錄: (PC1內部IP地址,端口1)-(PC1公共IP地址,端口2) ,並在需要時將內部地址轉換為公共地址,反之亦然。
當PC1成為服務器時,無法通過NAT從PC2到達服務器。 除非您配置NAT的端口轉發或使用某些第三方NAT發現服務。
NAT端口轉發以下列方式工作。 如果指定了端口轉發規則(PC1公共IP地址,端口2)-(PC1內部IP地址,端口1),則發送到(PC1公共IP地址,端口2)的所有數據包都將轉發到(PC1內部IP地址,端口1) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.