CN105049300B - 一种检测nat网络类型的方法及装置 - Google Patents
一种检测nat网络类型的方法及装置 Download PDFInfo
- Publication number
- CN105049300B CN105049300B CN201510544247.4A CN201510544247A CN105049300B CN 105049300 B CN105049300 B CN 105049300B CN 201510544247 A CN201510544247 A CN 201510544247A CN 105049300 B CN105049300 B CN 105049300B
- Authority
- CN
- China
- Prior art keywords
- port
- ping
- itself
- node
- types
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
- H04L43/0805—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters by checking availability
- H04L43/0811—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters by checking availability by checking connectivity
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Environmental & Geological Engineering (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明实施例提供了一种检测NAT网络类型的方法及装置,该方法中,P2P网络中的任意一节点通过自身第一端口向其他节点的相应第二端口发送第一PING请求消息,通过自身第二端口监听其他节点通过相应第一端口发送的第二PING请求消息,并通过自身第二端口和第一端口监听接收到第一PING请求消息的其他节点通过相应第一端口和第二端口发送的PING应答消息,进而基于所监听到的第二PING请求消息或PING应答消息,确定自身的NAT网络类型。应用本发明实施例,避免NAT网络类型检测对于STUN服务器的依赖,从而降低P2P网络的运行成本和网络架构复杂度。
Description
技术领域
本发明涉及NAT检测领域,特别涉及一种检测NAT网络类型的方法及装置。
背景技术
在对等计算P2P网络中由于网络地址转换NAT设备的存在,P2P节点一般需要先检测NAT网络类型。
现有技术中,国际互联网工程任务组IETF推荐使用RFC3489中描述的STUN(SimpleTraversal of UDP over NATs,NAT的UDP简单穿越)协议来进行网络类型检测,在RFC3489文档中描述了一种基于C/S结构的NAT检测方法。这种方法能比较精确地检测得到网络类型,但需要为P2P网络提供额外的STUN服务器,这样使得P2P网络的运行成本较高和网络架构较为复杂。
发明内容
本发明实施例的目的在于提供一种检测NAT网络类型的方法及装置,以避免NAT网络类型检测对于STUN服务器的依赖,从而降低P2P网络的运行成本和网络架构复杂度。具体技术方案如下:
第一方面,本发明实施例提供了一种检测NAT网络类型的方法,应用于第一节点,其中,所述第一节点为对等计算P2P网络中的任意一节点,所述方法包括:
在预定网络类型检测时刻,通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息,通过自身第二端口监听其他节点通过相应第一端口发送的第二PING请求消息,并通过自身第二端口和自身第一端口监听接收到第一PING请求消息的其他节点通过相应第一端口和第二端口发送的PING应答消息,其中,所述第一PING请求消息和第二PING请求消息均至少携带有作为目的者的节点的网络地址和作为目的端口的第二端口,任意一PING应答消息均至少携带有发送该PING应答消息的节点的网络地址转换NAT网络类型、该PING应答消息的发送端口、以及发送相应PING请求消息的节点的网络地址和作为目的端口的第一端口或第二端口;
当预设检测时间段内通过自身第二端口监听到其他节点发送的第二PING请求消息时,判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该第二PING请求消息,如果否,基于所监听到的该第二PING请求消息所携带的网络地址,确定自身的NAT网络类型,并且,分别通过自身第一端口和自身第二端口向相应其他节点反馈PING应答消息;
当预设PING请求响应时间段内通过第一端口和/或第二端口监听到接收第一PING请求消息的其他节点反馈的PING应答消息时,更新发送该PING应答消息的相应其他节点的NAT网络类型,并判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该PING应答消息,否则,继续判断当前是否接收到至少两个PING应答消息,并在是的情况下,基于所接收到的至少两个PING应答消息所携带的发送端口和网络地址,确定自身的NAT网络类型。
可选的,本发明实施例所提供的一种检测NAT网络类型的方法还包括:
通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息之后,当预设PING请求响应时间段内未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息时,重新通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息;
在重发发送的次数达到预定次数阈值后,如果未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息,且自身的NAT网络类型未被确定出,则确定自身的NAT网络类型为BLOCKED类型。
可选的,所述基于所监听到的该第二PING请求消息所携带的网络地址,确定自身的NAT网络类型,包括:
判断所监听到的第二PING请求消息所携带的网络地址是否与自身的网络地址相同,如果是,确定自身的NAT网络类型为PUBLIC类型,否则,确定自身的NAT网络类型为FULLCONE类型。
可选的,所述基于所接收到的至少两个PING应答消息所携带的发送端口和网络地址,确定自身的NAT网络类型,包括:
从所述至少两个PING应答消息中筛选出两个PING应答消息;
判断所筛选出的两个PING应答消息所携带的网络地址和发送端口是否均相同,如果否,确定自身的NAT网络类型为SYMMETRIC类型,如果是,则继续判断所述至少两个PING应答消息中是否存在除所筛选出的两个PING应答消息以外的发送端口为第一端口的PING应答消息,如果存在,则确定自身的NAT网络类型为RESTRICTED类型,如果不存在,则确定自身的NAT网络类型为PORTRESTRICTED类型。
第二方面,本发明实施例还提供了一种检测NAT网络类型的装置,应用于第一节点,其中,所述第一节点为对等计算P2P网络中的任意一节点,所述装置包括:
消息泛洪模块,用于在预定网络类型检测时刻,通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息,通过自身第二端口监听其他节点通过相应第一端口发送的第二PING请求消息,并通过自身第二端口和自身第一端口监听接收到第一PING请求消息的其他节点通过相应第一端口和第二端口发送的PING应答消息,其中,所述第一PING请求消息和第二PING请求消息均至少携带有作为目的者的节点的网络地址和作为目的端口的第二端口,任意一PING应答消息均至少携带有发送该PING应答消息的节点的NAT网络类型、该PING应答消息的发送端口、以及发送相应PING请求消息的节点的网络地址和作为目的端口的第一端口或第二端口;
PING请求消息分析模块,当预设检测时间段内通过自身第二端口监听到其他节点发送的第二PING请求消息时,判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该第二PING请求消息,如果否,基于所监听到的该第二PING请求消息所携带的网络地址,确定自身的NAT网络类型,并且,分别通过自身第一端口和自身第二端口向相应其他节点反馈PING应答消息;
PING应答消息分析模块,当预设PING请求响应时间段内通过第一端口和/或第二端口监听到接收第一PING请求消息的其他节点反馈的PING应答消息时,更新发送该PING应答消息的相应其他节点的NAT网络类型,并判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该PING应答消息,否则,继续判断当前是否接收到至少两个PING应答消息,并在是的情况下,基于所接收到的至少两个PING应答消息所携带的发送端口和网络地址,确定自身的NAT网络类型。
可选的,本发明实施例所提供的一种检测NAT网络类型的装置还包括:
PING请求消息重发模块,通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息之后,当预设PING请求响应时间段内未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息时,重新通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息;
在重发发送的次数达到预定次数阈值后,如果未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息,且自身的NAT网络类型未被确定出,则确定自身的NAT网络类型为BLOCKED类型。
可选的,所述PING请求消息分析模块具体用于:
判断所监听到的第二PING请求消息所携带的网络地址是否与自身的网络地址相同,如果是,确定自身的NAT网络类型为PUBLIC类型,否则,确定自身的NAT网络类型为FULLCONE类型。
可选的,所述PING应答消息分析模块具体用于:
从所述至少两个PING应答消息中筛选出两个PING应答消息;
判断所筛选出的两个PING应答消息所携带的网络地址和发送端口是否均相同,如果否,确定自身的NAT网络类型为SYMMETRIC类型,如果是,则继续判断所述至少两个PING应答消息中是否存在除所筛选出的两个PING应答消息以外的发送端口为第一端口的PING应答消息,如果存在,则确定自身的NAT网络类型为RESTRICTED类型,如果不存在,则确定自身的NAT网络类型为PORTRESTRICTED类型。
可见,本发明实施例中,在NAT网络类型检测过程中,依赖P2P各节点之间的泛洪消息来确定P2P各节点的NAT网络类型,无需依赖STUN服务器,降低了网络架构的复杂度和网络架构复杂度,另外,由于通过简单的请求/应答消息检测得到所有节点的网络类型,使得节点的检测过程简单以及P2P网络的资源利用率得到提高。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种检测NAT网络类型的方法的流程示意图;
图2为本发明实施例提供的一种检测NAT网络类型的装置的结构示意图。
具体实施方式
为了解决现有技术问题,本发明实施例提供一种检测NAT网络类型的方法及装置,以避免NAT网络类型检测对于STUN服务器的依赖,从而降低P2P网络的运行成本和网络架构复杂度。
本发明实施例所提供的一种检测NAT网络类型的方法,应用于第一节点,其中,所述第一节点为对等计算P2P网络中的任意一节点,所述方法可以包括:
在预定网络类型检测时刻,通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息,通过自身第二端口监听其他节点通过相应第一端口发送的第二PING请求消息,并通过自身第二端口和自身第一端口监听接收到第一PING请求消息的其他节点通过相应第一端口和第二端口发送的PING应答消息,其中,所述第一PING请求消息和第二PING请求消息均至少携带有作为目的者的节点的网络地址和作为目的端口的第二端口,任意一PING应答消息均至少携带有发送该PING应答消息的节点的网络地址转换NAT网络类型、该PING应答消息的发送端口、以及发送相应PING请求消息的节点的网络地址和作为目的端口的第一端口或第二端口;
当预设检测时间段内通过自身第二端口监听到其他节点发送的第二PING请求消息时,判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该第二PING请求消息,如果否,基于所监听到的该第二PING请求消息所携带的网络地址,确定自身的NAT网络类型,并且,分别通过自身第一端口和自身第二端口向相应其他节点反馈PING应答消息;
当预设PING请求响应时间段内通过第一端口和/或第二端口监听到接收第一PING请求消息的其他节点反馈的PING应答消息时,更新发送该PING应答消息的相应其他节点的NAT网络类型,并判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该PING应答消息,否则,继续判断当前是否接收到至少两个PING应答消息,并在是的情况下,基于所接收到的至少两个PING应答消息所携带的发送端口和网络地址,确定自身的NAT网络类型。
可见,本发明实施例中,在NAT网络类型检测过程中,依赖P2P各节点之间的泛洪消息来确定P2P各节点的NAT网络类型,无需依赖STUN服务器,降低了网络架构的复杂度和网络架构复杂度,另外,由于通过简单的请求/应答消息检测得到所有节点的网络类型,使得节点的检测过程简单以及P2P网络的资源利用率得到提高。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了清楚起见,下面首先对所存在的NAT网络类型进行如下介绍:
(1)PUBLIC类型,即公网类型:
没有处在NAT设备后面,直接在Internet上传输数据的网络类型。
(2)FULLCONE NAT类型,即全双工锥型:
当内部主机发出一个“外出”的连接会话,就会创建了一个(公网,私网)地址对,一旦这个地址对被创建,全双工锥形NAT会接收随后任何外部端口传入这个公共端口地址的通信。
(3)RESTRICTED NAT类型,即受限制锥型:
受限制的锥形NAT会对传入的数据包进行筛选,当内部主机发出“外出”的会话时,NAT会记录这个外部主机的IP地址信息,所以,也只有这些有记录的外部IP地址,能够将信息传入到NAT内部。
(4)PORTRESTRICTED NAT类型,即端口受限制锥型:
端口受限制的锥形NAT,与受限制的锥形NAT不同的是:它同时记录了外部主机的IP地址和端口信息,只有这些有记录的外部IP地址在维持端口“同一性”时,才能将信息传入到NAT内部。
(5)SYMMETRIC NAT类型,即对称型:
主机发起不同的“外出”会话,对称型NAT不对会话进行端口绑定,而是分配一个全新的公网端口给每一个新的会话。
基于上述所介绍的NAT网络类型,下面结合图1介绍本发明实施例所提供的一种检测NAT网络类型的方法,应用于第一节点,其中,所述第一节点为对等计算P2P网络中的任意一节点。
图1为本发明实施例提供的一种检测NAT网络类型的方法的流程示意图,包括如下步骤:
S101:在预定网络类型检测时刻,通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息,通过自身第二端口监听其他节点通过相应第一端口发送的第二PING请求消息,并通过自身第二端口和自身第一端口监听接收到第一PING请求消息的其他节点通过相应第一端口和第二端口发送的PING应答消息;
需要说明的是,在达到预定网络类型检测时刻时,P2P网络中的每一节点均会通过相同的方式进行NAT网络类型检测,为了清楚起见,本发明实施例从第一节点的角度来介绍NAT网络类型的检测,该第一节点为P2P网络中的任意一个节点,并且,P2P网络中的节点指主机,相对于NAT设备而言,主机可以分为外部主机和内部主机。并且,第一端口中的“第一”和第二端口中的“第二”仅仅为了区分不同的端口,并不存在任何限定意义,同样的,第一PING请求消息中的“第一”和第二PING请求消息中的“第二”仅仅为了区分第一节点与其他节点的所发送的PING请求消息,并不存在任何限定意义。
例如:在P2P网络中假定作为第一节点的节点为节点A,作为其他节点为节点B、节点C、节点D……节点N,各个节点分别绑定作为第一端口的端口P和作为第二端口的端口Q,在预定网络类型检测时刻,由节点A的端口P向节点B、节点C、节点D……节点N的端口Q发送PING请求消息,通过节点A的端口Q监听节点B、节点C、节点D……节点N的端口P发送的PING请求消息,并通过节点A的端口P与端口Q两个端口监听接收到PING请求消息的其他节点通过端口P和端口Q发送的PING应答消息。当然,在达到预定网络类型检测时刻时,P2P网络中除节点A以外的其他节点也执行与节点A类似的操作。
具体的,所述第一PING请求消息和第二PING请求消息均至少携带有作为目的者的节点的网络地址和作为目的端口的第二端口,任意一PING应答消息均至少携带有发送该PING应答消息的节点的NAT网络类型、该PING应答消息的发送端口、以及发送相应PING请求消息的节点的网络地址和作为目的端口的第一端口或第二端口。例如:节点A发送给节点B的PING请求消息中携带有节点B的网络地址和作为目的端口的端口Q,而节点A发送给节点C的PING请求消息中携带有节点C的网络地址和作为目的端口的端口Q,同样的,节点B发送给节点A的PING请求消息中携带有节点A的网络地址和端口Q;而节点B通过端口P反馈给节点A的PING应答消息中携带有节点B的NAT网络类型、发送该PING应答消息的端口P、节点A的网络地址、节点A的端口Q,节点B通过端口Q反馈给节点A的PING应答消息中携带有节点B的NAT网络类型、发送该PING应答消息的端口Q、节点A的网络地址、节点A的端口P。
理论上,每个节点所有可用端口(1~65535)中的任意两个端口均可以分别作为第一端口和第二端口,但一般工程上约定(1~1024)是系统使用的,例如:80是http专用,所以,第一端口和第二端口可以从1024之后的端口中选择,需要强调的是,PING请求消息只由发送者的第一端口发送,由目的方第二端口监听,而PING应答消息可以由发送者的第一端口和第二端口发送,由目的方的第二端口和第一端口监听。
本领域技术人员可以理解的是,通常P2P网络中的节点会缓存其他节点的地址表,从而向所缓存的相应节点发送PING请求消息。并且,所述预定网络类型检测时刻可以为系统启动连入网络的时刻,或者,网络(如网卡或网络服务)重新启动的时刻,或者,网络切换(如无线切有线)的时刻,等等。
S102:判断预设检测时间段内通过自身第二端口是否监听到其他节点发送的第二PING请求消息,如果是,执行S103,如果否,不作处理;
其中,可以将预定网络类型检测时刻之后的一段时间作为预设检测时间段,具体的时间长度可以根据实际情况进行设定。
例如:如果预设检测时间段内节点A通过自身的端口Q监听到节点B、节点C、节点D……节点N中至少一个节点发送的PING请求消息,执行S103,否则,不作处理。
S103:判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该第二PING请求消息,如果否,基于所监听到的该第二PING请求消息所携带的网络地址,确定自身的NAT网络类型,并且,分别通过自身第一端口和自身第二端口向相应其他节点反馈PING应答消息;
由于存在通过之前所接收到的其他节点的PING请求消息和PING应答消息已确定出第一节点的NAT网络类型的可能性,因此,该第一节点可以首先判断下自身的NAT网络类型是否被确定出,并根据不同的判断结果执行不同的操作。
具体的,所述基于所监听到的该第二PING请求消息所携带的网络地址,确定自身的NAT网络类型,可以包括:
判断所监听到的第二PING请求消息所携带的网络地址是否与自身的网络地址相同,如果是,确定自身的NAT网络类型为PUBLIC类型,否则,确定自身的NAT网络类型为FULLCONE类型。
例如:由节点A的端口Q监听到节点B的端口P发送的PING请求消息,如果该PING请求消息所携带的网络地址与节点A的网络地址相同,确定节点A的NAT网络类型为PUBLIC类型,否则,确定节点A的NAT网络类型为FULLCONE类型,同样的,由节点A的端口Q监听到节点C的端口P发送的PING请求消息,如果该PING请求消息所携带的网络地址与节点A的网络地址相同,确定节点A的NAT网络类型为PUBLIC类型,否则,确定节点A的NAT网络类型为FULLCONE类型。
S104:判断预设PING请求响应时间段内是否通过第一端口和/或第二端口监听到接收第一PING请求消息的其他节点反馈的PING应答消息,如果是,执行S105,否则,不作处理。
其中,可以将发送PING请求之后的一段时间作为PING请求响应时间段,具体的时间长度可以根据实际情况进行设定。
例如:如果预设PING请求响应时间段内节点A通过自身的端口P和/或Q监听到接收PING请求消息的节点B、节点C、节点D……节点N中至少一个节点反馈的PING应答消息,执行S105,否则,不作处理。
S105:更新发送该PING应答消息的相应其他节点的NAT网络类型,并判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该PING应答消息,否则,继续判断当前是否接收到至少两个PING应答消息,并在是的情况下,基于所接收到的至少两个PING应答消息所携带的发送端口和网络地址,确定自身的NAT网络类型。
由于存在通过之前所接收到的其他节点的PING请求消息和PING应答消息已确定出第一节点的NAT网络类型的可能性,因此,在更新发送该PING应答消息的相应其他节点的NAT网络类型后,可以判断自身的NAT网络类型是否被确定出,并根据不同的判断结果执行不同的操作。
具体的,所述基于所接收到的至少两个PING应答消息所携带的发送端口和网络地址,确定自身的NAT网络类型,可以包括:
从所述至少两个PING应答消息中筛选出两个PING应答消息;
判断所筛选出的两个PING应答消息所携带的网络地址和发送端口是否均相同,如果否,确定自身的NAT网络类型为SYMMETRIC类型,如果是,则继续判断所述至少两个PING应答消息中是否存在除所筛选出的两个PING应答消息以外的发送端口为第一端口的PING应答消息,如果存在,则确定自身的NAT网络类型为RESTRICTED类型,如果不存在,则确定自身的NAT网络类型为PORTRESTRICTED类型。
例如:假定节点A为第一节点,如果所筛选出的两个PING应答消息所携带的网络地址和发送端口不相同,确定节点A自身的NAT网络类型为SYMMETRIC类型,如果均相同,且存在除所筛选出的两个PING应答消息以外的端口P发送的PING应答消息,确定节点A自身的NAT网络类型为RESTRICTED类型,如果不存在,则确定节点A自身的NAT网络类型为PORTRESTRICTED类型。
需要强调的是,由于对于一个发送过PING请求消息的节点而言,可以同时监听相应的PING应答消息和其他节点发送给的PING请求消息,因此,S102和S104可以并行执行。
可见,本发明实施例中,在NAT网络类型检测过程中,依赖P2P各节点之间的泛洪消息来确定P2P各节点的NAT网络类型,无需依赖STUN服务器,降低了网络架构的复杂度和网络架构复杂度,另外,由于通过简单的请求/应答消息检测得到所有节点的网络类型,使得节点的检测过程简单以及P2P网络的资源利用率得到提高。
更进一步的,为了提高NAT网络类型的检测成功率,本发明实施例所提供的一种检测NAT网络类型的方法还可以包括:
通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息之后,当预设PING请求响应时间段内未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息时,重新通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息;
在重发发送的次数达到预定次数阈值后,如果未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息,且自身的NAT网络类型未被确定出,则确定自身的NAT网络类型为BLOCKED类型。
例如:在预设PING请求响应时间段内节点A未通过自身端口P和/或Q监听到接收PING请求消息的任意节点B、节点C、节点D……节点N中至少一个节点反馈的PING应答消息时,节点A重新通过自身端口P向节点B、节点C、节点D……节点N的端口Q发送PING请求消息。例如:在重发发送的次数达到预定次数阈值后,如果节点A未通过自身端口P和/或Q监听到接收PING请求消息的任意节点B、节点C、节点D……节点N中至少一个节点反馈的PING应答消息时,且节点A的NAT网络类型未被确定出,则确定节点A的NAT网络类型为BLOCKED类型。
下面结合一个具体实施例对本发明实施例所提供的一种检测NAT网络类型的方法进行介绍。
假定P2P网络中存在的节点包括:节点A、节点B、节点C、节点D……节点N,其中假定作为第一节点的节点为节点A,作为其他节点的节点为节点B、节点C、节点D……节点N,各个节点分别绑定作为第一端口的端口P和作为第二端口的端口Q。
其中,节点A发送给节点B的PING请求消息中携带有节点B的网络地址和作为目的端口的端口Q,而节点A发送给节点C的PING请求消息中携带有节点C的网络地址和作为目的端口的端口Q,同样的,节点B发送给节点A的PING请求消息中携带有节点A的网络地址和端口Q;而节点B通过端口P反馈给节点A的PING应答消息中携带有节点B的NAT网络类型、发送该PING应答消息的端口P、节点A的网络地址、节点A的端口Q,节点B通过端口Q反馈给节点A的PING应答消息中携带有节点B的NAT网络类型、发送该PING应答消息的端口Q、节点A的网络地址、节点A的端口P。
1)在预定网络类型检测时刻,由节点A的端口P向节点B、节点C、节点D……节点N的端口Q发送PING请求消息,通过节点A的端口Q监听节点B、节点C、节点D……节点N的端口P发送的PING请求消息,并通过节点A的端口P与端口Q两个端口监听接收到PING请求消息的其他节点通过端口P和端口Q发送的PING应答消息;
2)在预设检测时间段内节点A通过自身的端口Q监听到节点B、节点C、节点D……节点N中至少一个节点发送的PING请求消息,如果节点A自身的NAT网络类型已被确定出,则忽略所监听到的该PING请求消息,如果节点A自身的NAT网络类型未被确定出,且该PING请求消息所携带的网络地址与节点A的网络地址相同,确定节点A的NAT网络类型为PUBLIC类型,否则,确定节点A的NAT网络类型为FULLCONE类型,并且,分别通过节点A自身端口P和自身端口Q向相应其他节点反馈PING应答消息。
3)在预设PING请求响应时间段内节点A通过自身的端口P和/或Q监听到接收PING请求消息的节点B、节点C、节点D……节点N中至少一个节点反馈的PING应答消息,更新发送该PING应答消息的相应其他节点的NAT网络类型,如果节点A自身的NAT网络类型已被确定出,则忽略所监听到的该PING应答消息,如果节点A自身的NAT网络类型未被确定出,且当前收到至少两个PING应答消息,则从所述至少两个PING应答消息中筛选出两个PING应答消息,如果所筛选出的两个PING应答消息所携带的网络地址和发送端口不相同,确定节点A自身的NAT网络类型为SYMMETRIC类型,如果均相同,且存在除所筛选出的两个PING应答消息以外的端口P发送的PING应答消息,确定节点A自身的NAT网络类型为RESTRICTED类型,如果不存在,则确定节点A自身的NAT网络类型为PORTRESTRICTED类型。
4)在预设PING请求响应时间段内节点A未通过自身端口P和/或Q监听到接收PING请求消息的任意节点B、节点C、节点D……节点N中至少一个节点反馈的PING应答消息时,节点A重新通过自身端口P向节点B、节点C、节点D……节点N的端口Q发送PING请求消息。在重发发送的次数达到预定次数阈值后,如果节点A未通过自身端口P和/或Q监听到接收PING请求消息的任意节点B、节点C、节点D……节点N中至少一个节点反馈的PING应答消息时,且节点A的NAT网络类型未被确定出,则确定节点A的NAT网络类型为BLOCKED类型。
其中,在NAT网络类型检测过程中,P2P网络中的节点B、节点C、节点D……节点N执行与节点A相同的操作,在此不做赘述。
图2为本发明实施例提供的一种检测NAT网络类型的装置的结构示意图,与图1所示的流程相对应,应用于第一节点,其中,所述第一节点为对等计算P2P网络中的任意一节点,本发明实施例所提供的一种检测NAT网络类型的装置可以包括消息泛洪模块201、PING请求消息分析模块202、PING应答消息分析模块203;
其中,所述消息泛洪模块201,用于在预定网络类型检测时刻,应用于第一节点,通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息,通过自身第二端口监听其他节点通过相应第一端口发送的第二PING请求消息,并通过自身第二端口和自身第一端口监听接收到第一PING请求消息的其他节点通过相应第一端口和第二端口发送的PING应答消息,其中,所述第一PING请求消息和第二PING请求消息均至少携带有作为目的者的节点的网络地址和作为目的端口的第二端口,任意一PING应答消息均至少携带有发送该PING应答消息的节点的NAT网络类型、该PING应答消息的发送端口、以及发送相应PING请求消息的节点的网络地址和作为目的端口的第一端口或第二端口;
所述PING请求消息分析模块202,用于当预设检测时间段内通过自身第二端口监听到其他节点发送的第二PING请求消息时,判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该第二PING请求消息,如果否,基于所监听到的该第二PING请求消息所携带的网络地址,确定自身的NAT网络类型,并且,分别通过自身第一端口和自身第二端口向相应其他节点反馈PING应答消息;
所述PING应答消息分析模块203,用于当预设PING请求响应时间段内通过第一端口和/或第二端口监听到接收第一PING请求消息的其他节点反馈的PING应答消息时,更新发送该PING应答消息的相应其他节点的NAT网络类型,并判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该PING应答消息,否则,继续判断当前是否接收到至少两个PING应答消息,并在是的情况下,基于所接收到的至少两个PING应答消息所携带的发送端口和网络地址,确定自身的NAT网络类型。
可见,本发明实施例中,在NAT网络类型检测过程中,依赖P2P各节点之间的泛洪消息来确定P2P各节点的NAT网络类型,无需依赖STUN服务器,降低了网络架构的复杂度和网络架构复杂度,另外,由于通过简单的请求/应答消息检测得到所有节点的网络类型,使得节点的检测过程简单以及P2P网络的资源利用率得到提高。
更进一步的,本发明实施例所提供的一种检测NAT网络类型的装置还可以包括:
PING请求消息重发模块,用于通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息之后,当预设PING请求响应时间段内未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息时,重新通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息;
在重发发送的次数达到预定次数阈值后,如果未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息,且自身的NAT网络类型未被确定出,则确定自身的NAT网络类型为BLOCKED类型。
其中,所述PING请求消息分析模块202具体用于:
判断所监听到的第二PING请求消息所携带的网络地址是否与自身的网络地址相同,如果是,确定自身的NAT网络类型为PUBLIC类型,否则,确定自身的NAT网络类型为FULLCONE类型。
其中,所述PING应答消息分析模块203具体用于:
从所述至少两个PING应答消息中筛选出两个PING应答消息;
判断所筛选出的两个PING应答消息所携带的网络地址和发送端口是否均相同,如果否,确定自身的NAT网络类型为SYMMETRIC类型,如果是,则继续判断所述至少两个PING应答消息中是否存在除所筛选出的两个PING应答消息以外的发送端口为第一端口的PING应答消息,如果存在,则确定自身的NAT网络类型为RESTRICTED类型,如果不存在,则确定自身的NAT网络类型为PORTRESTRICTED类型。
对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (4)
1.一种检测NAT网络类型的方法,其特征在于,应用于第一节点,其中,所述第一节点为对等计算P2P网络中的任意一节点,所述方法包括:
在预定网络类型检测时刻,通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息,通过自身第二端口监听其他节点通过相应第一端口发送的第二PING请求消息,并通过自身第二端口和自身第一端口监听接收到第一PING请求消息的其他节点通过相应第一端口和第二端口发送的PING应答消息,其中,所述第一PING请求消息和第二PING请求消息均至少携带有作为目的者的节点的网络地址和作为目的端口的第二端口,任意一PING应答消息均至少携带有发送该PING应答消息的节点的网络地址转换NAT网络类型、该PING应答消息的发送端口、以及发送相应PING请求消息的节点的网络地址和作为目的端口的第一端口或第二端口;
当预设检测时间段内通过自身第二端口监听到其他节点发送的第二PING请求消息时,判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该第二PING请求消息,如果否,基于所监听到的该第二PING请求消息所携带的网络地址,确定自身的NAT网络类型,并且,分别通过自身第一端口和自身第二端口向相应其他节点反馈PING应答消息;
当预设PING请求响应时间段内通过第一端口和/或第二端口监听到接收第一PING请求消息的其他节点反馈的PING应答消息时,更新发送该PING应答消息的相应其他节点的NAT网络类型,并判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该PING应答消息,否则,继续判断当前是否接收到至少两个PING应答消息,并在是的情况下,基于所接收到的至少两个PING应答消息所携带的发送端口和网络地址,确定自身的NAT网络类型;
所述基于所监听到的该第二PING请求消息所携带的网络地址,确定自身的NAT网络类型,包括:
判断所监听到的第二PING请求消息所携带的网络地址是否与自身的网络地址相同,如果是,确定自身的NAT网络类型为PUBLIC类型,否则,确定自身的NAT网络类型为FULLCONE类型;
所述基于所接收到的至少两个PING应答消息所携带的发送端口和网络地址,确定自身的NAT网络类型,包括:
从所述至少两个PING应答消息中筛选出两个PING应答消息;
判断所筛选出的两个PING应答消息所携带的网络地址和发送端口是否均相同,如果否,确定自身的NAT网络类型为SYMMETRIC类型,如果是,则继续判断所述至少两个PING应答消息中是否存在除所筛选出的两个PING应答消息以外的发送端口为第一端口的PING应答消息,如果存在,则确定自身的NAT网络类型为RESTRICTED类型,如果不存在,则确定自身的NAT网络类型为PORTRESTRICTED类型。
2.根据权利要求1所述方法,其特征在于,所述方法还包括:
通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息之后,当预设PING请求响应时间段内未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息时,重新通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息;
在重发发送的次数达到预定次数阈值后,如果未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息,且自身的NAT网络类型未被确定出,则确定自身的NAT网络类型为BLOCKED类型。
3.一种检测NAT网络类型的装置,其特征在于,应用于第一节点,其中,所述第一节点为对等计算P2P网络中的任意一节点,所述装置包括:
消息泛洪模块,用于在预定网络类型检测时刻,通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息,通过自身第二端口监听其他节点通过相应第一端口发送的第二PING请求消息,并通过自身第二端口和自身第一端口监听接收到第一PING请求消息的其他节点通过相应第一端口和第二端口发送的PING应答消息,其中,所述第一PING请求消息和第二PING请求消息均至少携带有作为目的者的节点的网络地址和作为目的端口的第二端口,任意一PING应答消息均至少携带有发送该PING应答消息的节点的NAT网络类型、该PING应答消息的发送端口、以及发送相应PING请求消息的节点的网络地址和作为目的端口的第一端口或第二端口;
PING请求消息分析模块,当预设检测时间段内通过自身第二端口监听到其他节点发送的第二PING请求消息时,判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该第二PING请求消息,如果否,判断所监听到的第二PING请求消息所携带的网络地址是否与自身的网络地址相同,如果是,确定自身的NAT网络类型为PUBLIC类型,否则,确定自身的NAT网络类型为FULLCONE类型,并且,分别通过自身第一端口和自身第二端口向相应其他节点反馈PING应答消息;
PING应答消息分析模块,当预设PING请求响应时间段内通过第一端口和/或第二端口监听到接收第一PING请求消息的其他节点反馈的PING应答消息时,更新发送该PING应答消息的相应其他节点的NAT网络类型,并判断自身的NAT网络类型是否被确定出,如果是,忽略所监听到的该PING应答消息,否则,继续判断当前是否接收到至少两个PING应答消息,并在是的情况下,从所述至少两个PING应答消息中筛选出两个PING应答消息,判断所筛选出的两个PING应答消息所携带的网络地址和发送端口是否均相同,如果否,确定自身的NAT网络类型为SYMMETRIC类型,如果是,则继续判断所述至少两个PING应答消息中是否存在除所筛选出的两个PING应答消息以外的发送端口为第一端口的PING应答消息,如果存在,则确定自身的NAT网络类型为RESTRICTED类型,如果不存在,则确定自身的NAT网络类型为PORTRESTRICTED类型。
4.根据权利要求3所述的装置,其特征在于,所述装置还包括:
PING请求消息重发模块,通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息之后,当预设PING请求响应时间段内未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息时,重新通过自身第一端口向所述P2P网络中的其他节点的相应第二端口发送第一PING请求消息;
在重发发送的次数达到预定次数阈值后,如果未通过第一端口和/或第二端口监听到接收第一PING请求消息的任意一其他节点反馈的PING应答消息,且自身的NAT网络类型未被确定出,则确定自身的NAT网络类型为BLOCKED类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510544247.4A CN105049300B (zh) | 2015-08-28 | 2015-08-28 | 一种检测nat网络类型的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510544247.4A CN105049300B (zh) | 2015-08-28 | 2015-08-28 | 一种检测nat网络类型的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105049300A CN105049300A (zh) | 2015-11-11 |
CN105049300B true CN105049300B (zh) | 2018-08-07 |
Family
ID=54455521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510544247.4A Active CN105049300B (zh) | 2015-08-28 | 2015-08-28 | 一种检测nat网络类型的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105049300B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105635346B (zh) * | 2016-03-31 | 2018-12-14 | 北京奇艺世纪科技有限公司 | 一种nat网络类型检测方法及装置 |
CN110213132B (zh) * | 2019-06-06 | 2021-02-26 | 深圳市网心科技有限公司 | 网络连通方法、电子设备、系统及介质 |
CN111935333B (zh) * | 2020-08-12 | 2022-09-27 | 杭州萤石软件有限公司 | Nat类型的确定方法、设备、系统和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101083565A (zh) * | 2006-05-29 | 2007-12-05 | 腾讯科技(深圳)有限公司 | 一种检测网络类型的方法及系统 |
CN101883156A (zh) * | 2010-06-22 | 2010-11-10 | 北京神州泰岳软件股份有限公司 | 穿越nat设备的方法 |
CN101977249A (zh) * | 2010-10-27 | 2011-02-16 | 北京易视腾科技有限公司 | 穿透nat设备的方法 |
CN102196057A (zh) * | 2010-03-03 | 2011-09-21 | 腾讯科技(深圳)有限公司 | 一种确定nat类型的方法及装置 |
CN104468278A (zh) * | 2014-12-18 | 2015-03-25 | 上海斐讯数据通信技术有限公司 | 基于stun协议的udp老化时间检测系统及方法 |
-
2015
- 2015-08-28 CN CN201510544247.4A patent/CN105049300B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101083565A (zh) * | 2006-05-29 | 2007-12-05 | 腾讯科技(深圳)有限公司 | 一种检测网络类型的方法及系统 |
CN102196057A (zh) * | 2010-03-03 | 2011-09-21 | 腾讯科技(深圳)有限公司 | 一种确定nat类型的方法及装置 |
CN101883156A (zh) * | 2010-06-22 | 2010-11-10 | 北京神州泰岳软件股份有限公司 | 穿越nat设备的方法 |
CN101977249A (zh) * | 2010-10-27 | 2011-02-16 | 北京易视腾科技有限公司 | 穿透nat设备的方法 |
CN104468278A (zh) * | 2014-12-18 | 2015-03-25 | 上海斐讯数据通信技术有限公司 | 基于stun协议的udp老化时间检测系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105049300A (zh) | 2015-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103108089B (zh) | 网络系统的连线建立管理方法及其相关系统 | |
JP6918784B2 (ja) | IPv6ネットワークにおけるデータパケット送信方法および装置 | |
CN105847343B (zh) | 用于点对点传输的公网信息探测方法、装置及系统 | |
CN104883390B (zh) | 一种访问第三方视频监控设备的方法及装置 | |
CN105681445B (zh) | 数据的点对点传输路径选择方法及装置 | |
CN105049300B (zh) | 一种检测nat网络类型的方法及装置 | |
CN101247210B (zh) | 一种基于组播源发现协议实现组播转发树的方法 | |
US9942195B2 (en) | NAT traversal method, computer-readable medium, and system for mediating connection | |
WO2016086890A1 (zh) | 一种检测连通性的方法和装置 | |
CN107205026A (zh) | 一种点对点数据传输方法及系统 | |
WO2019051275A1 (en) | RECONNECTING A CALL | |
CN101277225B (zh) | 一种网络质量分析的方法及网络质量分析发起端设备 | |
CN106375139A (zh) | 复制请求的方法、装置和系统 | |
CN104506549A (zh) | 建立网游连接的方法、设备及系统 | |
CN103347099B (zh) | 一种数据交互的方法、装置及系统 | |
CN103152444A (zh) | 中继方式的网络地址转换及报文传输方法及装置、系统 | |
CN105915662B (zh) | 一种数据传输方法及装置 | |
US11637874B2 (en) | Communications apparatus, systems, and methods for preventing and/or minimizing session data clipping | |
CN106817267A (zh) | 一种故障检测方法和设备 | |
CN106534393B (zh) | 实现nat设备穿越的方法和系统 | |
CN110381007B (zh) | Tcp加速方法及装置 | |
US10063405B2 (en) | Real time transmission monitoring and anomaly detection | |
CN107659436A (zh) | 一种防止业务中断的方法及装置 | |
CN102984011A (zh) | 链路故障定位方法及设备 | |
CN105635346B (zh) | 一种nat网络类型检测方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |