最近有朋友问我UDP打洞的过程和原理,正好前段时间玩过,我把流程写出来分享一下供还不了解的菜鸟一起交流哈!我也是新手;P
(前提是有些基本概念和原理要先熟悉一下,比如NAT工作原理等)
UDP打洞流程:
1、客户端A登录服务器,服务器将客户端A的私网和公网终结点记录下来。
2、客户端B登陆服务器,服务器将客户端A的私网和公网终结点记录下来。
3、服务器将A的公网终结点发给客户端B。
4、客户端B向客户端A发一个数据包(此数据包作用:在客户端B的NAT上建立一个session,该session为B分配一个端口,即打了一个往A方向的洞口,以后如果有数据包从公网到达此端口,NAT将会把此数据包直接转发给客户端B)。但此时客户端A收不到此数据包,因为A端的NAT拦截了这个未曾谋面的数据包。
5、客户端B向服务器报告:已经向A方向打洞,此时服务器将B的公网终结点发给A,并命令客户端A往B方向发一个数据包(作用同第4步)。
6、客户端A发送一个数据包到客户端B的公网终结点上。此时,客户端B已经接收到A发送过来的这个数据包,至此打洞成功,以后A和B可以直接互相发送信息了! |