一、P2P时,为何需要打洞? 两个局域网内的客户端没法直接连接,通过打洞可以实现两个局域网内的客户端间通信。 二、基础知识介绍 1、两个内网的客户端没法直接建立通信,需要公网上的服务器来协助 2、内网客户端和公网服务器通信时,会经过路由器,再到达公网服务器 3、公网服务器和内网客户端通信时,也会经过路由器,再达到内网客户端 4、路由器具有NAT功能,即网络地址转换功能,实现内网地址、端口和公网地址、端口的转换 5、打洞的过程就是为了获得内网地址、端口对应的公网地址、端口 6、两个客户端间的P2P通信就通过路由器上的公网地址、端口通信 三、NAT的方式介绍 四、P2P打洞过程 1、A客户端新建一个Udp端口,向公网地址、端口上发Udp包,这样就知道了A对应内网地址、端口对应的公网地址和端口 2、B客户端新建一个Udp端口,向公网地址、端口上发Udp包,这样就知道了B对应内网地址、端口对应的公网地址和端口 3、公网服务器把A客户端的公网地址、端口告诉B,把B客户端的公网地址、端口告诉A 4、A客户端向B客户端的公网地址、端口发送一个Udp包,这样A的NAT设备就允许B发送数据给A(否则B发给A的数据会被NAT设备拒绝) 5、B客户端向A客户端的公网地址、端口发送一个Udp包,这样A的NAT设备就允许A发送数据给A(否则A发给B的数据会被NAT设备拒绝) 6、A客户端和B客户端可以正常通信了 五、打洞原理图 六、P2P通信原理图