总结P2P程序中UDP穿透难点 |
发布: 2014-05-21 14:33 |
最难的一种NAT,这是从对称型NAT演变过来折和中NAT,叫做动态类型NAT。 使用traceroute/tcptraceroute确定动态NAT网络到目标主机的出口IP,为对方的NAT打洞提供目标IP信息。 有一种动态类型的NAT,这种NAT的网络出口IP是一个出口IP池中选出来的。 选择的方式可能是随机,也有可能按照目标IP做hash,从而固定选择。 即使是随机的,在一段时间内,很有可能也会使用相同的NAT出口IP, 从实现结果可以看到,这可能是为了保证NAT能够正常工作。 但是,有些NAT却不支持traceroute,一个中间路由都trace不到的情况, 这就非常难办了。 对于普通的对称型NAT,穿透方式已经有前人研究,而且成功率很高, 比较好的方式有multi hole punching方式,通过猜测下一个可能使用的NAT端口实现。 猜测端口,现在的NAT端口选择大概有两种常见方式,一种是累加模式, 每次使用的NAT端口在之前的端口基础上加n(n>=1,并且一般来说n<=9)。 另一种方式是完全随机选择未使用的端口,这种不太好猜测, 当然,如果用的是非动态NAT,只使用一个固定IP的情况下,可以考虑把可用端口全部占用, 那么剩下的端口还好猜测一些。 multi hole punching论文:。 猜测端口的另一篇文章:。 相比来说,其他几种NAT方式,则非常容易了,也有许多资料和实现代码供参考。 以上说的都是UDP协议穿透,TCP协议穿透也类似,但在实现上更复杂,如需了解查询资料。 当然,在无法实现P2P穿透的情况下,也就是使用中继这种方式了。 |
原文: http://qtchina.tk/?q=node/810 |
Powered by zexport
|