项目需要实现P2P视频对话,如果数据流全走中继服务器,则对带宽要求太高,所以尝试实验使用udp打洞技术。
udp打洞的原理,这篇文章讲的很好:
总的实现流程如下:
首先得有一个拥有公网IP的服务器,我用的是阿里云的服务器。
两边客户端需要先向服务器发送UDP报文,服务器通过udp报文可以得知两边服务器的公网IP和端口,即NAT转换后的IP和端口。然后其中一个客户端发起连接请求,请求中应该包含它要连接的对方客户端的信息,服务器根据这个信息,把两个客户端的网络信息进行交换,客户端收到对方客户端的信息后,尝试向对方的IP和端口发送UDP即可。
总的来说流程很简单,只要懂了原理就很容易实现。但是网络不一定能打通。
首先得先明白自己的NAT类型
我使用的HMBSbige/NatTypeTester进行的NAT测试
GITHUB下载地址https://github.com/HMBSbige/NatTypeTester/releases/download/3.4/NatTypeTester.exe
如果是对称型NAT,有可能会打洞失败。
具体可以看这篇文章:
NAT的四种类型以及类型探测_nat类型检测-CSDN博客
此外,即使是锥形NAT,也可能失败,我自己测试的时候,因为在校园网内,校园网的NAT是对称型的,所以尝试用手机热点,虽然手机热点的NAT测试为全锥型,但是依然打不通。后面换了一个网络才成功。