CN109194778B - 一种基于kcp协议的nat穿透方法 - Google Patents
一种基于kcp协议的nat穿透方法 Download PDFInfo
- Publication number
- CN109194778B CN109194778B CN201811059853.7A CN201811059853A CN109194778B CN 109194778 B CN109194778 B CN 109194778B CN 201811059853 A CN201811059853 A CN 201811059853A CN 109194778 B CN109194778 B CN 109194778B
- Authority
- CN
- China
- Prior art keywords
- nat
- successful
- penetration
- protocol
- connection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
- H04L61/256—NAT traversal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/164—Adaptation or special uses of UDP protocol
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/326—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the transport layer [OSI layer 4]
Abstract
本发明公开了一种基于KCP协议的NAT穿透方法,首先P2P网络中的节点需要向一个位于公网的辅助NAT穿透的服务节点进行NAT信息注册,然后当节点需要连接另一个使用TCP协议无法连接的节点时,先把NAT穿透请求发给服务节点,服务节点根据两个节点的NAT信息给双方返回对方的网络地址和NAT穿透策略。双方节点根据收到的信息执行NAT穿透逻辑,即先用UDP协议进行NAT穿透,如果穿透成功则使用KCP协议进行连接,否则,此次NAT穿透失败。本发明解决了使用TCP进行NAT穿透难度大的问题,使用UDP进行NAT穿透提高成功率,同时使用KCP协议作为传输层协议从一定程度上解决了UDP协议传输不可靠的问题。
Description
技术领域
本发明涉及NAT类型探测技术、UDP穿透领域,尤其涉及一种基于KCP协议的NAT穿透方法。
背景技术
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force,Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在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穿透成功,否则失败。
Claims (5)
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进行中继服务。
2.根据权利要求1所述的基于KCP协议的NAT穿透方法,其特征在于,所述的客户端C1在启动时通过STUN协议探测自己的NAT类型,并向服务端注册自己的NAT类型,所述的服务端根据这些NAT信息进行策略选择;所述的NAT类型包括对称型、端口限制型、地址限制型和全锥型。
3.根据权利要求1所述的基于KCP协议的NAT穿透方法,其特征在于,所述的客户端C1启动时,向自己的网关设备绑定UPNP端口。
4.根据权利要求1所述的基于KCP协议的NAT穿透方法,其特征在于,如果存在客户端C2不存在或者没有注册的情况,则由服务端连接上该客户端C2并通知它进行注册。
5.根据权利要求1所述的基于KCP协议的NAT穿透方法,其特征在于,所述的步骤S2的情况(3)中,如果C2存在UPNP端口,那么C1需要尝试使用该UPNP端口去连接C2,如果连接成功,那么此次NAT穿透成功,否则还需C1判断自己有没有UPNP端口,如果没有,那么此次NAT穿透失败,否则,C1需要等待C2的连接,如果连接成功,那么此次NAT穿透成功,否则失败。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811059853.7A CN109194778B (zh) | 2018-09-12 | 2018-09-12 | 一种基于kcp协议的nat穿透方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811059853.7A CN109194778B (zh) | 2018-09-12 | 2018-09-12 | 一种基于kcp协议的nat穿透方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109194778A CN109194778A (zh) | 2019-01-11 |
CN109194778B true CN109194778B (zh) | 2021-11-05 |
Family
ID=64910308
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811059853.7A Active CN109194778B (zh) | 2018-09-12 | 2018-09-12 | 一种基于kcp协议的nat穿透方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109194778B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112019641B (zh) * | 2020-10-19 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 数据传输方法和装置 |
CN112769799B (zh) * | 2020-12-30 | 2023-04-07 | 北京安博通科技股份有限公司 | 一种集控设备及其内网穿透方法、存储介质 |
CN112954406B (zh) * | 2021-05-17 | 2021-07-30 | 腾讯科技(深圳)有限公司 | 数据下载方法、装置、计算机设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101431511A (zh) * | 2007-11-09 | 2009-05-13 | 友讯科技股份有限公司 | 一种穿透防火墙在网络终端装置间建立联机信道的方法 |
CN101977249A (zh) * | 2010-10-27 | 2011-02-16 | 北京易视腾科技有限公司 | 穿透nat设备的方法 |
CN102340520A (zh) * | 2010-07-20 | 2012-02-01 | 上海未来宽带技术及应用工程研究中心有限公司 | 一种p2p网络应用系统中私网检测与穿越的复合方法 |
CN106210092A (zh) * | 2016-07-19 | 2016-12-07 | 天彩电子(深圳)有限公司 | 一种融合upnp及stun的p2p穿越方法及其系统 |
-
2018
- 2018-09-12 CN CN201811059853.7A patent/CN109194778B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101431511A (zh) * | 2007-11-09 | 2009-05-13 | 友讯科技股份有限公司 | 一种穿透防火墙在网络终端装置间建立联机信道的方法 |
CN102340520A (zh) * | 2010-07-20 | 2012-02-01 | 上海未来宽带技术及应用工程研究中心有限公司 | 一种p2p网络应用系统中私网检测与穿越的复合方法 |
CN101977249A (zh) * | 2010-10-27 | 2011-02-16 | 北京易视腾科技有限公司 | 穿透nat设备的方法 |
CN106210092A (zh) * | 2016-07-19 | 2016-12-07 | 天彩电子(深圳)有限公司 | 一种融合upnp及stun的p2p穿越方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109194778A (zh) | 2019-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Guha et al. | NAT Behavioral requirements for TCP | |
US7227864B2 (en) | Methods and systems for establishing communications through firewalls and network address translators | |
US8572172B2 (en) | NAT traversal for media conferencing | |
US8611354B2 (en) | Method and apparatus for relaying packets | |
US7483437B1 (en) | Method of communicating packet multimedia to restricted endpoints | |
JP4349766B2 (ja) | アドレス変換装置 | |
US8923310B2 (en) | Protocol and system for firewall and NAT traversal for TCP connections | |
US8560607B2 (en) | Method based on the combination of the UPnP and STUN for NAT traversal | |
CN109194778B (zh) | 一种基于kcp协议的nat穿透方法 | |
WO2006089481A1 (fr) | Méthode de contrôle de communication de pénétration directe dont deux parties sont dans différents nat et dispositif correspondant | |
US10375175B2 (en) | Method and apparatus for terminal application accessing NAS | |
Phuoc et al. | NAT traversal techniques in peer-to-peer networks | |
WO2011044810A1 (zh) | 实现多方通信的方法、装置及系统 | |
JP3928664B2 (ja) | アドレス変換装置、メッセージ処理方法および装置 | |
Seemann et al. | Decentralized Hole Punching | |
EP1916816A1 (en) | Method and devices to establish a public communication session | |
Ata et al. | Architectural design of unified multiplex communications for one-time use of IP addresses | |
Duarte Jr et al. | Transparent communications for applications behind NAT/firewall over any transport protocol | |
JP4350029B2 (ja) | アドレス変換システム | |
Lin et al. | TT-STUN protocol design for effective TCP NAT traversal | |
JP3928663B2 (ja) | アドレス変換装置、メッセージ処理方法および装置 | |
JP4350030B2 (ja) | アドレス変換方法 | |
JP3928662B2 (ja) | アドレス変換装置、メッセージ処理方法および装置 | |
Topal et al. | Enabling peer-to-peer communication for hosts in private address realms using IPv4 LSRR option and IPv4+ 4 addresses | |
Zhang | Design and realization of TCP-based NAT TRAVERSAL in P2P |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |