UDP打洞流程及关键点

关键字:udp、打洞、流程、关键、失败、拒绝、原因
时间:2021年10月

一、流程
1、客户端A向服务器发送任意数据,服务器记录客户端A的公网IP和端口,暂不应答客户端A;
2、客户端B向服务器发送任意数据,服务器把之前记录的客户端A的公网IP和端口发送给客户端B,同时把客户端B的公网端口和IP发送给A;
3、客户端A对收到服务器发来的客户端B的外网IP和端口立即发送数据,客户端B对收到服务器发来的客户端A的外网IP和端口立即发送数据;
4、客户端A和客户端B正常收发对方数据。

二、关键点
1、家用宽带基本都是可以UDP打洞的(Symmetric NAT很少见),没有成功通常是代码问题;
2、客户端本地端口可以固定也可以随机,但必须保证发送数据到服务器和发送数据到另一客户端使用相同的端口;
3、尽量保证两个客户端对发第一条数据在同一时刻,否则出现连接拒绝(refused)的概率很大。
4、实际打洞时,会有一定概率连接拒绝的情况,重新打洞即可,最好不要固定本地端口。

提供以打洞成功的源码,仅供参考:https://gitee.com/gitee211012/udp_hole_punching.git