CN112073553B - 网络地址转换类型的检测方法、装置、设备及存储介质 - Google Patents

网络地址转换类型的检测方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112073553B
CN112073553B CN202010900658.3A CN202010900658A CN112073553B CN 112073553 B CN112073553 B CN 112073553B CN 202010900658 A CN202010900658 A CN 202010900658A CN 112073553 B CN112073553 B CN 112073553B
Authority
CN
China
Prior art keywords
host
nat
port
detection
external network
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
Application number
CN202010900658.3A
Other languages
English (en)
Other versions
CN112073553A (zh
Inventor
张鹏
李剑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010900658.3A priority Critical patent/CN112073553B/zh
Publication of CN112073553A publication Critical patent/CN112073553A/zh
Application granted granted Critical
Publication of CN112073553B publication Critical patent/CN112073553B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/09Mapping addresses
    • H04L61/25Mapping addresses of the same type
    • H04L61/2503Translation of Internet protocol [IP] addresses
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/12Network monitoring probes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/50Testing arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请提供了一种NAT类型的检测方法、装置、电子设备及计算机可读存储介质;方法包括:通过第一内网中的电子设备对外网中的第一主机进行主动连接探测,并对外网中的第二主机进行第一次主动连接探测;当第一主机和第二主机返回的探测响应包包括相同的外网地址端口时,继续执行以下探测处理:对外网中的第三主机进行被动连接探测,对第二主机进行第二次主动连接探测,并对第三主机进行主动连接探测;基于与继续执行的探测处理对应的探测响应包,确定第一内网的NAT的类型。通过本申请,能够准确检测内网的NAT类型。

Description

网络地址转换类型的检测方法、装置、设备及存储介质
技术领域
本申请涉及互联网技术,尤其涉及一种网络地址转换(Network AddressTranslation,NAT)类型的检测方法、装置、电子设备及计算机可读存储介质。
背景技术
随着网络终端数量的增加,对网际协议(Internet Protocol,IP)地址的需求也急剧增加,为了延缓IP地址过早被耗尽,NAT被提出。NAT通过改变IP报文中的源地址或目的地址,使一个局域网中的多台主机可以使用少数的合法地址访问外部资源,从而提高了IP地址的利用率,有效的隐藏了内部局域网的主机IP地址,起到了安全保护的作用。进一步的,还可以根据NAT类型制定不同的NAT穿透策略,使不同的节点通过NAT进行连接。
然而,相关技术中对NAT的分类并不准确,对NAT的类型的检测流程也不完善。
发明内容
本申请实施例提供一种NAT类型的检测方法、装置、电子设备及计算机可读存储介质,能够准确检测内网的NAT类型。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种NAT类型的检测方法,包括:
通过第一内网中的电子设备对外网中的第一主机进行主动连接探测,并对所述外网中的第二主机进行第一次主动连接探测;
当所述第一主机和所述第二主机返回的探测响应包包括相同的外网地址端口时,继续执行以下探测处理:
对所述外网中的第三主机进行被动连接探测,对所述第二主机进行第二次主动连接探测,并对所述第三主机进行主动连接探测;
基于与所述继续执行的探测处理对应的探测响应包,确定所述第一内网的NAT的类型。
本申请实施例提供一种NAT类型的检测装置,包括:
探测模块,用于通过第一内网中的电子设备对外网中的第一主机进行主动连接探测,并对所述外网中的第二主机进行第一次主动连接探测;当所述第一主机和所述第二主机返回的探测响应包包括相同的外网地址端口时,继续执行以下探测处理:对所述外网中的第三主机进行被动连接探测,对所述第二主机进行第二次主动连接探测,并对所述第三主机进行主动连接探测;
类型判断模块,用于基于与所述继续执行的探测处理对应的探测响应包,确定所述第一内网的NAT的类型。
上述方案中,所述探测模块,还用于:
通过所述电子设备向所述第一主机发送第一探测包;
接收所述第一主机返回给所述电子设备的第一探测响应包;
从所述第一探测响应包中提取出第一外网地址端口和所述第二主机的外网地址;
其中,所述第一外网地址端口包括:所述第一主机接收到的所述第一探测包携带的源网络协议IP地址和源端口。
上述方案中,所述探测模块,还用于:
当没有接收到所述第一主机返回给所述电子设备的所述第一探测响应包时,确定所述第一探测包发送失败,且所述第一内网的NAT类型为用户数据报协议障碍(UDPBlocked)。
上述方案中,所述探测模块,还用于:
当接收到所述第一主机返回给所述电子设备的第一探测响应包时,通过所述电子设备向所述第二主机发送第二探测包;
接收所述第二主机返回给所述电子设备的第二探测响应包;
从所述第二探测响应包中提取第二外网地址端口;
其中,所述第二外网地址端口包括:所述第二主机接收到的所述第二探测包携带的源IP地址和源端口。
上述方案中,所述探测模块,还用于:
当所述第一外网地址端口和所述第二外网地址端口相同时,确定所述第一主机和所述第二主机返回的探测响应包具有相同的外网地址端口;
当所述第一外网地址端口和所述第二外网地址端口不相同时,确定所述NAT的类型为对称型(Symmetric)NAT。
上述方案中,所述探测模块,还用于:
通过所述电子设备向所述第二主机发送携带第一请求的第三探测包;
其中,所述第一请求用于请求从区别于所述第二主机的其他主机向所述电子设备返回探测响应包,以使所述第二主机将所述第三探测包转发至所述第三主机的第一端口,并由所述第三主机通过所述第一端口向所述电子设备主动发送探测响应包。
上述方案中,所述类型判断模块,还用于:
当接收到所述第三主机通过所述第一端口返回的探测响应包时,确定所述NAT的类型为完全锥型(Full cone)NAT。
上述方案中,所述探测模块,还用于:
当未接收到所述第三主机通过所述第一端口向所述电子设备主动发送的探测响应包时,通过所述电子设备向所述第二主机的第二端口发送携带第二请求的第四探测包;
其中,所述第二请求用于请求所述第二主机基于区别于所述第二端口的其他端口向所述电子设备返回探测响应包。
上述方案中,所述类型判断模块,还用于:
当接收到所述第二主机基于区别于所述第二端口的其他端口返回的探测响应包时,确定所述NAT的类型为地址受限锥型(Address-Restricted cone)NAT。
上述方案中,所述探测模块,还用于:
当未接收到所述第二主机基于区别于所述第二端口的其他端口返回的探测响应包时,通过所述电子设备向所述第三主机的所述第一端口发送第五探测包。
上述方案中,所述类型判断模块,还用于:
接收所述第三主机通过所述第一端口返回给所述电子设备的第三探测响应包;
从所述第三探测响应包中提取第三外网地址端口,其中,所述第三外网地址端口包括:所述第三主机接收到的所述第三探测包携带的源IP地址和源端口;
当所述第三外网地址端口与所述第一外网地址端口相同时,确定所述NAT的类型为端口受限锥型(Port-Restricted cone)NAT,当所述第三外网地址端口与所述第一外网地址端口不相同时,确定所述NAT的类型为动态NAT;
其中,所述动态NAT包括:
当所述电子设备主动连接所述外网时,所述第一内网的NAT类型表现为Port-Restricted cone NAT;
当所述电子设备被动连接所述外网时,所述第一内网的NAT类型表现为SymmetricNAT。
在上述方案中,所述装置还包括:连接模块,用于:
当所述第一内网的NAT类型为动态NAT,且第二内网的NAT类型为动态NAT之外的其他类型时,
通过中间服务器接收所述第二内网的电子设备发送的第三请求,通过所述中间服务器向所述第二内网的电子设备发送连接请求,以建立与所述第二内网的电子设备之间的连接;
其中,所述第三请求是在所述第一内网的电子设备和所述第二内网的电子设备分别与所述中间服务器建立连接之后发送,且所述第三请求用于请求所述第一内网的电子设备主动连接所述第二内网的电子设备;
其中,所述中间服务器为所述第一主机、所述第二主机和所述第三主机中的任意一个。
本申请实施例提供一种检测NAT类型的电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的NAT类型的检测方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的NAT类型的检测方法。
本申请实施例具有以下有益效果:
通过第一内网中的电子设备与外网中不同的主机进行主动连接探测,能够基于返回的探测响应包中的外网地址可对NAT类型进行初步判断,然后通过电子设备与主机的主动连接探测所返回的探测响应包和被动连接探测时返回的探测响应包进行精确探测。完善了NAT类型的检测流程,提高了NAT类型检测的正确率。
附图说明
图1是本申请实施例提供的NAT类型的分类示意图;
图2A是本申请实施例提供的Full Cone NAT的原理示意图;
图2B是本申请实施例提供的Address-Restricted cone NAT的原理示意图;
图2C是本申请实施例提供的Port-Restricted cone NAT的原理示意图;
图2D是本申请实施例提供的Symmetric NAT的原理示意图;
图3A是相关技术提供的NAT类型的检测流程示意图;
图3B是相关技术提供的NAT类型的检测流程示意图;
图4是本申请实施例提供的NAT类型检测的网络结构示意图;
图5是本申请实施例提供的NAT类型的检测方法的流程示意图;
图6是本申请实施例提供的NAT类型检测方法的数据包交互示意图;
图7A是本申请实施例提供的第一内网的电子设备与第二内网的电子设备进行内网穿透的流程示意图;
图7B是本申请实施例提供的第一内网的电子设备与第二内网的电子设备进行内网穿透的流程示意图;
图8A是本申请实施例提供的NAT类型的检测流程示意图;
图8B是本申请实施例提供的NAT类型的检测流程示意图;
图9是本申请实施例提供的电子设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1、内网,也叫局域网(Local Area Network,LAN)或私网,是在一个局部的地理范围内(如一个学校、工厂和机关内),一般是方圆几千米以内,将各种主机(例如各种终端、服务器)、外部设备和数据库等互相联接起来组成的计算机通信网。本申请实施例中涉及两个内网,为了便于区分,称为第一内网和第二内网。
2、外网,也叫做公网,或开放互联网(Open Internet),其中的主机具有公网IP地址,允许主动发起和被动响应两种方式UDP通信。公网是相对于内网而言的。内网中的主机的IP地址是因特网(Internet)的保留地址,例如IPv4的192.168.*.*网段;而公网中的主机的IP地址是因特网的公用地址,是非保留的地址。公网的主机和因特网上的其他主机可随意互相访问。
3、网络出口设备,设置在从内网到达外网的路由出口位置的路由器或防火墙,维护外网地址(还可包括端口)和内网地址(还可包括端口)之间的映射规则,并根据映射规则对数据包的源地址和端口/目的地址和端口进行替换。
4、对等式网络(Peer-to-Peer,P2P),又称点对点网络,是无中心服务器、依靠用户群交换信息的互联网体系,用于减低以往网路传输中的节点,以降低资料遗失的风险。与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。
5、NAT,又称网络掩蔽、IP掩蔽,被配置在网络出口设备,在IP数据包通过网络出口设备时重写来源IP地址或目的IP地址的技术。
6、网络地址转换穿透,简称为NAT穿透,在处于使用了NAT设备的私有传输控制协议(Transmission Control Protocol,TCP)/网络协议(Internet Protocol,IP)网络中的主机之间创建连接。
7、用户数据包协议(User Datagram Protocol,UDP),是一个简单的面向数据报的通信协议,位于开放式系统互联通信参考模型(Open System Interconnection ReferenceModel,OSI)模型的传输层。
8、用户数据包协议阻碍(User Datagram Protocol Blocked),简称为UDP障碍,位于防火墙之后,并且防火墙阻止了UDP通信。
9、对称式防火墙(Symmetric Firewall),内网的主机具有公网IP,但位于防火墙之后,且防火墙阻止了外部主机的主动UDP通信。
10、地址端口,即主机的IP地址和端口的组合的简称,也称为套接字(socket)。
参见图1,图1是本申请实施例提供的NAT类型的分类示意图。NAT可分为基本NAT和动态网络地址端口转换(Network Address Port Translator,NAPT)。基本NAT只转换IP地址,而不转换端口。NAPT转换IP地址和端口对。
基本NAT分为静态型NAT和动态型NAT。静态型NAT是一个外网IP对应一个内网IP,用于实现一对一转换。动态型NAT是N个外网IP对应M个内网IP,用于实现不固定的一对一转换。
相关技术中,NAPT只分为对称型NAT和锥型(Cone)NAT两大类。其中,锥型(Cone)NAT包括完全锥型、地址受限锥型、端口受限锥型三种。
下面结合图2A-图2D说明具体的NAT类型。
图2A是本申请实施例提供的Full Cone NAT的原理示意图,Full Cone NAT的特点为:从同一内网地址端口(iAddr:IPort)发至外网的所有数据包都被网络出口设备映射成同一个外网地址端口(eAddr:ePort),即网络出口设备的外网地址端口,内网地址端口可以收到任意外网主机发到外网地址端口(eAddr:ePort)的数据包。
图2B是本申请实施例提供的Address-Restricted cone NAT的原理示意图,Address-Restricted cone NAT的特点为:从同一内网地址端口(iAddr:IPort)发至外网的所有数据包都被网络出口设备映射成同一个外网地址端口(eAddr:ePort),只有当内网主机(iAddr:IPort)先给特定的外网主机(IP地址为hAddr)发送过数据包,外网主机hAddr从它的任意端口发送到(eAddr:ePort)的数据包才会被网络出口设备转发到(iAddr:IPort)。
图2C是本申请实施例提供的Port-Restricted cone NAT的原理示意图,Port-Restricted cone NAT的特点为:从同一内网地址端口(iAddr:IPort)发至外网的所有数据包都映射到同一个外网地址端口(eAddr:ePort),只有当内网主机(iAddr:IPort)先给特定的外网地址端口(hAddr:hPort)发送过数据包,由(hAddr:hPort)发送到(eAddr:ePort)的数据包将会被转发到(iAddr:IPort)。
图2D是本申请实施例提供的Symmetric NAT的原理示意图,Symmetric NAT的特点为:每一个源地址端口为同一内网地址端口(iAddr:IPort)、且目的地址端口为特定外网主机的地址端口(hAddr:hPort)的数据包,都被网络出口设备映射到一个独特的外网地址端口。外网主机只有在接收到内网主机(iAddr:IPort)发送的数据包时,才能向内网主机(iAddr:IPort)回送数据包。
例如,假定内网主机(192.168.0.3:100)给一外网地址端口(45.6.99.100:7545)发送数据包,数据包到达网络出口设备,网络出口设备分配一个端口800,从而建立了一个映射规则(8.8.8.8:800)<->(192.168.0.3:100);内网主机(192.168.0.3:100)又给一外网地址端口(46.7.100.101:7546)发送数据包,则网络出口设备开辟一个新的端口8001,创建新的映射规则(8.8.8.8:8001)<->(192.168.0.3:100),以与外网地址端口(46.7.100.101:7546)的外网主机通信。
然而,申请人在实施本申请实施例的过程中发现,NAPT除了Symmetric NAT和锥型NAT这两类,还包括图1所示的动态(Dynamic)NAT类型,其特点为:当内网主机主动连接外网主机时,内网的NAT类型被探测到表现为Port-Restricted cone NAT,即,内网主机只接收已建立连接(内网主机曾给外网主机的某一端口发送过数据包)的外网主机的同一端口所发送的数据包;当内网主机被动连接外网主机时(外网主机主动向内网主机发送数据包),内网的NAT类型被探测到表现为Symmetric NAT,即,当已建立连接的不同的外网主机地址端口(IP地址不同或端口不同或二者都不同)向内网主机发送数据包时,通过不同的外网地址端口向内网主机返回数据包。
下面分析相关技术提供的NAT类型检测方案。
参见图3A和图3B,图3A和图3B是相关技术提供的NAT类型的检测流程示意图。以下将结合图3A和图3B对相关技术中NAT类型的检测流程进行说明。
下述步骤101至步骤103为检测内网主机是否有能力进行UDP通信的测试阶段。
在步骤101中,内网主机建立UDP套接字,用UDP套接字向外网主机的(IPA:PortA)发送数据包,要求主机从相同的IP地址和端口返回数据包。
在步骤102中,内网主机检测是否接收到外网主机返回的数据包,如果未接收到,则执行步骤103,如果接收到,则执行步骤104。
在步骤103中,内网主机确定NAT类型为UDP Blocked。
无法接收到主机的回应,则说明防火墙阻止了UDP通信,NAT类型为UDP Blocked。
下述步骤104为检测内网主机是否具有外网地址的测试阶段。
在步骤104中,内网主机比较外网主机返回的内网主机的(IP:Port)和内网主机socket的(LocalIP:LocalPort)是否相同,如果地址端口(IP地址和端口)完全相同,则执行步骤105,如果不同,则执行步骤109。
如果地址端口(IP地址和端口)完全相同,则内网主机具有外网IP地址。如果地址端口(IP地址和端口)不完全相同,则内网主机不具有外网IP地址。
下述步骤105至步骤108为检测内网的NAT类型是否是Open Internet或SymmetricFirewall的阶段。
在步骤105中,内网主机向外网主机的(IPA:PortA)发送数据包,要求外网主机从不同的IP地址和端口返回数据包。
在步骤106中,内网主机检测是否接收到外网主机返回的数据包,如果未接收到,则执行步骤107,如果接收到,则执行步骤108。
在步骤107中,内网主机确定NAT类型为Symmetric Firewall。
在步骤108中,内网主机确定NAT类型为Open Internet。
下述步骤109至步骤1011为检测内网的NAT类型是否是Full Cone NAT的阶段。
在步骤109中,内网主机向主机的(IPA:PortA)发送数据包,要求外网主机从不同的IP地址和端口返回数据包。
在步骤1010中,内网主机检测是否接收到外网主机的返回的数据包,如果接收到,则执行步骤1011,如果未接收到,则执行步骤1012。
在步骤1011中,内网主机确定NAT类型是Full Cone NAT。
下述步骤1012至步骤1014为检测内网主机NAT是否是Symmetric NAT的阶段。
在步骤1012中,内网主机向外网主机的(IPB:PortB)发送数据包,要求外网主机从相同的IP地址和端口返回数据包。
在步骤1013中,内网主机检测返回的数据包中的内网主机的IP地址和端口与步骤104中返回的数据包中的内网主机的IP地址和端口是否相同,若不相同,执行步骤1014,若相同,执行步骤1015。
在步骤1014中,内网主机确定NAT类型是Symmetric NAT。
下述步骤1015至步骤1018为检测内网主机NAT是Restricted Cone NAT还是PortRestricted ConeNAT的阶段。
在步骤1015中,内网主机向外网主机的(IPA:PortA)发送数据包,要求外网主机从IPA和一个不同于PortA的端口返回一个数据包响应内网主机。
在步骤1016中,内网主机检测是否接收到外网主机的返回的数据包,如果接收到,则执行步骤1017,如果未接收到,则执行步骤1018。
在步骤1017中,内网主机确定NAT类型是Restricted Cone NAT。
在步骤1018中,内网主机确定NAT类型是Port Restricted Cone NAT。
可见,上述检测流程中,均为内网主机主动连接外网主机。若按照上述检测流程进行检测,动态NAT将被误识别为Port-Restricted cone NAT。这是因为,相关技术并未考虑到会存在具有上述表现特性动态NAT,相应的,标准的NAT类型的检测流程中就存在误识别的问题。申请人发现,相关技术的NAT类型的检测流程只考虑了内网主机主动连接外网主机的情形,并未考虑内网主机被动连接外网主机的情形,因此,如果内网主机的NAT类型为动态NAT,在内网主机主动连接外网主机时,内网的网络出口设备将表现为Port-Restrictedcone NAT,从而导致NAT被误识别Port-Restricted cone NAT。如此,在根据NAT类型制定跨内网主机之间的穿透策略时,会导致得到错误的穿透策略,从而影响穿透成功率。
为至少解决相关技术的上述NAT误识别的技术问题,本申请实施例提供一种NAT类型的检测方法、装置、电子设备及计算机可读存储介质,能够提高NAT类型检测的精确度。
下面说明本申请实施例提供的电子设备的示例性应用,本申请实施例提供的电子设备可以实施为主机或台式电脑、笔记本电脑、智能手机、平板电脑等各种类型的用户终端,也可以是服务器。
参见图4,图4是本申请实施例提供的NAT类型检测的网络结构示意图,第一内网的电子设备100可以是智能手机、电脑、服务器等各种类型的电子设备,电子设备100可通过网络出口设备200与外网中的外网主机300(相当于外网中的第一主机)、外网主机400(相当于外网中的第二主机)和外网主机500(相当于外网中的第三主机)连接,从而实现本申请实施例提供的NAT类型的检测方法。
下面结合上文的NAT类型检测的示例性网络结构,说明本申请实施例提供的NAT类型的检测方法。作为示例,下文的电子设备可以是图4中的第一内网中的电子设备100,作为示例,电子设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能摄像头等,但并不局限于此。第一主机可以是图4中的外网主机300,第二主机可以是图4中的外网主机400,第三主机可以是图4中的外网主机500,外网主机可以是电脑终端,也可以是服务器。
参见图5,图5是本申请实施例提供的NAT类型的检测方法的流程示意图,将结合图5示出的步骤进行说明。
在步骤201中,第一内网中的电子设备对外网中的第一主机进行主动连接探测。
在一些实施例中,主动连接探测可以是UDP访达测试,通过UDP访达测试确定第一内网中的电子设备是否有能力进行UDP通信。
下面结合图6说明步骤201的探测过程。
如图6所示,图6是本申请实施例提供的NAT类型检测方法的数据包交互示意图。在一个可能的示例中,第一内网中的电子设备对外网中的第一主机进行主动连接探测,可以采用如下方式实现:在探测阶段1中,电子设备向第一主机发送第一探测包;接收第一主机返回给电子设备的第一探测响应包;从第一探测响应包中提取出第一外网地址端口和第二主机的外网地址;其中,第一外网地址端口包括第一主机接收到的第一探测包的IP地址和源端口。
当电子设备未接收到第一主机返回给电子设备的第一探测响应包时,确定第一探测包发送失败,且第一内网的NAT类型为UDP Blocked。
以下以网络出口设备为路由器为例说明上述主动连接探测过程。
在一些实施例中,电子设备基于自身的IP地址(IP0)和端口(Port0)创建socket,通过socket向路由器的IP地址和端口(IP1:Port1)发送第一探测包,路由器接收第一探测包之后,将第一探测包的源IP地址(电子设备的内网地址)由IP0改为路由器的IP地址IP1(路由器的外网地址),将第一探测包的源端口由Port0改为路由器的端口Port1,然后将更改了源地址和源端口的第一探测包发送给第一主机的IP地址和端口(IP2:Port2)。在电子设备发送第一探测包之后,即开始准备接收第一主机返回的第一探测响应包。
若在预设的套接字超时(socket Timeout,如300ms)时间段内,电子设备未接收到第一主机经由路由器返回给电子设备的第一探测响应包,且此时路由器和第一主机无异常且网络无波动,则可确定是因为UDP通信被防火墙阻止,所以第一探测包未能成功发送,即,第一内网的NAT类型为UDP Blocked。
需要说明的是,为了提高探测的准确性,可以对电子设备和第一主机进行多次主动连接探测,若每次探测都超时,无法接收到第一主机的第一探测响应包,则可以确定NAT类型为UDP Blocked。
若在预设的套接字超时(socket Timeout)时间段内,电子设备接收到第一主机通过路由器返回的第一探测响应包,则可确定NAT类型不是UDP Blocked,并从第一探测响应包中提取出第一外网地址端口和第二主机的外网地址。
在一些实施例中,第一主机接收到第一探测包之后,从第一探测包提取源IP地址和源端口,即路由器的IP地址和端口。同时获取一个或多个可用于检测的主机(例如服务器)的外网地址。将第一探测包的源IP地址、源端口(即路由器的IP地址和端口)以及可用于NAT类型检测的主机(如第一主机)的外网地址打包生成第一探测响应包,将第一探测响应包通过路由器发送给电子设备。电子设备可从第一探测响应包中提取出第一探测包的源IP地址、源端口(也即第一外网地址端口)和第二主机的外网地址。
需要说明的是,作为在第一探测响应包中携带的第二主机的外网地址的方案的替代方案,在电子设备进行NAT检测之前,电子设备中可以被预先设置用于NAT类型检测的多个外网主机的地址,以便电子设备后续检测NAT类型时,直接通过不同的外网主机进行检测。
可见,通过上述UDP访达测试可确定NAT类型是否为UDP Blocked,如果未接收到第一探测响应包,确定NAT类型不是UDP Blocked,至少可排除掉一种可能的NAT类型。
在步骤202中,第一内网中的电子设备对外网中的第二主机进行第一次主动连接探测。
在一个可能的示例中,对外网中的第二主机进行第一次主动连接探测,可以采用如下方式实现:当接收到第一主机返回给电子设备的第一探测响应包时,根据第二主机的外网地址,并通过电子设备向第二主机发送第二探测包;接收第二主机通过路由器返回给电子设备的第二探测响应包;从第二探测响应包中提取第二外网地址端口和第三主机的外网地址端口;其中,第二外网地址端口包括第二主机接收到的第二探测包的源IP地址和源端口,即路由器的IP地址和端口。
下面结合图6说明步骤202的探测过程。在探测阶段2中,当电子设备接收到第一主机返回的第一探测响应包后,从第一探测响应包中获取第二主机的外网地址端口(IP3:Port3)。电子设备通过路由器向(IP3:Port3)发送第二探测包,第二探测包携带有返回请求,返回请求用于请求第二主机返回探测响应包,电子设备接收第二主机返回给电子设备的第二探测响应包,并从中提取第二外网地址端口和第三主机的外网地址端口(IP4:Port4)。
因为路由器有可能存在多个IP地址和多个端口,所以,路由器可能通过不同的IP地址和端口向电子设备返回探测响应包。第一外网地址端口中的IP地址可能与第二外网地址端口中的IP地址不同,第一外网地址端口中的端口可能与第二外网地址端口中的端口不同。当第一外网地址端口和第二外网地址端口相同时,即第一探测包的源IP地址与第二探测包的源IP地址相同、且第一探测包的源端口与第二探测包的源端口相同时,说明路由器是通过同一个IP地址和同一个端口(即同一个外网地址端口)分别向电子设备返回第一探测响应包和第二探测响应包,确定第一主机和第二主机返回的探测响应具有相同的外网地址端口,则NAT类型不可能为Symmetric NAT。
当第一外网地址端口和第二外网地址端口不相同时,即第一探测包的源IP地址与第二探测包的源IP地址不同,或第一探测包的源端口与第二探测包的源端口不同,或二者的源IP地址和端口都不相同时,确定NAT的类型为Symmetric NAT。
可见,通过上述电子设备和第二主机之间的第一次主动连接探测可确定NAT类型是否为Symmetric NAT,如果NAT类型不是Symmetric NAT,至少可帮助排除掉一种可能的NAT类型。
当第一主机和第二主机返回的探测响应包括相同的外网地址时,继续执行包括步骤203-205的探测处理,并在步骤206中,第一内网中的电子设备基于与继续执行的探测处理对应的探测响应包,确定第一内网的NAT的类型。需要指出,步骤203-205中每个步骤的探测处理对应的探测响应包,均会触发执行步骤206,以确定第一内网的NAT类型或排除不是第一内网的一种NAT类型,下面进行说明。
在步骤203中,第一内网中的电子设备对外网中的第三主机进行被动连接探测。
在一个可能的示例中,对外网中的第三主机进行被动连接探测,可以采用如下方式实现:通过电子设备向第二主机发送携带第一请求的第三探测包;其中,第一请求用于请求从区别于第二主机的其他电子设备向电子设备返回探测响应包,以使第二主机将第三探测包转发至第三主机的第一端口,并由第三主机通过第一端口主动发送探测响应包。当电子设备接收到第三主机通过第一端口返回的探测响应包时,确定NAT的类型为Full coneNAT。
下面结合图6说明步骤203的探测过程。在探测阶段3中,如果确定NAT类型不是Symmetric NAT,电子设备向第二主机发送携带第一请求的第三探测包,请求从其他主机返回探测响应包。第二主机接收到第三探测包后,将第三探测包转发给第三主机的第一端口Port4,然后,第三主机通过第一端口Port4主动发送探测响应包给电子设备。
因为第三主机之前并未与电子设备直接通信,即电子设备之前并未向第三主机发送过数据包,因此,与步骤203相应地,在步骤206中,如果判断出电子设备接收到第三主机返回的探测响应包,说明第一内网的NAT类型为Full cone NAT。
对于路由器来说,只要将第一内网中电子设备的IP地址和端口与路由器的IP地址和端口建立映射规则,就可以将外网中任意电子设备的数据包通过路由器的IP地址和端口发送至第一内网中的电子设备,而不必在二者间建立连接。相应的,如果电子设备未接收到第三主机返回的探测响应包,说明NAT的类型不是Full cone NAT。如此,可排除掉又一种可能的NAT类型。
其中,作为上述的电子设备向第二主机发送携带第一请求的第三探测包的替代方案,电子设备也可以通过第一主机或者其他可用的主机向第三主机转发第三探测包。
需要说明的是,上述的探测过程中,由于是第三主机主动向电子设备发送探测响应包,而不是电子设备主动向第三主机发数据包,因此,即使电子设备有可能接收不到返回的探测响应包,这种探测依然属于被动连接探测。
在步骤204中,第一内网中的电子设备对第二主机进行第二次主动连接探测。
在一个可能的示例中,对第二主机进行第二次主动连接探测,可以采用如下方式实现:当电子设备未接收到第三主机通过第一端口主动发送的探测响应包时,电子设备向第二主机的第二端口发送携带第二请求的第四探测包;其中,第二请求用于请求第二主机于区别于第二端口的其他端口向电子设备返回探测响应包。
与步骤204相应地,在步骤206中,当电子设备接收到第二主机基于区别于第二端口的其他端口返回的探测响应包时,确定NAT的类型为Address-Restricted cone NAT。
其中,电子设备也可以通过第一主机或者其他可用的主机进行第二次主动连接探测。
下面结合图6说明步骤204的探测过程。在探测阶段4中,当电子设备未接收到第三主机通过第一端口主动发送的探测响应包时,电子设备向第二主机的第二端口Port3发送携带第二请求的第四探测包,第二请求用于请求第二主机通过除第二端口Port3以外的其他端口向电子设备返回探测响应包。若电子设备接收到第二主机通过其他端口(如Port5)返回的探测响应包时,说明电子设备可接收同一IP地址、不同端口返回的数据包,即可接收同一外网主机的不同端口所返回的数据包,因此,第一内网的NAT类型为Address-Restricted cone NAT。
若电子设备未接收到第二主机其他端口返回的探测响应包,按照上文记载的相关技术的NAT检测方法,则会将第一内网NAT的类型识别为Port-Restricted cone NAT。因为相关技术并未认识到动态NAT的存在,且其检测流程中并未为内网的电子设备构建被动连接这一场景,因此,当NAT类型实际为动态NAT时,相关技术却被误检测为Port-Restrictedcone NAT。如此,在电子设备与外网主机被动连接时,会出现连接失败的情况,而始终无法找出连接失败的原因。因此,当电子设备未接收到第二主机其他端口返回的探测响应包时,考虑到动态NAT的存在,在本申请实施例中还会做一次探测,以确定NAT类型为Port-Restricted cone NAT还是动态NAT。可见,本申请实施例中的检测方法相对于相关技术的检测方法所考虑的NAT类型更多,更为全面,因此,检测结果也更为准确。
在步骤205中,第一内网中的电子设备对第三主机进行主动连接探测。
在一个可能的示例中,对第三主机进行主动连接探测,可以采用如下方式实现:当未接收到第二主机基于区别于第二端口的其他端口返回的探测响应包时,通过电子设备向第三主机的第一端口发送第五探测包。
接收第三主机通过第一端口返回给电子设备的第三探测响应包;从第三探测响应包中提取第三外网地址端口,其中,第三外网地址端口包括第三主机接收到的第三探测包的源IP地址和源端口。
与步骤205对应的,在步骤206中,当第三外网地址端口与第一外网地址端口相同时,则确定第一内网的NAT类型为Port-Restricted cone NAT,当第三外网地址端口与第一外网地址端口不相同时,确定第一内网的NAT类型为动态NAT。
下面结合图6说明步骤205的探测过程。在探测阶段5中,电子设备向第三主机的第一端口Port4发送第五探测包,并接收从第一端口Port4返回的第三探测响应包。与步骤201和步骤202类似的,从第三探测响应包中提取第三外网地址端口,即提取第三主机向电子设备返回的第三探测响应包中的路由器的IP地址和端口。若此时得到的路由器的IP地址和端口与第一外网地址端口(IP1:Port1)相同,表明NAT的类型为Port-Restricted cone NAT;若不同,例如,第三外网地址端口为(IP1:Port7)或(IP5:Port1),不同于第一外网地址端口(IP1:Port1),说明不同的主机通过路由器的不同的外网地址向电子设备返回探测响应包,NAT类型有可能为Symmetric NAT。这是因为,在电子设备与第三主机进行被动连接探测时,第三主机主动访问过电子设备,因此,电子设备对第三主机进行主动连接探测仍然属于电子设备的被动连接。此时,不同的主机通过不同的外网地址向电子设备返回探测响应包,与Symmetric NAT表现一致。且在前述步骤201-204中,电子设备分别与第一主机、第二主机主动连接时,根据步骤204的结果可知,NAT的表现与Port-Restricted cone NAT一致。因此,可确定NAT的类型为动态NAT。
可见,本申请实施例不仅可以检测出常见的NAT类型,还可以检测出不常见的动态NAT,完善了旧有的NAT检测流程,提高了NAT类型检测的准确性。
下面对上述步骤206检测NAT的类型的流程进行总结。
在一个可能的示例中,针对上述步骤203得到的探测响应包,步骤206包括可通过如下方式实现:当接收到第三主机通过第一端口返回的探测响应包时,确定NAT的类型为Full cone NAT。
在一个可能的示例中,针对上述步骤204得到的探测响应包,步骤206包括可通过如下方式实现:当接收到第二主机基于区别于第二端口的其他端口返回的探测响应包时,确定NAT的类型为Address-Restricted cone NAT。
在一个可能的示例中,针对上述步骤205得到的探测响应包,步骤206包括可通过如下方式实现:当第三外网地址端口与第一外网地址端口相同时,确定NAT的类型为Port-Restricted cone NAT,当第三外网地址端口与第一外网地址端口不相同时,确定NAT的类型为动态NAT。
可见,基于上述步骤203-205得到的探测响应包可以确定第一内网的各种可能的NAT类型,已在前文进行了详细说明,此处不再赘述。
需要说明的是,作为一个特例,上述的第一主机、第二主机、第三主机可以是同一个外网主机,即外网主机具有3个外网地址端口,例如,第一外网地址端口为(IPa:Porta)、第二外网地址端口为(IPb:Portb),第三外网地址端口为(IPc:Portc),从而,上文的所述第一主机可以等同于第一外网地址端口,上文所述的第二主机可以等同于第二外网地址端口,上文所述的第三主机可以等同于第三外网地址端口。需要说明的是,由于当NAT类型为Full cone NAT时,表现与公网一致,可以通过主动发起和被动响应进行UDP通信,因此,本申请实施例在对Full cone NAT这种类型进行检测后,就不需要对公网这种类型进行检测。当NAT类型为Address-Restricted cone NAT或Port-Restricted cone NAT时,表现与Symmetric Firewall一致,即主机具有公网地址,但是主机位于防火墙后,且防火墙阻止了外部主机的主动UDP通信。因此,本申请实施例在对Address-Restricted cone NAT和Port-Restricted cone NAT这两种类型进行检测后,就不需要对Symmetric Firewall这种类型再进行检测。如此,最大化的精简了检测流程,用尽可能少的步骤将NAT所有可能的类型一一进行排查,确定出NAT类型,检测流程快,消耗资源少。
可见,本申请实施例通过第一内网中的电子设备与外网中不同的主机进行主动连接探测,基于返回的探测响应包中的外网地址可对NAT类型进行初步判断,然后通过电子设备与主机的主动连接探测所返回的探测响应包和被动连接探测时返回的探测响应包可进一步确定NAT类型。通过将被动连接时的探测添加到NAT类型的检测流程中,从而完善了NAT类型的检测流程。不仅可以检测出常见的NAT类型,还可以检测出动态NAT,有效的区分了Port-Restricted cone NAT和动态NAT。降低了检测错误的概率,方便针对动态NAT制定穿透策略,提高穿透成功率。
下面结合图7A和图7B说明基于NAT类型检测结果的内网穿透方案。
在以下的图7A和图7B中,假设第一内网的电子设备100与第二内网的电子设备900进行内网穿透通信,可以应用于P2P视频直播、点播、文件下载等应用场景,电子设备100与电子设备900可以通过内网穿透通信来同步上述应用场景的数据的同步,从而可以避免从相应应用场景的应用服务器直接请求数据,减小对应用服务器的访问压力;当然,内网穿透通信也可以用于其他应用场景,例如电子设备100与电子设备900之间可以进行视频聊天。网络出口设备200是第一内网的路由器或防火墙,网络出口设备210是第二内网的路由器或防火墙。中间服务器700是部署各种内网穿透协议的服务器,特别地,当如图4示出的外网中的外网主机300-500是部署内网穿透协议的服务器时,中间服务器700可以是外网主机300-500中的任意一个。
参见图7A,图7A是本申请实施例提供的第一内网的电子设备与第二内网的电子设备进行内网穿透的流程示意图。
作为一个示例,当第一内网的NAT类型和第二内网的NAT类型都是动态NAT之外的其他类型时,电子设备100通过网络出口设备200与中间服务器700通信,即在网络出口设备200中建立了电子设备100与中间服务器700之间的映射规则;电子设备900通过网络出口设备210与中间服务器700通信,即在网络出口设备210中建立了电子设备900与中间服务器700之间的映射规则。此后,电子设备100可通过中间服务器700获知电子设备900的外网地址和端口,即网络出口设备210的IP地址和端口。然后,电子设备100向电子设备900发送第一消息(用于请求连接),第一消息会被网络出口设备210拒收,因为它的映射规则中没有从电子设备100到电子设备900的映射规则。但之后,在网络出口设备200中便建立了电子设备100与电子设备900之间的映射规则。然后,电子设备100通过中间服务器700向电子设备900发送通知,以使电子设备900在接收到通知后连接电子设备100。最后,电子设备900通过中间服务器700向电子设备100发送第二消息(用于请求连接),此时,电子设备100可以接收到电子设备900发送的第二消息,并在网络出口设备210中也建立了电子设备100与电子设备900之间的映射规则。NAT穿透完成,电子设备100可与电子设备900进行点对点通信,如进行文件传播、视频下载等。
在一些实施例中,当第一内网的NAT类型为动态NAT,第二内网的NAT类型为动态NAT之外的其他类型时,因为Symmetric NAT的连接成功率低于Port-Restricted cone NAT的连接成功率,因此,为了增加第一内网的电子设备与第二内网的电子设备的连接成功率,通过第一内网的电子设备主动连接第二内网的电子设备,使第一内网的NAT类型表现为Port-Restricted cone NAT,从而提高连接成功率。
参见图7B,图7B是本申请实施例提供的第一内网的电子设备与第二内网的电子设备进行内网穿透的流程示意图。
假设以下应用场景,第一内网对应的类型为动态NAT,第二内网的NAT类型为动态NAT之外的其他类型,第一内网中的电子设备100和第二内网中的电子设备900均运行视频客户端。若电子设备900的视频客户端缓存有视频资源,电子设备100的视频客户端需要从电子设备900的视频客户端同步视频资源,以避免访问视频服务器造成的视频服务器访问压力。
在电子设备100通过第一内网的网络出口设备200与中间服务器700建立连接,电子设备900也通过第二内网的网络出口设备210与中间服务器700建立连接之后,电子设备900通过中间服务器700向电子设备100发送第三请求,第三请求用于请求电子设备100主动连接电子设备900。电子设备100接收到第三请求后,通过中间服务器700向电子设备900发送连接请求,以建立与电子设备900之间的连接。在穿透成功(即连接成功)后,电子设备100中的视频客户端可向电子设备900的视频客户端发送视频获取请求,以获取电子设备900的视频客户端缓存的视频资源。如此,电子设备100中的视频客户端可从电子设备900获取视频资源,而不再需要从视频服务器获取视频资源,减少了视频服务器的负载,提高了数据下载的效率。可见,本申请实施例可有效的识别出动态NAT类型,方便后续针对动态NAT制定穿透策略,从而提高穿透成功率。
图7B的内网穿透流程可以概括如下:在第一内网的网络出口设备中建立了第二内网的电子设备的映射规则,允许接收来自于第二内网的电子设备的消息;在第二内网的网络出口设备中也建立了第一内网的电子设备的映射规则,允许接收来自于第一内网的电子设备的消息。若第一内网的电子设备向第二内网的电子设备发送数据包,首先,第一内网的网络出口设备通过映射规则对数据包进行地址转换,将数据包的源地址和源端口号修改为第一内网的网络出口设备的地址和端口号,然后将数据包发送给第二内网的网络出口设备,第二内网的网络出口设备通过映射规则对数据包再次进行地址转换,将数据包的源地址和源端口号修改为第二内网的网络出口设备的地址和端口号,最后,将数据包发送给第二内网的电子设备。因为之前在第一内网的网络出口设备和第二内网的网络出口设备中建立了对应的映射规则,所以数据包能够被正确转发。
下面,将说明本申请实施例提供的NAT类型的检测流程方法的具体示例。
参见图8A和图8B,图8A和图8B是本申请实施例提供的NAT类型的检测流程示意图。以下将结合图8A和图8B对本申请实施例提供的NAT类型的检测流程进行说明。
下述步骤801至步骤804为用户数据包协议访达检测阶段。
在步骤801中,电子设备向第一主机(地址为(IP2:Port2))发送携带第一请求的数据包,请求第一主机从(IP2:Port2)处返回包括电子设备第一外网地址(包括IP地址和端口)和可供切换的其他主机地址的数据包。
在步骤802中,电子设备检测在预设时间段内,是否接收到来自(IP2:Port2)的数据包。如果未接收到,则执行步骤803,如果接收到,则执行步骤804。
在步骤803中,电子设备确定NAT类型为UDP Blocked。
若在预设时间段内,电子设备未接收到来自(IP2:Port2)的数据包,且此时网络无波动,第一主机无异常,确定电子设备向第一主机发送的数据包未能成功发送。因此,电子设备所在内网的NAT类型为UDP Blocked。
在步骤804中,电子设备记录数据包提供的第一外网地址和可供切换的第二主机的地址(IP3:Port3)。
下述步骤805至步骤808为对称检测阶段。
在步骤805中,电子设备向第二主机发送携带第二请求的数据包,请求第二主机从同一地址返回包括电子设备第二外网地址和可供切换的第三主机地址(IP4:Port4)的数据包。
在步骤806中,电子设备接收第二主机返回的数据包,记录数据包中提供的第二外网地址(包括IP地址和端口)以及第三主机的地址。
在步骤807中,电子设备对比第一外网地址和第二外网地址,确定是否相同,若不相同,执行步骤808,若相同,执行步骤809。
在步骤808中,电子设备确定NAT类型是Symmetric NAT.
下述步骤809至步骤811为开放检测阶段。
在步骤809中,电子设备向第二主机发送携带第三请求的数据包,请求从其他主机返回数据包给电子设备。
在步骤810中,电子设备检测在预设时间段内,是否接收到从(IP4:Port4)返回的数据包,若接收到,执行步骤811,若未接收到,执行步骤812。
在步骤811中,电子设备确定NAT类型为Full cone NAT。
因为之前电子设备没有直接给第三主机发过数据包,却可以接收到第三主机发送的数据包,说明第二主机响应于第三请求,将数据包转发给第三主机,由第三主机返回数据包给电子设备,所以NAT类型为Full cone NAT。如此,可实现电子设备与第三主机的被动连接。
下述步骤812至步骤814为限制检测阶段。
在步骤812中,电子设备向第二主机的第一端口(IP3:Port3)发送携带第四请求的数据包,请求从区别于第一端口的其他端口(IP3:Portx)返回数据包给电子设备。
在步骤813中,电子设备检测在预设时间段内,是否接收到第二主机其他端口(如Port5)返回的响应数据包,若接收到,执行步骤814,若未接收到,执行步骤815。
在步骤814中,电子设备确定NAT类型为Address-Restricted cone NAT。
下述步骤815至步骤819为动态检测阶段。
在步骤815中,电子设备向第三主机发送携带第五请求的数据包,请求从(IP4:Port4)返回数据包给电子设备。
在步骤816中,电子设备接收从(IP4:Port4)返回的数据包。
从(IP4:Port4)返回的数据包包括电子设备的第三外网地址(包括IP地址和端口)。
在步骤817中,电子设备对比第三外网地址和第一外网地址,确定是否相同,若相同,执行步骤818,若不相同,执行步骤819。
在步骤818中,电子设备确定NAT类型是Port-Restricted cone NAT。
在步骤819中,电子设备确定NAT类型是动态NAT。
电子设备与第三主机被动连接,且表现为Symmetric NAT,因此是动态NAT。
显然,上述检测流程可以应用于P2P视频直播、点播、文件下载等过程中,从而提高电子设备的连接成功率,降低下载成本。
下面以本申请实施例提供的电子设备为终端为例说明示例性结构。
参见图9,图9是本申请实施例提供的电子设备的结构示意图,图9所示的电子设备100包括:至少一个处理器610、存储器650、至少一个网络接口620和用户接口630。电子设备100中的各个组件通过总线系统640耦合在一起。可理解,总线系统640用于实现这些组件之间的连接通信。总线系统640除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图9中将各种总线都标为总线系统640。
处理器610可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口630包括使得能够呈现媒体内容的一个或多个输出装置631,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口630还包括一个或多个输入装置632,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器650可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器650可选地包括在物理位置上远离处理器610的一个或多个存储设备。
存储器650包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器650旨在包括任意适合类型的存储器。
在一些实施例中,存储器650能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统651,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块652,用于经由一个或多个(有线或无线)网络接口620到达其他计算设备,示例性的网络接口620包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块653,用于经由一个或多个与用户接口630相关联的输出装置631(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块654,用于对一个或多个来自一个或多个输入装置632之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的NAT类型的检测装置可以采用软件方式实现,图9示出了存储在存储器650中的NAT类型的检测装置655,其可以是程序和插件等形式的软件,包括以下软件模块:探测模块6551和类型判断模块6552。在一些实施例中,NAT类型的检测装置655还包括连接模块6553。这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。下面说明各个模块的功能。
探测模块6551,用于通过第一内网中的电子设备对外网中的第一主机进行主动连接探测,并对外网中的第二主机进行第一次主动连接探测;当第一主机和第二主机返回的探测响应包包括相同的外网地址端口时,继续执行以下探测处理:对外网中的第三主机进行被动连接探测,对第二主机进行第二次主动连接探测,并对第三主机进行主动连接探测;
类型判断模块6552,用于基于与继续执行的探测处理对应的探测响应包,确定第一内网的网络地址转换NAT的类型。
在一些实施例中,探测模块6551,还用于:通过电子设备向第一主机发送第一探测包;接收第一主机返回给电子设备的第一探测响应包;从第一探测响应包中提取出第一外网地址端口和第二主机的外网地址;其中,第一外网地址端口包括:第一主机接收到的第一探测包携带的源网络协议IP地址和源端口。
在一些实施例中,探测模块6551,还用于:当没有接收到第一主机返回给电子设备的第一探测响应包时,确定第一探测包发送失败,且第一内网的NAT类型为用户数据报协议障碍(UDP Blocked)。
在一些实施例中,探测模块6551,还用于:当接收到第一主机返回给电子设备的第一探测响应包时,通过电子设备向第二主机发送第二探测包;接收第二主机返回给电子设备的第二探测响应包;从第二探测响应包中提取第二外网地址端口;
其中,第二外网地址端口包括:第二主机接收到的第二探测包携带的源IP地址和源端口。
在一些实施例中,探测模块6551,还用于:当第一外网地址端口和第二外网地址端口相同时,确定第一主机和第二主机返回的探测响应包具有相同的外网地址端口;当第一外网地址端口和第二外网地址端口不相同时,确定NAT的类型为Symmetric NAT。
在一些实施例中,探测模块6551,还用于:通过电子设备向第二主机发送携带第一请求的第三探测包;其中,第一请求用于请求从区别于第二主机的其他主机向电子设备返回探测响应包,以使第二主机将第三探测包转发至第三主机的第一端口,并由第三主机通过第一端口向电子设备主动发送探测响应包。
在一些实施例中,类型判断模块6552,还用于:当接收到第三主机通过第一端口返回的探测响应包时,确定NAT的类型为Full cone NAT。
在一些实施例中,探测模块6551,还用于:当未接收到第三主机通过第一端口向电子设备主动发送的探测响应包时,通过电子设备向第二主机的第二端口发送携带第二请求的第四探测包;其中,第二请求用于请求第二主机基于区别于第二端口的其他端口向电子设备返回探测响应包。
在一些实施例中,类型判断模块6552,还用于:当接收到第二主机基于区别于第二端口的其他端口返回的探测响应包时,确定NAT的类型为Address-Restricted cone NAT。
在一些实施例中,探测模块6551,还用于:当未接收到第二主机基于区别于第二端口的其他端口返回的探测响应包时,通过电子设备向第三主机的第一端口发送第五探测包。
在一些实施例中,类型判断模块6552,还用于:接收第三主机通过第一端口返回给电子设备的第三探测响应包;从第三探测响应包中提取第三外网地址端口,其中,第三外网地址端口包括:第三主机接收到的第三探测包携带的源IP地址和源端口;当第三外网地址端口与第一外网地址端口相同时,确定NAT的类型为Port-Restricted cone NAT,当第三外网地址端口与第一外网地址端口不相同时,确定NAT的类型为动态NAT。其中,动态NAT包括:当电子设备主动连接外网时,第一内网的NAT类型表现为Port-Restricted cone NAT;当电子设备被动连接外网时,第一内网的NAT类型表现为Symmetric NAT。
在一些实施例中,装置还包括:连接模块6553,用于:当第一内网的NAT类型为动态NAT,且第二内网的NAT类型为动态NAT之外的其他类型时,通过中间服务器接收第二内网的电子设备发送的第三请求,通过中间服务器向第二内网的电子设备发送连接请求,以建立与第二内网的电子设备之间的连接;其中,第三请求是在第一内网的电子设备和第二内网的电子设备分别与中间服务器建立连接之后发送,且第三请求用于请求第一内网的电子设备主动连接第二内网的电子设备;其中,中间服务器为第一主机、第二主机和第三主机中的任意一个。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得计算机设备执行本申请实施例上述的NAT类型的检测方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的NAT类型的检测方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
综上所述,本申请实施例通过第一内网中的电子设备与外网中不同的主机进行主动连接探测,基于返回的探测响应包中的外网地址可对NAT类型进行初步判断,然后通过电子设备与主机的主动连接探测所返回的探测响应包和被动连接探测时返回的探测响应包可进一步确定NAT类型。通过将被动连接时的探测添加到NAT类型的检测流程中,从而完善了NAT类型的检测流程,提高了NAT类型检测的正确率。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。

Claims (15)

1.一种网络地址转换NAT类型的检测方法,其特征在于,所述方法包括:
通过第一内网中的电子设备对外网中的第一主机进行主动连接探测,并对所述外网中的第二主机进行第一次主动连接探测;
当所述第一主机和所述第二主机返回的探测响应包包括相同的外网地址端口时,继续执行以下探测处理:
对所述外网中的第三主机进行被动连接探测,对所述第二主机进行第二次主动连接探测,并对所述第三主机进行主动连接探测;
基于与所述继续执行的探测处理对应的探测响应包,确定所述第一内网的NAT的类型;
其中,所述基于与所述继续执行的探测处理对应的探测响应包,确定所述第一内网的NAT的类型,包括:
接收所述第三主机通过第一端口返回给所述电子设备的第三探测响应包;
从所述第三探测响应包中提取第三外网地址端口,其中,所述第三外网地址端口包括:所述第三主机接收到的第三探测包携带的源IP地址和源端口;
当所述第三外网地址端口与第一外网地址端口不相同时,确定所述第一内网的NAT的类型为动态NAT;所述第三探测响应包用于响应第五请求,所述第五请求是在NAT类型不是以下类型时,由所述电子设备发送给所述第三主机的:
地址受限锥型Address-Restricted cone NAT、完全锥型Full Cone NAT、对称型Symmetric NAT、对称式防火墙Symmetric Firewall、用户数据报协议障碍UDP Blocked。
2.根据权利要求1所述的方法,其特征在于,所述通过第一内网中的电子设备对外网中的第一主机进行主动连接探测,包括:
通过所述电子设备向所述第一主机发送第一探测包;
接收所述第一主机返回给所述电子设备的第一探测响应包;
从所述第一探测响应包中提取出所述第一外网地址端口和所述第二主机的外网地址;
其中,所述第一外网地址端口包括:所述第一主机接收到的所述第一探测包携带的源网络协议IP地址和源端口。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
当没有接收到所述第一主机返回给所述电子设备的所述第一探测响应包时,确定所述第一探测包发送失败,且所述第一内网的NAT类型为用户数据报协议障碍UDP Blocked。
4.根据权利要求3所述的方法,其特征在于,所述对所述外网中的第二主机进行第一次主动连接探测,包括:
当接收到所述第一主机返回给所述电子设备的第一探测响应包时,通过所述电子设备向所述第二主机发送第二探测包;
接收所述第二主机返回给所述电子设备的第二探测响应包;
从所述第二探测响应包中提取第二外网地址端口;
其中,所述第二外网地址端口包括:所述第二主机接收到的所述第二探测包携带的源IP地址和源端口。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述第一外网地址端口和所述第二外网地址端口相同时,确定所述第一主机和所述第二主机返回的探测响应包具有相同的外网地址端口;
当所述第一外网地址端口和所述第二外网地址端口不相同时,确定所述NA T的类型为对称型Symmetric NAT。
6.根据权利要求1所述的方法,其特征在于,所述对所述外网中的第三主机进行被动连接探测,包括:
通过所述电子设备向所述第二主机发送携带第一请求的所述第三探测包;
其中,所述第一请求用于请求从区别于所述第二主机的其他主机向所述电子设备返回探测响应包,以使所述第二主机将所述第三探测包转发至所述第三主机的所述第一端口,并由所述第三主机通过所述第一端口向所述电子设备主动发送探测响应包。
7.根据权利要求6所述的方法,其特征在于,所述基于与所述继续执行的探测处理对应的探测响应包,确定所述第一内网的NAT的类型,还包括:
当接收到所述第三主机通过所述第一端口返回的探测响应包时,确定所述NAT的类型为完全锥型Full cone NAT。
8.根据权利要求7所述的方法,其特征在于,所述对所述第二主机进行第二次主动连接探测,包括:
当未接收到所述第三主机通过所述第一端口向所述电子设备主动发送的探测响应包时,通过所述电子设备向所述第二主机的第二端口发送携带第二请求的第四探测包;
其中,所述第二请求用于请求所述第二主机基于区别于所述第二端口的其他端口向所述电子设备返回探测响应包。
9.根据权利要求8所述的方法,其特征在于,所述基于与所述继续执行的探测处理对应的探测响应包,确定所述第一内网的NAT的类型,还包括:
当接收到所述第二主机基于区别于所述第二端口的其他端口返回的探测响应包时,确定所述NAT的类型为地址受限锥型Address-Restricted cone NAT。
10.根据权利要求8所述的方法,其特征在于,所述对所述第三主机进行主动连接探测,包括:
当未接收到所述第二主机基于区别于所述第二端口的其他端口返回的探测响应包时,通过所述电子设备向所述第三主机的所述第一端口发送所述携带所述第五请求的第五探测包。
11.根据权利要求1所述的方法,其特征在于,所述基于与所述继续执行的探测处理对应的探测响应包,确定所述第一内网的NAT的类型,还包括:
当所述第三外网地址端口与所述第一外网地址端口相同时,确定所述NAT的类型为端口受限锥型Port-Restricted cone NAT;
其中,所述动态NAT包括:
当所述电子设备主动连接所述外网时,所述第一内网的NAT类型表现为Port-Restricted cone NAT;
当所述电子设备被动连接所述外网时,所述第一内网的NAT类型表现为SymmetricNAT。
12.根据权利要求1至11任一项所述的方法,其特征在于,所述方法还包括:
当所述第一内网的NAT类型为动态NAT,且第二内网的NAT类型为动态NAT之外的其他类型时,
通过中间服务器接收所述第二内网的电子设备发送的第三请求,通过所述中间服务器向所述第二内网的电子设备发送连接请求,以建立所述第一内网的电子设备与所述第二内网的电子设备之间的连接;
其中,所述第三请求是在所述第一内网的电子设备和所述第二内网的电子设备分别与所述中间服务器建立连接之后发送,且所述第三请求用于请求所述第一内网的电子设备主动连接所述第二内网的电子设备;
其中,所述中间服务器为所述第一主机、所述第二主机和所述第三主机中的任意一个。
13.一种网络地址转换NAT类型的检测装置,其特征在于,包括:
探测模块,用于通过第一内网中的电子设备对外网中的第一主机进行主动连接探测,并对所述外网中的第二主机进行第一次主动连接探测;当所述第一主机和所述第二主机返回的探测响应包包括相同的外网地址端口时,继续执行以下探测处理:对所述外网中的第三主机进行被动连接探测,对所述第二主机进行第二次主动连接探测,并对所述第三主机进行主动连接探测;
类型判断模块,用于基于与所述继续执行的探测处理对应的探测响应包,确定所述第一内网的NAT的类型;
其中,所述类型判断模块具体用于:
接收所述第三主机通过第一端口返回给所述电子设备的第三探测响应包;
从所述第三探测响应包中提取第三外网地址端口,其中,所述第三外网地址端口包括:所述第三主机接收到的第三探测包携带的源IP地址和源端口;
当所述第三外网地址端口与第一外网地址端口不相同时,确定所述第一内网的NAT的类型为动态NAT;所述第三探测响应包用于响应第五请求,所述第五请求是在NAT类型不是以下类型时,由所述电子设备发送给所述第三主机的:
地址受限锥型Address-Restricted cone NAT、完全锥型Full Cone NAT、对称型Symmetric NAT、对称式防火墙Symmetric Firewall、用户数据报协议障碍UDP Blocked。
14.一种检测网络地址转换NAT类型的电子设备,其特征在于,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至12任一项所述的NAT类型的检测方法。
15.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于被处理器执行时,实现权利要求1至12任一项所述的网络地址转换NAT类型的检测方法。
CN202010900658.3A 2020-08-31 2020-08-31 网络地址转换类型的检测方法、装置、设备及存储介质 Active CN112073553B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010900658.3A CN112073553B (zh) 2020-08-31 2020-08-31 网络地址转换类型的检测方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010900658.3A CN112073553B (zh) 2020-08-31 2020-08-31 网络地址转换类型的检测方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN112073553A CN112073553A (zh) 2020-12-11
CN112073553B true CN112073553B (zh) 2023-09-05

Family

ID=73665912

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010900658.3A Active CN112073553B (zh) 2020-08-31 2020-08-31 网络地址转换类型的检测方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112073553B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112887187B (zh) * 2021-01-19 2022-09-06 海尔数字科技(青岛)有限公司 一种设备间通信建立方法、系统、装置、设备及介质
CN116708358B (zh) * 2022-10-31 2024-04-05 荣耀终端有限公司 P2p穿越方法、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101083565A (zh) * 2006-05-29 2007-12-05 腾讯科技(深圳)有限公司 一种检测网络类型的方法及系统
WO2017166808A1 (zh) * 2016-03-30 2017-10-05 上海斐讯数据通信技术有限公司 一种通过穿透nat实现p2p通信的方法、设备、服务器及系统
CN110061888A (zh) * 2019-03-18 2019-07-26 北京奇艺世纪科技有限公司 网络协议类型判断方法、装置、计算机设备及存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101083565A (zh) * 2006-05-29 2007-12-05 腾讯科技(深圳)有限公司 一种检测网络类型的方法及系统
WO2017166808A1 (zh) * 2016-03-30 2017-10-05 上海斐讯数据通信技术有限公司 一种通过穿透nat实现p2p通信的方法、设备、服务器及系统
CN110061888A (zh) * 2019-03-18 2019-07-26 北京奇艺世纪科技有限公司 网络协议类型判断方法、装置、计算机设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于端口探测的SIP穿透NAT的设计与实现;刘春燕;陈名松;冼莉莉;;计算机工程(第17期);全文 *

Also Published As

Publication number Publication date
CN112073553A (zh) 2020-12-11

Similar Documents

Publication Publication Date Title
CN112165532B (zh) 节点访问方法、装置、设备及计算机可读存储介质
US20110078326A1 (en) Communication device and communication method of the same
US9146826B2 (en) Method and apparatus for scaling network simulation
CN103108089B (zh) 网络系统的连线建立管理方法及其相关系统
CN112073553B (zh) 网络地址转换类型的检测方法、装置、设备及存储介质
CN111193773B (zh) 负载均衡方法、装置、设备及存储介质
US20140310397A1 (en) Network system capable of implementing stun with the assistance of two network devices and method thereof
KR20150013860A (ko) 클라이언트 없는 클라우드 컴퓨팅
CN101425938A (zh) 测试网络设备的方法和装置
US9825855B2 (en) Information processing apparatus and route setting method
US11726938B2 (en) Communications for field programmable gate array device
CN113419812B (zh) 一种虚拟化环境下端口转发测试方法、装置、设备及介质
US20090154464A1 (en) Method and system for simulating network address translation
US20230031062A1 (en) Data processing method and apparatus, related device, and storage medium
CN111800341B (zh) 一种跨路由器终端通信方法及装置
US20220224670A1 (en) Communication method and related device
JP2018510538A (ja) ネットワーク共有実施方法及び装置
TWI551100B (zh) 用以進行點對點連接的方法、伺服器與裝置
CN115022279B (zh) 内网穿透方法和装置
CN112019641B (zh) 数据传输方法和装置
US9077741B2 (en) Establishing communication between entities in a shared network
Van Winkle Hands-On Network Programming with C: Learn socket programming in C and write secure and optimized network code
CN114598532A (zh) 连接建立方法、装置、电子设备和存储介质
CN108769293B (zh) 一种ip地址解析方法及相关装置
CN107317869B (zh) 一种节点nat类型探测方法、装置以及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40036286

Country of ref document: HK

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant