确切地说是穿透NAT,一般使用UDP协议,TCP协议也可以穿透,只是好像没有UDP成功率高。

如果是一般情况,使用STUN协议.
除了要通信的两个端点之外,还有一个有公网IP的一个服务器 STUN server。

一个端点穿过防火墙,发个消息给STUN server,STUN server收到这个包之后 就可以知道该端点通过防火墙映射后的公网地址。
同样道理,STUN sever可以得到另外一个端点的通过它的防火墙映射后的公网地址。

STUN server把得到的这两个地址发给两个端点。
端点得到对方端点的公网地址后,就可以给对方端点发消息。相互就可以通信。


通俗的说,一个端点发一个UDP消息出去之后,就把自己的墙打了一个洞;另外一个端点也把它的墙打了一个洞。然后双方都可以向对方的洞发数据,进行通信 。