一种基于KCP协议的NAT穿透方法与流程

文档序号:16589211发布日期:2019-01-14 18:57阅读:1417来源:国知局
一种基于KCP协议的NAT穿透方法与流程

本发明涉及nat类型探测技术、udp穿透领域,尤其涉及一种基于kcp协议的nat穿透方法。



背景技术:

nat英文全称是“networkaddresstranslation”,中文意思是“网络地址转换”,它是一个ietf(internetengineeringtaskforce,internet工程任务组)标准,允许一个整体机构以一个公用ip(internetprotocol)地址出现在internet上。顾名思义,它是一种把内部私有网络地址(ip地址)翻译成合法网络ip地址的技术。nat可以让那些使用私有地址的内部网络连接到internet或其它ip网络上。

传统的穿透方法有基于tcp穿透和基于udp穿透的方法,这两者都有一定程度上的缺陷;其中,基于tcp的穿透方法有tcp协议基于连接的模式导致成功率不高的问题,而基于udp协议的穿透方法虽然成功率高,但是存在udp协议不可靠的问题。

kcp是一个快速可靠协议,它主要的设计目的是为了解决在网络拥堵的情况下tcp协议网络速度慢的问题,增大网络传输速率,但相当于tcp而言,会相应的牺牲一部分带宽。kcp没有规定下层传输协议,一般用udp作为下层传输协议。

在使用udp协议进行nat穿透成功的前提下,使用kcp协议进行连接的方案相比于tcp穿透方案的成功率要高上不少,相比于udp穿透方案可靠性也得到一定的保障。



技术实现要素:

针对tcp进行nat穿透难度大和udp穿透可靠性不高的技术问题,本发明提供一种基于kcp协议的nat穿透方法,能够保障更高的nat穿透成功率和不错的可靠性,具体技术方案如下:

一种基于kcp协议的nat穿透方法,其特征在于,该方法中需要得到nat穿透协助的客户端为c1,c1想要连接的客户端为c2,该方法具体包括如下步骤:

s1:c1向服务端发起nat穿透c2的请求;

s2:服务端根据客户端c1的情况作出如下回复:

(1)如果c2不存在,则服务端向c1回复c2不存在的消息,c1结束本次nat穿透;

(2)如果c2存在,且c1是公网节点,服务端则通知c2去反连c1,c1持续一段时间等待对方的连接,如果连接成功,此次穿透成功;否则,穿透失败;

(3)如果c2存在,且c1不是公网节点,且c2不是对称型nat,则服务端通知c1进行nat穿透,连接c2,c1首先判断c2是否存在upnp端口,如果存在,则c1先使用c2的upnp端口进行tcp连接,如果连接成功,则此次穿透成功,否则,c1使用udp协议进行nat穿透,如果穿透失败,则此次穿透失败;如果穿透成功,则使用kcp协议进行连接,如果连接成功,则此次穿透成功,否则穿透失败;

(4)如果c2存在且是对称型nat,但c1不是公网节点也不是对称型nat,则服务端通知c1进行nat穿透,c1使用udp协议进行nat穿透,然后持续一段时间等待c2的连接,如果连接成功,那么此次nat穿透成功,否则失败;

(5)如果都不是上面的情况,则服务端通知c1和c2进行中继服务。

进一步地,所述的客户端c1在启动时通过stun协议探测自己的nat类型,并向服务端注册自己的nat类型,所述的服务端根据这些nat信息进行策略选择;所述的nat类型包括对称型、端口限制型、地址限制型和全锥型。

进一步地,所述的客户端c1启动时,向自己的网关设备绑定upnp端口。

进一步地,如果存在客户端c2不存在或者没有注册的情况,则由服务端连接上该客户端c2并通知它进行注册。

进一步地,所述的步骤(5)中,如果c2存在upnp端口,那么c1需要尝试使用该upnp端口去连接c2,如果连接成功,那么此次nat穿透成功,否则还需c1判断自己有没有upnp端口,如果没有,那么此次nat穿透失败,否则,c1需要等待c2的连接,如果连接成功,那么此次nat穿透成功,否则失败。

本发明的有益效果如下:

本发明基于kcp协议的nat穿透方法相比于基于tcp的穿透方法,成功率得到一定程度的提高;而相比于基于udp的穿透方法,可靠性又得到了一定程度的保障。

附图说明

图1为本发明的基于kcp协议的nat穿透方法的流程图。

具体实施方式

下面根据附图和具体实施例详细描述本发明,本发明的目的和效果将变得更加明显。

如图1所示,本发明的基于kcp协议的nat穿透方法,该方法中需要得到nat穿透协助的客户端为c1,c1想要连接的客户端为c2,该方法具体包括如下步骤:

s1:c1向服务端发起nat穿透c2的请求;

s2:服务端根据客户端c1的情况作出如下回复:

(1)如果c2不存在,则服务端向c1回复c2不存在的消息,c1结束本次nat穿透;

(2)如果c2存在,且c1是公网节点,服务端则通知c2去反连c1,c1持续一段时间等待对方的连接,如果连接成功,此次穿透成功;否则,穿透失败;

(3)如果c2存在,且c1不是公网节点,且c2不是对称型nat,则服务端通知c1进行nat穿透,连接c2,c1首先判断c2是否存在upnp端口,如果存在,则c1先使用c2的upnp端口进行tcp连接,如果连接成功,则此次穿透成功,否则,c1使用udp协议进行nat穿透,如果穿透失败,则此次穿透失败;如果穿透成功,则使用kcp协议进行连接,如果连接成功,则此次穿透成功,否则穿透失败;

(4)如果c2存在且是对称型nat,但c1不是公网节点也不是对称型nat,则服务端通知c1进行nat穿透,c1使用udp协议进行nat穿透,然后持续一段时间等待c2的连接,如果连接成功,那么此次nat穿透成功,否则失败;

(5)如果都不是上面的情况,则服务端通知c1和c2进行中继服务。

优选地,所述的客户端c1在启动时通过stun协议探测自己的nat类型,并向服务端注册自己的nat类型,所述的服务端根据这些nat信息进行策略选择;所述的nat类型包括对称型、端口限制型、地址限制型和全锥型。

优选地,所述的客户端c1启动时,向自己的网关设备绑定upnp端口。

优选地,如果存在客户端c2不存在或者没有注册的情况,则由服务端连接上该客户端c2并通知它进行注册。

优选地,所述的步骤(5)中,如果c2存在upnp端口,那么c1需要尝试使用该upnp端口去连接c2,如果连接成功,那么此次nat穿透成功,否则还需c1判断自己有没有upnp端口,如果没有,那么此次nat穿透失败,否则,c1需要等待c2的连接,如果连接成功,那么此次nat穿透成功,否则失败。



技术特征:

技术总结
本发明公开了一种基于KCP协议的NAT穿透方法,首先P2P网络中的节点需要向一个位于公网的辅助NAT穿透的服务节点进行NAT信息注册,然后当节点需要连接另一个使用TCP协议无法连接的节点时,先把NAT穿透请求发给服务节点,服务节点根据两个节点的NAT信息给双方返回对方的网络地址和NAT穿透策略。双方节点根据收到的信息执行NAT穿透逻辑,即先用UDP协议进行NAT穿透,如果穿透成功则使用KCP协议进行连接,否则,此次NAT穿透失败。本发明解决了使用TCP进行NAT穿透难度大的问题,使用UDP进行NAT穿透提高成功率,同时使用KCP协议作为传输层协议从一定程度上解决了UDP协议传输不可靠的问题。

技术研发人员:汪小益;徐才巢;李启雷;李伟;邱炜伟;梁秀波;尹可挺
受保护的技术使用者:杭州趣链科技有限公司
技术研发日:2018.09.12
技术公布日:2019.01.11
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1