1

我正在做一些移动项目,需要与两个设备进行 P2P 通信。
我遇到了问题。(因为智能手机很少有公共IP)

我找到了一些答案。它是“UDP打孔”。

我想我在概念上 100% 了解“UDP 打孔”,并编写了一些代码。但它不起作用。

这是我的情况。

Device A connected NAT(A) for Wi-Fi.  
Device B connected NAT(B) for Wi-Fi.  
NAT(A) and NAT(B) is different one.  

Relay Server S bind socket and waiting for devices. (S is WebServer but Network Status is good.)  

At the first, A and B send dummy packet to S. Then S save UniqueID(to tell A and B), Public IP, Port.  

And S send information to each device A and B.   

Like this:  
 - IP Address and Port Number about A. -> send to B  
 - IP Address and Port Number about B. -> send to A  

Now A and B send UDP packet to other device based on information(IP Address and Port Number) from S.  
(15 per second. using same socket that used server-device session)  

但它不起作用。(实际上是断断续续的工作。可能10次一次?我不知道为什么成功和失败。没有任何微小的共同关系。)

我认为这不是 NAT 类型的问题。我测试了韩国,韩国 90% 的 NAT 不是 Symmetric Cone。

4

1 回答 1

1
  1. 根据 NAT 的实现,它可能根本不起作用。NAT 打洞需要一些特殊形式的 NAT 实现:公共 IP 地址),然后在一段有限的时间内将该端口上的传入 UDP 流量重定向回 NAT 后面的主机(更改端口号并更改接收器 IP)。这就是它的工作原理。b) 另一种可能性是,NAT 只将流量从特殊主机重定向到打开的端口到 NAT 后面的主机。那是它行不通的地方。c) 什么“刷新”传入流量规则的超时不是标准化的。超时可能会因传入流量而延长。

  2. 对于某些实现,UDP 状态似乎也很快过期(在某些情况下在 100 毫秒内)。这意味着,您要么需要继续向服务器“S”发送保持活动数据包,要么至少需要在小于 100 毫秒的时间内发送 UDP 数据包(例如每 50 毫秒或 20 毫秒一次)。

于 2013-02-01T08:47:10.280 回答