P2P原理
常用方法
中继
使用中继服务器连接两台内网设备,受限于中继节点性能。
逆向连接
当客户端A、B之一有公网地址时可以使用该方法。
UDP打洞
最常见的方法
利用锥形NAT(下文将介绍NAT分类)会将 内网ip+端口 绑定一个 外网ip+端口 的特性实现。理论上来说,利用该特性就可以实现任意主机间的通信,但往往NAT会做很多限制,导致这种直接通信无法完成。下面以限制最多的 Restricted-Port NAT
为例说明:
网络拓扑图
Client A和B仅具有内网地址,有Restricted-Port NAT功能的router A和B将他们的内网地址及端口和外网地址及端口进行绑定,Server S具有外网地址。
限制前提
Restricted-Port NAT 会直接丢弃其他主机 主动
发送过来的报文,只有它向另一台主机发送一个报文后,它才会接收该主机发送过来的一个报文。所以即使A和B映射了公网地址也不能直接通信。
打洞过程
- Client A和B分别向S发送一条报文,S会记录下A和B的出口地址及端口(即:1.1.1.1:7777和2.2.2.2:888