UDP 构建p2p打洞过程的实现原理(持续更新)

双方都在局域网内就没有办法TCP直连了,所以像QQ等都会尽量使用UDP直连的

IP地址转换不需要你处理,网关默认就已经进行了转换。服务器接收到DatagramPacket中getAddress和getPort已经是网关的端口


UDP打洞的过程大致如此:
1、双方都通过UDP与服务器通讯后,网关默认就是做了一个外网IP和端口号 与你内网IP与端口号的映射,这个无需设置的,服务器也不需要知道客户的真正内网IP
2、用户A先通过服务器知道用户B的外网地址与端口 
3、用户A向用户B的外网地址与端口发送消息, 
4、在这一次发送中,用户B的网关会拒收这条消息,因为它的映射中并没有这条规则。 
5、但是用户A的网关就会增加了一条允许规则,允许接收从B发送过来的消息 
6、服务器要求用户B发送一个消息到用户A的外网IP与端口号 
7、用户B发送一条消息,这时用户A就可以接收到B的消息,而且网关B也增加了允许规则 
8、之后,由于网关A与网关B都增加了允许规则,所以A与B都可以向对方的外网IP和端口号发送消息

对于这个过程的了解,可以看以下博客

http://blog.csdn.net/jdh99/article/details/6667648

------------------------------------------------------------------------------------------

通过UDP路由验证实现NAT穿越是一种在处于使用了NAT的私有网络中的Internet主机之间建立双向UDP连接的方法。由于NAT的行为是非标准化的,因此它并不能应用于所有类型的NAT。

其基本思想是这样的:让位于NAT后的两台主机都与处于公共地址空间的、众所周知的第三台服务器相连,然后,一旦NAT设备建立好UDP状态信息就转为直接通信,并寄希望于NAT设备会在分组其实是从另外一个主机传送过来的情况下仍然保持当前状态。

这项技术需要一个圆锥型NAT设备才能够正常工作。对称型NAT不能使用这项技术。

这项技术在P2P软件和VoIP电话领域被广泛采用。它是Skype用以绕过防火墙和NAT设备的技术之一。

相同的技术有时还被用于TCP连接——尽管远没有UDP成功。


你可能感兴趣的:(UDP 构建p2p打洞过程的实现原理(持续更新))