Udp 用电击打打孔

Udp 用电击打打孔,udp,p2p,nat,stun,hole-punching,Udp,P2p,Nat,Stun,Hole Punching,我目前正在尝试通过internet发送UDP消息,并且必须为端点A和B(都在NAT后面)设置防火墙。要做到这一点,我想使用打孔使用一个眩晕服务器 当A向STUN服务器创建请求时(例如,private:85.1.1.12:6000和public:173.194.78.127:19302),我得到85.1.1.12:6000作为响应。如果我将数据包从同一源配置(用于STUN请求的同一源ip和端口)发送到任何其他目标地址(目标端口保持不变),那么我的NAT将再次更改公共端口(从6000更改为任何其他)

我目前正在尝试通过internet发送UDP消息,并且必须为端点A和B(都在NAT后面)设置防火墙。要做到这一点,我想使用打孔使用一个眩晕服务器

当A向STUN服务器创建请求时(例如,private:85.1.1.12:6000和public:173.194.78.127:19302),我得到85.1.1.12:6000作为响应。如果我将数据包从同一源配置(用于STUN请求的同一源ip和端口)发送到任何其他目标地址(目标端口保持不变),那么我的NAT将再次更改公共端口(从6000更改为任何其他)。我通过对两个不同的STUN服务器请求使用相同的地址端口配置发现了这一点(对两个请求都使用端口19302)

像这样,我不可能知道我的NAT在向B发送数据包时会转换哪个端口(B无法接收任何内容,因为它的防火墙没有设置)

这是因为我的NAT类型与打孔不兼容还是我的概念错了


谢谢

85.1.1.12:6000不是您的私人IP地址。这是NAT的公共/外部IP:端口。专用IP是您的PC/设备的接口地址

根据你的场景,我猜你有一个对称的NAT。在对称NAT中,每次您向不同的目的地发送数据包时,NAT的公共端口都会发生变化。如果您的目的地保持不变,那么NAT的公共IP:端口也保持不变

对于其他类型的NAT,如果您的私有IP没有改变,那么无论您将数据包发送到哪里,您的NAT公共IP:port(在您的示例中为85.1.1.12:6000)将保持不变


如果一侧具有**对称NAT,而另一侧具有对称/PRC NAT,则无法打孔

**对称NAT是指提供随机端口分配的对称NAT

如果双方都有对称的NAT,则打孔在技术上并非不可能(尽管遍历过程可能太不可靠,不值得这么麻烦)。请阅读我的论文:

或其引用的其中一篇论文:


  • 非常感谢,我想我现在明白了。我在一个不同的网络中尝试了它(显然没有对称的NAT),它工作完美,表现如预期。谢谢“如果一侧具有**对称NAT,而另一侧具有对称/PRC NAT,则不可能进行打孔。”这在技术上是不正确的。请看我的答案。我已经实施了一个与你非常相似的程序。但当我说不可能时,我的意思是我们只能猜测端口,没有保证有P2P。成功率很大程度上取决于其他因素。但是对于其他NAT组合,P2P是可以保证的。你的程序的成功率是多少?你在2/3/4G网络上测试过吗?