首页 文章

每个NAT下的P2P网络

提问于
浏览
1

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

我找到了一些答案 . 它是'UDP Hole Punching' .

我想我从概念上理解'UDP Hole Punching'100%并编写一些代码 . 但它不起作用 .

这是我的情况 .

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 Type问题 . 我测试了韩国和韩国的90%NAT不是Symmetric Cone .

1 回答

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

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

相关问题