双方都在局域网内就没有办法TCP直连了,因此像QQ等都会尽可能使用UDP直连的 IP地址转换不须要你处理,网关默认就已经进行了转换。服务器接收到DatagramPacket中getAddress和getPort已是网关的端口 UDP打洞的过程大体如此: 一、双方都经过UDP与服务器通信后,网关默认就是作了一个外网IP和端口号 与你内网IP与端口号的映射,这个无需设置的,服务器也不须要知道客户的真正内网IP 二、用户A先经过服务器知道用户B的外网地址与端口 三、用户A向用户B的外网地址与端口发送消息, 四、在这一次发送中,用户B的网关会拒收这条消息,由于它的映射中并无这条规则。 五、可是用户A的网关就会增长了一条容许规则,容许接收从B发送过来的消息 六、服务器要求用户B发送一个消息到用户A的外网IP与端口号 七、用户B发送一条消息,这时用户A就能够接收到B的消息,并且网关B也增长了容许规则 八、以后,因为网关A与网关B都增长了容许规则,因此A与B均可以向对方的外网IP和端口号发送消息
对于这个过程的了解,能够看如下博客java
http://blog.csdn.net/jdh99/article/details/6667648服务器
------------------------------------------------------------------------------------------网络
经过UDP路由验证明现NAT穿越是一种在处于使用了NAT的私有网络中的Internet主机之间创建双向UDP链接的方法。因为NAT的行为是非标准化的,所以它并不能应用于全部类型的NAT。spa
其基本思想是这样的:让位于NAT后的两台主机都与处于公共地址空间的、众所周知的第三台服务器相连,而后,一旦NAT设备创建好UDP状态信息就转为直接通讯,并寄但愿于NAT设备会在分组实际上是从另一个主机传送过来的状况下仍然保持当前状态。.net
这项技术须要一个圆锥型NAT设备才可以正常工做。对称型NAT不能使用这项技术。code
这项技术在P2P软件和VoIP电话领域被普遍采用。它是Skype用以绕过防火墙和NAT设备的技术之一。orm
相同的技术有时还被用于TCP链接——尽管远没有UDP成功。blog