NAT的缺陷之一就是只能由内网主机发起连接,外网主机无法主动连接到内网。 这就意味着外部节点无法和内网主机进行P2P通信
STUN——UDP打洞
全称为Simple Tranversal of UDP through NAT
假设两个不同网络中的设备A和B想穿透NAT进行点对点通信,其中STUN SERVER是部署在公网中的STUN服务器。
- A通过NAT网关向SERVER发送STUN请求消息(UDP),查询并注册自己经过NAT映射后的公网地址
- SERVER响应,并将A经过转换后的公网IP地址和端口填在响应报文中
- B通过NAT网关向STUN SERVER发送STUN请求消息(UDP),查询并注册自己经过NAT映射后的公网地址
- SERVER响应,并将B经过转换后的公网IP地址和端口填在响应报文中
- 此时A已经知道了自己映射后对应的公网IP地址和端口号,它把这些信息打包在请求中发送给SERVER,请求和B进行通信
- SERVER查询到B注册的公网地址和端口,然后将请求通过NAT网关转发给B
- B从消息中知道A的公网地址和端口,于是通过此地址和端口,向A发送消息,消息中包含B映射后的公网地址和端口号,A收到消息后就知道了B的公网地址及端口,这样在A和B之间建立起了通信通道。