繁体   English   中英

每个NAT下的P2P网络

[英]P2P Networking under the each NAT

我正在做一些移动项目,需要与两个设备进行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不是对称锥。

  1. 根据NAT的实现,它可能根本不起作用。 NAT打孔需要某些特殊的NAT实现形式:a)如果NAT可以识别UDP流量,则可以(但有时不能)通过将发送方端口号更改为某个随机端口号(并将发送方IP更改为NAT)进行NAT转换。公用IP地址),然后在有限的一段时间内重定向该端口上的传入UDP流量回到NAT后面的主机(更改端口号并更改接收者IP)。 那就是它的工作原理。 b)另一种可能性是,NAT仅将流量从特殊主机重定向到该打开的端口,再到NAT后面的主机。 那是行不通的地方。 c)“刷新”传入流量规则的超时还没有标准化。 传入流量可能会延长超时时间。 但是可能需要将流量发送到同一主机(服务器S)以延长超时时间。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM