p2p实践

p2p实践
近一周时间都在玩p2p,本来以为实现很简单,但做起来实属不易 。 
Udp穿透Nat会遇到多种Nat类型: 
1.FULL CORE 
2. RESTRICT
3. PORT-RESTRICT
4. SYMMETRIC 
1-3三种NAT实现穿透很简单,问题在于处理第4种类型:对等NAT 
SYMMETRIC NAT的工作模式区分在于内网通过NAT时分配的外部端口的方式不同,这又有三种情况: 
1. 端口递增: 通常新端口号会是前一次分配端口号加1或者加固定值 
2. 端口在当前NAT最新端口的左右区间: 例如当前NAT外网端口P,那新的分配端口会落在 -N < P < N
3. 随机分配SR (这个根据当时NAT的网络情况参数等作为函数f(x)的因子决定)
这第三种分配方式,目前无解,只要任意一端存在SR,则无法穿透  
当然很多技术研究者提出了如何猜测动态端口的方案,例如:统计技术的使用,服务器可对固定NAT进行采样分析等等。。
这个很难哦!
面对SR我直接放弃了,还真不巧,测试了3,4个网络环境的NAT,居然50%是SR,50%是SYMMETRIC的1,2种类型 。 
还是老实的服务器中转把!
一些p2p资料供参考:   http://114.215.178.29/static/p2p

你可能感兴趣的:(p2p实践)