Skip to content

基于UDP穿越非对称NAT建立P2P网络的Windows实现(UDP打洞)

Notifications You must be signed in to change notification settings

Jianxiong2333/UDP-Hole-Punching

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

UDP-Hole-Punching

基于UDP穿越非对称NAT建立P2P网络的Windows实现(UDP打洞)

原理

AB设备在连接的时候访问一次服务器,服务器协助他们获取对方端口。 辅助完成后服务器断线,剩下的通讯由两个设备进行。

注意

NAT类型

并不是所有网络环境都可以打洞,完全圆锥形NAT(Full Cone NAT)可以实现全程P2P连接,其中一方为对称锥形NAT(symmetric NAT)不能通过此方法直接打洞,但是可以尝试通过猜测上下文端口来进行连接。若双方设备都在对称锥形NATT(symmetric NAT)之后,则无法打洞。

防火墙

若在交换机处部署了防火墙或系统内开启了域防火墙等过滤端口的情况,有可能穿越失败。建议关闭~

保持连接

需要防止NAT设备所分配的临时端口被回收,可以通过维持一个心跳包来保证连接。

运行机制

A设备连接S服务器,B设备连接S服务器。S服务器同时记录A、B临时端口和IP。然后S告诉A,B目前的临时端口,S告诉B,A目前的临时端口。此时A、B均拿到对方此时的临时IP和临时端口,就可以断开服务器连接,由他们自己之间完成剩下通信,然后服务器接着协调下一次的两台设备连接。但有点要注意的是这个临时端口长时间不使用会被NAT设备回收,所以A、B他们之间还需要通过心跳包维持通信状态。

感谢 吴米/阿毛/ian 提供的帮助

About

基于UDP穿越非对称NAT建立P2P网络的Windows实现(UDP打洞)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages