CN115842802A - 一种网络连接ip地址选择方法及相关设备 - Google Patents
一种网络连接ip地址选择方法及相关设备 Download PDFInfo
- Publication number
- CN115842802A CN115842802A CN202110930337.2A CN202110930337A CN115842802A CN 115842802 A CN115842802 A CN 115842802A CN 202110930337 A CN202110930337 A CN 202110930337A CN 115842802 A CN115842802 A CN 115842802A
- Authority
- CN
- China
- Prior art keywords
- address
- connection
- network
- ipv4
- ipv6
- 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.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种网络连接IP地址选择方法及相关设备,涉及网络通信领域。该方法包括:判断网络环境是否同时支持IPv4和IPv6;解析网络请求的IP地址;在所述网络环境同时支持IPv4和IPv6时,将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中;根据第一变量和第二变量执行IP地址的选择策略。实现在用户进行网络请求时,准确快速地选择正确的IP地址进行连接,进而解决现有技术在选择IP地址进行网络连接时成功率低,并且造成资源浪费和耗时较长的问题。
Description
技术领域
本发明涉及网络通信领域,尤其涉及一种网络连接IP地址选择方法及相关设备。
背景技术
IP地址可以分为IPv4(Internet Protocol version 4,网际协议第4版)和IPv6(Internet Protocol version 6,网际协议第6版)两种,这两种IP地址的格式以及相关处理存在很大的差异,基于IPv4地址的网络为IPv4网络,基于IPv6地址的网络为IPv6网络。现有的网络环境越来越多的支持了IPv6网络,同时也存在一些仅支持IPv4网络的网络环境。
目前,对于网络请求来说,现有技术通常都是优先选择连接IPv4地址或是优先选择连接IPv6地址。由于相关规范要求支持IPv6的地址要同时支持IPv4地址,因此如果先尝试连接IPv4地址,则该IPv4地址总是可用的,从而导致IPv6地址得不到使用,降低用户体验;如果先尝试连接IPv6地址,则对于现网中大量只支持IPv4地址的网络而言,总是存在多次连接失败的情况,造成资源浪费。
发明内容
鉴于上述问题,本发明提供了一种网络连接IP地址选择方法及相关设备,解决了现有技术在选择IP地址进行网络连接时成功率低,并且造成资源浪费和耗时较长的问题。
为解决上述技术问题,第一方面,本发明提供了一种网络连接IP地址选择方法,该方法包括:
判断网络环境是否同时支持IPv4和IPv6;
解析网络请求的IP地址;
在所述网络环境同时支持IPv4和IPv6时,将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中,其中,所述IP地址包括至少一个所述IPv4地址和至少一个所述IPv6地址,所述连接信息包括成功信息和失败信息;
在所述第一变量连续存储的所述失败信息个数小于第一阈值,且所述第二变量连续存储的所述失败信息个数大于或等于第二阈值时,按照先所述IPv4地址后所述IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先所述IPv6地址后所述IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个所述IP地址连接成功时,停止所述网络连接的尝试。
可选的,所述判断网络环境是否同时支持IPv4和IPv6的步骤,包括:
在每次网络状况发生变化时,根据连接DNS服务器的结果判断所述网络环境是否同时支持IPv4和IPv6。
可选的,所述根据连接DNS服务器的结果判断所述网络环境是否同时支持IPv4和IPv6的步骤,包括:
创建IPv6链路来多次连接DNS服务器;
在连接失败的次数大于第三阈值时,判定所述网络环境仅支持IPv4;
在连接成功时,判定所述网络环境同时支持IPv4和IPv6。
可选的,在根据连接DNS服务器的结果判断所述网络环境是否同时支持IPv4和IPv6的步骤之后,方法还包括:
调用folly组件中的makeGuard函数进行多次关闭所述链路的操作,其中,所述folly组件为C++开源库。
可选的,所述解析网络请求的IP地址的步骤,包括:
在所述判断的结果显示所述网络环境只支持IPv4时,只解析出与所述网络请求对应的全部IPv4地址;
在所述判断的结果显示所述网络环境同时支持IPv4和IPv6时,解析出与所述网络请求对应的全部IPv4地址和全部IPv6地址;
可选的,所述将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中的步骤之前,所述方法还包括:
判断当前是否处于有网络的状态。
可选的,所述将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中的步骤,包括:
通过所述IP地址进行网络连接时,在当前连接与上次通过同一个所述IP地址连接的时间间隔小于或等于第四阈值时,不存储此次连接的所述连接信息,否则将所述连接信息分别存储到所述第一变量和所述第二变量中。
为了实现上述目的,根据本发明的第二方面,提供了一种网络连接IP地址装置,包括:
判断单元,用于判断网络环境是否同时支持IPv4和IPv6;
解析单元,用于解析网络请求的IP地址;
存储单元,在所述网络环境同时支持IPv4和IPv6时,将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中,其中,所述IP地址包括至少一个所述IPv4地址和至少一个所述IPv6地址,所述连接信息包括成功信息和失败信息;
连接单元,在所述第一变量连续存储的所述失败信息个数小于第一阈值,且所述第二变量连续存储的所述失败信息个数大于或等于第二阈值时,按照先所述IPv4地址后所述IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先所述IPv6地址后所述IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个所述IP地址连接成功时,停止所述网络连接的尝试。
为了实现上述目的,根据本发明的第三方面,提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述第一方面中任一项所述的网络连接IP地址选择方法。
为了实现上述目的,根据本发明的第四方面,提供了一种设备,所述设备包括至少一个处理器、以及与所述处理器连接的至少一个存储器;其中,所述处理器用于调用所述存储器中的程序指令,执行如第一方面中任意一项所述的网络连接IP地址选择方法。
借由上述技术方案,本发明提供了一种网络连接IP地址选择方法及相关设备,解决了现有技术在选择IP地址进行网络连接时成功率低,并且造成资源浪费和耗时较长的问题。本发明通过判断网络环境是否同时支持IPv4和IPv6;解析网络请求的IP地址;在所述网络环境同时支持IPv4和IPv6时,将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中;在所述第一变量连续存储的所述失败信息个数小于第一阈值,且所述第二变量连续存储的所述失败信息个数大于或等于第二阈值时,按照先所述IPv4地址后所述IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先所述IPv6地址后所述IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个所述IP地址连接成功时,停止所述网络连接的尝试,实现了网络连接IP地址的选择。在上述方案中,通过判断网络环境是否同时支持IPv4和IPv6的操作,得到网络环境对网络协议版本(IPv4和IPv6)的支持状况,以便后续步骤进行网络请求的IP地址解析;通过解析网络请求的IP地址的操作,可以相对于现有技术减少DNS解析的次数,提高效率,减少资源占用和错误率;通过在网络环境同时支持IPv4和IPv6时,将通过IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中的操作,可以得知当前网络对IPv6的支持是否较好;通过在第一变量连续存储的失败信息个数小于第一阈值,且第二变量连续存储的失败信息个数大于或等于第二阈值时,按照先IPv4地址后IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先IPv6地址后IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个IP地址连接成功时,停止网络连接的尝试的操作,能够提高网络连接的成功率,并尽快连接到网络请求的IP地址。上述方案能够实现在用户进行网络请求时,准确快速地选择正确的IP地址进行连接,进而解决现有技术在选择IP地址进行网络连接时成功率低,并且造成资源浪费和耗时较长的问题。
附图说明
通过阅读下文示例性实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出示例性实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本发明实施例一提供的一种网络连接IP地址选择方法的流程图;
图2为本发明实施例三提供的一种网络连接IP地址装置的示意性结构框图;
图3为本发明实施例五提供的一种设备的示意性结构框图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
实施例一
为了解决现有技术在选择IP地址进行网络连接时成功率低,并且造成资源浪费和耗时较长的问题。本发明实施例一提供了一种网络连接IP地址选择方法,如图1所示,该方法包括:
步骤101、判断网络环境是否同时支持IPv4和IPv6;
具体的,创建一个公网的DNS(Domain Name System,域名系统)的socketaddress对象和一个网络套接字,用以连接DNS服务器,连接完成后关闭连接,如果能够连接上DNS服务器,则说明当前网络环境是支持IPv4和IPv6的,而如果不能够连接上DNS服务器,则说明当前网络环境仅支持IPv4。
需要说明的是,IPv4是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署和使用的版本。IPv6是网际协议的最新版本,用作互联网的协议。用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进。通过步骤101可以得到网络环境对网络协议版本(IPv4和IPv6)的支持状况,以便后续步骤进行网络请求的IP地址解析。
示例性的,可以由以下代码创建一个公网的DNS的socketaddress对象:
SocketAddress dnsServer(“2000::”,80);
其中,“SocketAddress”是socketaddress对象的结构类型,“dnsServer”是socketaddress对象的名称,“(“2000::”,80)”是需要传入的两个参数,“2000::”是服务器的IPv6地址,“80”是服务器的端口号。
需要说明的是,上述代码是用于创建一个公网的DNS的socketaddress对象。
示例性的,可以由以下代码创建一个网络套接字:
folly::NetworkSocket socket=folly::netops::socket(pf,SOCK_DGRAM,IPPROTO_UDP);
其中,“folly::NetworkSocket”和“folly::netops::socket”是用于表示和创建网络套接字的函数,“pf”表示IP地址类型,“SOCK_DGRAM”表示数据报套接字/无连接的套接字,“IPPROTO_UDP”表示UDP传输协议。
需要说明的是,上述代码是用于创建一个网络套接字的,在上述代码中使用开源的folly组件提供的跨平台创建接口进行创建的,可以实现跨平台创建套接字的效果,因此上述代码可以适用于android、ios、mac等多个平台。
可选的,步骤101可以包括:在每次网络状况发生变化时,根据连接DNS服务器的结果判断网络环境是否同时支持IPv4和IPv6。
具体的,在每次网络状况发生变化时,创建一个公网的DNS的socketaddress对象和一个网络套接字,用以连接DNS服务器,连接完成后关闭连接,如果能够连接上DNS服务器,则说明当前网络环境是支持IPv4和IPv6的,而如果不能够连接上DNS服务器,则说明当前网络环境仅支持IPv4。
需要说明的是,网络环境关系到后续的优化策略,所以需要检测当前设备的网络环境对网络协议版本(IPv4和IPv6)的支持状况,现有技术通常是获取当前网络的状态信息,判断当前网络是出于移动网络(3G、4G、5G)还是连接的wifi网络,而对于wifi网络则记录wifi的BSSID信息和SSID信息,通过对这些信息进行记录从而能够知道当前出于何种网络,此种方法则需要记录网络信息并进行存储,同时还需要提供查询操作等功能,因此需要占用一定的内存和查找性能,在不同的网络使用同名wifi信息的情况下,就可能存在误判的情况,现有技术对于每一种网络都去检测当前的网络环境,并将检测结果存储下来,只有发现有新网络才进行检测,而对于历史网络则直接使用历史信息;而本实施例在每次网络状况发生变化时都进行一次网络环境信息的检测,从而不需要进行存储和查询,可以减少内存占用和查找性能的损耗,并减少误判的情况。本实施例对于网络系统相关的API使用了开源的folly库提供的跨平台组件,因此本实施例具备了多操作系统兼容的功能,一套代码则可以适用于android、ios、mac等多个平台。
可选的,前述可选的技术特征中根据连接DNS服务器的结果判断网络环境是否同时支持IPv4和IPv6的步骤,可以包括:创建IPv6链路来多次连接DNS服务器;在连接失败的次数大于第三阈值时,判定网络环境仅支持IPv4;在连接成功时,判定网络环境同时支持IPv4和IPv6。
其中,第三阈值可以由技术人员依经验进行设置。
具体的,在每次网络状况发生变化时,创建一个公网的DNS的socketaddress对象和一个网络套接字,用以多次连接DNS服务器,连接完成后关闭连接,如果能够连接上DNS服务器,则说明当前网络环境是支持IPv4和IPv6的,而如果连接失败的次数大于第三阈值,则说明当前网络环境仅支持IPv4。
需要说明的是,现有技术通常是通过连接一个IPv4或者IPv6的服务器IP地址来测试,如果能够连上则说明当前支持该版本的网络协议,如果不能够连上则说明不支持,现有技术需要服务器的支持,同时也会对服务器造成一定的压力,且会因网络环境不同而导致连接的耗时不同,二本实施例是通过UDP协议去连接公网的DNS服务器,只探测当前网络是否支持IPv6,如果是不支持IPv6的网络环境,那么其连接时会马上返回失败,耗时很短且稳定,如果是支持ipv6的网络环境,那么其会马上返回结果数据,速度很快耗时短且稳定。一方面,与DNS服务器连接的过程是通过UDP协议进行连接的,连接过程是不可靠传输;另一方面,网络状况通常是不稳定的,所以需要进行多次连接,在连接成功时不再进行连接,在连接失败的次数超过第三阈值时,也不再进行连接,上述可选的技术特征可以确保连接DNS服务器失败是由于网络不支持IPv6,减少误判的可能。
示例性的,将第三阈值设为4,如果连接DNS服务器的失败次数为5次时,则说明当前网络环境仅支持IPv4。
示例性的,连接DNS服务器的功能可以由以下代码实现:
do{result=connect(s,addr,addrlen);
}while(result<0&&errno==EINTR&&Trycount++<Count);
其中,“result”是连接的返回值,“errno”表示当前是否有错误码,“Trycount”是当前连接的失败次数,“Count”是第三阈值,do-while语句是一种后测试循环语句。
需要说明的是,上述代码用于实现连接DNS服务器的功能,如果是不支持IPv6的网络环境,那么其连接时会马上返回失败,耗时很短且稳定,如果是支持ipv6的网络环境,那么其会马上返回结果数据,速度很快耗时短且稳定。
可选的,在根据连接DNS服务器的结果判断网络环境是否同时支持IPv4和IPv6的步骤之后,方法还包括:调用folly组件中的makeGuard函数进行多次关闭链路的操作。
其中,folly组件为C++开源库。
具体的,使用了folly组件的makeGuard功能进行关闭链路的操作。
需要说明的是,folly组件的makeGuard功能和多次关闭能够确保关闭功能的代码一定能够执行,从而避免各种异常情况下链路没有关闭,从而造成泄漏,一旦存在泄露则极易于造成程序崩溃。
示例性的,上述关闭链路的方案可以由以下代码实现:
其中,“folly::makeGuard”用于实现folly组件的makeGuard功能,“folly::netops::close(socket)”用于执行具体的关闭链路的操作,“(ret<0&&errno==EINTR&&Trycount++<Count)”用于得到关闭链路是否成功的结果,do-while语句是一种后测试循环语句。
步骤102、解析网络请求的IP地址;
具体的,进行DNS解析获得网络请求对应的IP地址。
需要说明的是,DNS是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,通过步骤102可以得到用于后续步骤进行连接的IP地址。
可选的,在判断的结果显示网络环境只支持IPv4时,只解析出与网络请求对应的全部IPv4地址;在判断的结果显示网络环境同时支持IPv4和IPv6时,解析出与网络请求对应的全部IPv4地址和全部IPv6地址。
需要说明的是,现有技术在发送网络请求时,对于任何一个网络请求,都需要对域名进行解析,从而来获取其对应的IP地址,在进行DNS解析时,通常都是对域名解析时同时解析出全部的IPv4地址和全部的IPv6地址,这样就会导致DNS访问2次,从而造成DNS解析比较缓慢,也容易产生错误。本实施例在前述步骤的判断的结果显示网络环境只支持IPv4时,只解析出与网络请求对应的全部IPv4地址,在判断的结果显示网络环境同时支持IPv4和IPv6时,解析出与网络请求对应的全部IPv4地址和全部IPv6地址,可以相对于现有技术减少DNS解析的次数,提高效率,减少资源占用和错误率。
示例性的,可以由以下代码完成上述解析网络请求的IP地址的方案:
struct addrinfo hints;
memset(&hints,0,sizeof(hints));
hints.ai_socktype=SOCK_STREAM;
其中,“struct addrinfo hints;”用于传入参数信息,“memset(&hints,0,sizeof(hints));”用于对这个变量进行初始化为0,“hints.ai_socktype=SOCK_STREAM;”表示以流的方式传输,如果网络环境只支持IPv4,那么我们则传入hints.ai_family=AF_INET;表明值支持IPv4,那么只解析IPv4的地址,从而避免去获取IPv6的地址;如果网络环境支持ipv6,那么默认也是支持IPV4的,传入参数则是hints.ai_family=AF_UNSPEC;表明解析IPv4和IPv6的地址。
步骤103、在网络环境同时支持IPv4和IPv6时,将通过IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中;
其中,IP地址包括至少一个IPv4地址和至少一个IPv6地址,连接信息包括成功信息和失败信息。
具体的,第一变量和第二变量都是一个一个字节的整数数据,记录方式是循环记录,每次连接成功对变量设置一个bit位为0并将其左移动一位,每次都从最低位开始记录,每次连接失败则对变量设置一个bit位为1。
需要说明的是,对于同时支持IPV4和IPV6的网络环境来说,会存在当前虽然支持ipv6,但是其只是当前局部网络支持,而对于整个需要访问的服务器来说中间或者某些地方不支持,则会导致ipv6的访问失败,虽然依据步骤101发现网络环境支持IPv6,但是实际情况则可能更为复杂,因此可以依据在实际请求中,通过记录下IPv4和IPv6的连接情况,来辅助的判断当前网络环境下对IPV6的支持是否足够好,而判断依据本实施例通过连接进行判断,如果能够连接上当前的IP地址,则说明当前的IP地址连接是成功的,如果连接不上则说明当前的IP地址连接是失败的,而一个请求是具有连接、发送数据和接收数据这3个过程的,本实施例只选择连接过程作为当前IP是否可以连通的判断依据,主要是一个链路是否通畅则都是依据是否能够连上服务器,而对于发送数据和接收数据则可能也和服务器的处理有关系,所以本实施例能够较为准确地判断当前IP是否可以连通,进而可以得知当前网络对IPv6的支持是否较好。
示例性的,得到连接信息的操作可以由以下代码实现:
Bool setConnect(string ip,bool sucecss){};
其中,“Bool”表示返回值为布尔类型,“setConnect”是接口名,“string ip”表示传入一个当前连接的服务器的IP地址的字符串类型的参数,“bool sucecss”表示传入一个通过当前服务器的IP地址是否连接成功的连接信息的布尔类型的参数,具体的,连接成功则传入TRUE,连接失败则传入FALSE,在网络请求的连接事件中,连接成功或连接失败都调用上述接口来设置信息;布尔类型是计算机科学中的逻辑数据类型,以发明布尔代数的数学家乔治·布尔为名,它是只有两种值的原始类型,通常是真和假。
需要说明的是,上述代码用于得到连接信息。
可选的,在步骤103之前,本实施例还可以包括:判断当前是否处于有网络的状态。
需要说明的是,如果当前是一个无网络的状态,那么必然会导致所有连接失败,从而会对当前IP地址是否可以连通造成误判,上述可选的技术特征能够避免误判情况的发生。
可选的,通过IP地址进行网络连接时,在当前连接与上次通过同一个IP地址连接的时间间隔小于或等于第四阈值时,不存储此次连接的连接信息,否则将连接信息分别存储到第一变量和第二变量中。
其中,IP地址包括至少一个IPv4地址和至少一个IPv6地址,连接信息包括成功信息和失败信息,第四阈值不超过10秒。
需要说明的是,上述可选的技术特征可以避免因为网络波动而导致的连接失败,避免对当前IP地址是否可以连通造成误判。
示例性的,可以将第四阈值设为0.1秒至10秒。
步骤104、在第一变量连续存储的失败信息个数小于第一阈值,且第二变量连续存储的失败信息个数大于或等于第二阈值时,按照先IPv4地址后IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先IPv6地址后IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个IP地址连接成功时,停止网络连接的尝试。
示例性的,步骤104可以由以下具体方式实现:
将第一阈值和第二阈值都设定为3,那么如果第一变量中连续失败的记录少于3个,并且第二变量中连续失败的记录大于或等于3个,则将变量ban_v6设为TRUE,否则设为FALSE;将IP地址中的IPv4地址和IPv6地址分别存储,根据变量ban_v6的值设定变量pick_v6的值,具体的,变量ban_v6为TRUE的话则将变量pick_v6设为FALSE,变量ban_v6为FALSE的话则将变量pick_v6设为TRUE;将IPv4地址和IPv6地址排列到一个IP地址列表中,根据变量pick_v6的值设定IP地址列表中第一个是IPv4地址还是IPv6地址,具体的,如果变量pick_v6的值为TRUE,则将IP地址列表中第一个置为IPv4地址,如果变量pick_v6的值为FALSE,则将IP地址列表中第一个置为IPv6地址;IP地址列表中下一个IP地址的网络协议版本类型应与上一个不同,具体的,上一个是IPv4地址下一个则选取IPv6地址,上一个是IPv6地址下一个则选取IPv4地址,更具体的,根据变量pick_v6的值设定IP地址列表中第一个是IPv4地址还是IPv6地址后,将pick_v6的值取反,再根据变量pick_v6的值设定IP地址列表中下一个是IPv4地址还是IPv6地址,此以往后一直排列;如果IPv4地址取完或者IPv6地址取完,那么则将剩下的IP地址直接排序到列表最后面;IP地址列表排序完成后,按照排序顺序,依次取用其中的IP地址进行连接操作,有任意一个IP地址连接成功时,终止对后续IP地址的连接;其中,当ban_v6的值为TRUE时,表示当前网络对IPv6支持较好,当ban_v6的值为FALSE时,表示当前网络对IPv6支持较差。
需要说明的是,如果网络环境只支持IPV4,通过前述步骤102只会返回IPv4地址的IP地址列表,则可以随机选择等策略选择哪个IP地址与服务器建立连接;如果网络环境同时支持IPv4和IPv6时,才采用步骤104进行IP地址的选择策略;借由步骤103可以得到网络环境对IPv6支持情况,依此设定IP列表中第一个IP地址的版本类型,可以最大程度成功连接到IPv6地址,但由于网络环境多变且不稳定,当前网络环境可能与进行步骤103时的网络环境不同,也即当前对IPv6的支持不再较好,可能会导致IPv6地址的连接失败,因此本实施例交替进行IP地址的排列连接,可以避免网络环境不稳定而导致的多次IPv6连接的失败,能够提高网络连接的成功率,并尽快连接到网络请求的IP地址。
借由上述技术方案,本发明实施例一提供一种网络连接IP地址选择方法,对于现有技术通常都是优先选择连接IPv4地址或是优先选择连接IPv6地址。由于相关规范要求支持IPv6的地址要同时支持IPv4地址,因此如果先尝试连接IPv4地址,则该IPv4地址总是可用的,从而导致IPv6地址得不到使用,降低用户体验;如果先尝试连接IPv6地址,则对于现网中大量只支持IPv4地址的网络而言,总是存在多次连接失败的情况,造成资源浪费等问题。本发明通过判断网络环境是否同时支持IPv4和IPv6;解析网络请求的IP地址;在网络环境同时支持IPv4和IPv6时,将通过IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中;在第一变量连续存储的失败信息个数小于第一阈值,且第二变量连续存储的失败信息个数大于或等于第二阈值时,按照先IPv4地址后IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先IPv6地址后IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个IP地址连接成功时,停止网络连接的尝试,实现了网络连接IP地址的选择。在上述方案中,通过判断网络环境是否同时支持IPv4和IPv6的操作,得到网络环境对网络协议版本(IPv4和IPv6)的支持状况,以便后续步骤进行网络请求的IP地址解析;通过解析网络请求的IP地址的操作,可以相对于现有技术减少DNS解析的次数,提高效率,减少资源占用和错误率;通过在网络环境同时支持IPv4和IPv6时,将通过IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中的操作,可以得知当前网络对IPv6的支持是否较好;通过在第一变量连续存储的失败信息个数小于第一阈值,且第二变量连续存储的失败信息个数大于或等于第二阈值时,按照先IPv4地址后IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先IPv6地址后IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个IP地址连接成功时,停止网络连接的尝试的操作,能够提高网络连接的成功率,并尽快连接到网络请求的IP地址。上述方案能够实现在用户进行网络请求时,准确快速地选择正确的IP地址进行连接,进而解决现有技术在选择IP地址进行网络连接时成功率低,并且造成资源浪费和耗时较长的问题。
实施例二
进一步的,作为对前述图1所示方法的实现,本发明实施例二还提供了网络连接IP地址装置,用于对前述方法实施例一进行实现。该装置实施例与前述方法实施例一对应,为便于阅读,本装置实施例不再对前述方法实施例一中的细节内容进行逐一赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例一中的全部内容。如图2所示,该装置20包括:判断单元201,解析单元202,存储单元203,连接单元204,其中,
判断单元201,用于判断网络环境是否同时支持IPv4和IPv6;
解析单元202,用于解析网络请求的IP地址;
存储单元203,在网络环境同时支持IPv4和IPv6时,将通过IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中,其中,IP地址包括至少一个IPv4地址和至少一个IPv6地址,连接信息包括成功信息和失败信息;
连接单元204,在第一变量连续存储的失败信息个数小于第一阈值,且第二变量连续存储的失败信息个数大于或等于第二阈值时,按照先IPv4地址后IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先IPv6地址后IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个IP地址连接成功时,停止网络连接的尝试。
借由上述技术方案,本发明实施例二提供一种网络连接IP地址装置,对于现有技术通常都是优先选择连接IPv4地址或是优先选择连接IPv6地址。由于相关规范要求支持IPv6的地址要同时支持IPv4地址,因此如果先尝试连接IPv4地址,则该IPv4地址总是可用的,从而导致IPv6地址得不到使用,降低用户体验;如果先尝试连接IPv6地址,则对于现网中大量只支持IPv4地址的网络而言,总是存在多次连接失败的情况,造成资源浪费等问题。本发明通过判断网络环境是否同时支持IPv4和IPv6;解析网络请求的IP地址;在网络环境同时支持IPv4和IPv6时,将通过IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中;在第一变量连续存储的失败信息个数小于第一阈值,且第二变量连续存储的失败信息个数大于或等于第二阈值时,按照先IPv4地址后IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先IPv6地址后IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个IP地址连接成功时,停止网络连接的尝试,实现了网络连接IP地址的选择。在上述方案中,通过判断网络环境是否同时支持IPv4和IPv6的操作,得到网络环境对网络协议版本(IPv4和IPv6)的支持状况,以便后续步骤进行网络请求的IP地址解析;通过解析网络请求的IP地址的操作,可以相对于现有技术减少DNS解析的次数,提高效率,减少资源占用和错误率;通过在网络环境同时支持IPv4和IPv6时,将通过IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中的操作,可以得知当前网络对IPv6的支持是否较好;通过在第一变量连续存储的失败信息个数小于第一阈值,且第二变量连续存储的失败信息个数大于或等于第二阈值时,按照先IPv4地址后IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先IPv6地址后IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个IP地址连接成功时,停止网络连接的尝试的操作,能够提高网络连接的成功率,并尽快连接到网络请求的IP地址。上述方案能够实现在用户进行网络请求时,准确快速地选择正确的IP地址进行连接,进而解决现有技术在选择IP地址进行网络连接时成功率低,并且造成资源浪费和耗时较长的问题。
实施例三
本发明实施例三提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现上述网络连接IP地址选择方法。
实施例四
本发明实施例四提供了一种设备30,如图3所示,该设备包括至少一个处理器301、以及与处理器连接的至少一个存储器302;其中,处理器301用于调用存储器302中的程序指令,以执行实现上述网络连接IP地址选择方法。
借由上述发明实施例提供一种用于网络连接IP地址选择的方法及相关装置,对于现有技术通常都是优先选择连接IPv4地址或是优先选择连接IPv6地址。由于相关规范要求支持IPv6的地址要同时支持IPv4地址,因此如果先尝试连接IPv4地址,则该IPv4地址总是可用的,从而导致IPv6地址得不到使用,降低用户体验;如果先尝试连接IPv6地址,则对于现网中大量只支持IPv4地址的网络而言,总是存在多次连接失败的情况,造成资源浪费等问题。本发明通过判断网络环境是否同时支持IPv4和IPv6;解析网络请求的IP地址;在网络环境同时支持IPv4和IPv6时,将通过IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中;在第一变量连续存储的失败信息个数小于第一阈值,且第二变量连续存储的失败信息个数大于或等于第二阈值时,按照先IPv4地址后IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先IPv6地址后IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个IP地址连接成功时,停止网络连接的尝试,实现了网络连接IP地址的选择。在上述方案中,通过判断网络环境是否同时支持IPv4和IPv6的操作,得到网络环境对网络协议版本(IPv4和IPv6)的支持状况,以便后续步骤进行网络请求的IP地址解析;通过解析网络请求的IP地址的操作,可以相对于现有技术减少DNS解析的次数,提高效率,减少资源占用和错误率;通过在网络环境同时支持IPv4和IPv6时,将通过IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中的操作,可以得知当前网络对IPv6的支持是否较好;通过在第一变量连续存储的失败信息个数小于第一阈值,且第二变量连续存储的失败信息个数大于或等于第二阈值时,按照先IPv4地址后IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先IPv6地址后IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个IP地址连接成功时,停止网络连接的尝试的操作,能够提高网络连接的成功率,并尽快连接到网络请求的IP地址。上述方案能够实现在用户进行网络请求时,准确快速地选择正确的IP地址进行连接,进而解决现有技术在选择IP地址进行网络连接时成功率低,并且造成资源浪费和耗时较长的问题。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程流程管理设备的处理器以产生一个机器,使得通过计算机或其他可编程流程管理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
在一个典型的配置中,设备包括一个或多个处理器(CPU)、存储器和总线。设备还可以包括输入/输出接口、网络接口等。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种网络连接IP地址选择方法,其特征在于,包括:
判断网络环境是否同时支持IPv4和IPv6;
解析网络请求的IP地址;
在所述网络环境同时支持IPv4和IPv6时,将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中,其中,所述IP地址包括至少一个所述IPv4地址和至少一个所述IPv6地址,所述连接信息包括成功信息和失败信息;
在所述第一变量连续存储的所述失败信息个数小于第一阈值,且所述第二变量连续存储的所述失败信息个数大于或等于第二阈值时,按照先所述IPv4地址后所述IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先所述IPv6地址后所述IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个所述IP地址连接成功时,停止所述网络连接的尝试。
2.根据权利要求1所述的方法,其特征在于,
所述判断网络环境是否同时支持IPv4和IPv6的步骤,包括:
在每次网络状况发生变化时,根据连接DNS服务器的结果判断所述网络环境是否同时支持IPv4和IPv6。
3.根据权利要求2所述的方法,其特征在于,
所述根据连接DNS服务器的结果判断所述网络环境是否同时支持IPv4和IPv6的步骤,包括:
创建IPv6链路来多次连接DNS服务器;
在连接失败的次数大于第三阈值时,判定所述网络环境仅支持IPv4;
在连接成功时,判定所述网络环境同时支持IPv4和IPv6。
4.根据权利要求3所述的方法,其特征在于,
在根据连接DNS服务器的结果判断所述网络环境是否同时支持IPv4和IPv6的步骤之后,方法还包括:
调用folly组件中的makeGuard函数进行多次关闭所述链路的操作,其中,所述folly组件为C++开源库。
5.根据权利要求1所述的方法,其特征在于,
所述解析网络请求的IP地址的步骤,包括:
在所述判断的结果显示所述网络环境只支持IPv4时,只解析出与所述网络请求对应的全部IPv4地址;
在所述判断的结果显示所述网络环境同时支持IPv4和IPv6时,解析出与所述网络请求对应的全部IPv4地址和全部IPv6地址。
6.根据权利要求1所述的方法,其特征在于,
所述将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中的步骤之前,所述方法还包括:
判断当前是否处于有网络的状态。
7.根据权利要求1所述的方法,其特征在于,
所述将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中的步骤,包括:
通过所述IP地址进行网络连接时,在当前连接与上次通过同一个所述IP地址连接的时间间隔小于或等于第四阈值时,不存储此次连接的所述连接信息,否则将所述连接信息分别存储到所述第一变量和所述第二变量中。
8.一种网络连接IP地址选择装置,其特征在于,包括:
判断单元,用于判断网络环境是否同时支持IPv4和IPv6;
解析单元,用于解析网络请求的IP地址;
存储单元,在所述网络环境同时支持IPv4和IPv6时,将通过所述IP地址中的IPv4地址和IPv6地址进行网络连接的连接信息,分别存储到第一变量和第二变量中,其中,所述IP地址包括至少一个所述IPv4地址和至少一个所述IPv6地址,所述连接信息包括成功信息和失败信息;
连接单元,在所述第一变量连续存储的所述失败信息个数小于第一阈值,且所述第二变量连续存储的所述失败信息个数大于或等于第二阈值时,按照先所述IPv4地址后所述IPv6地址依次交替的顺序,进行网络连接的尝试,否则按照先所述IPv6地址后所述IPv4地址依次交替的顺序,进行网络连接的尝试,在通过任意一个所述IP地址连接成功时,停止所述网络连接的尝试。
9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如权利要求1至权利要求7中任一项所述的网络连接IP地址选择方法。
10.一种设备,其特征在于,所述设备包括至少一个处理器、以及与所述处理器连接的至少一个存储器;其中,所述处理器用于调用所述存储器中的程序指令,执行如权利要求1至权利要求7中任一项所述的网络连接IP地址选择方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110930337.2A CN115842802A (zh) | 2021-08-13 | 2021-08-13 | 一种网络连接ip地址选择方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110930337.2A CN115842802A (zh) | 2021-08-13 | 2021-08-13 | 一种网络连接ip地址选择方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115842802A true CN115842802A (zh) | 2023-03-24 |
Family
ID=85574062
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110930337.2A Pending CN115842802A (zh) | 2021-08-13 | 2021-08-13 | 一种网络连接ip地址选择方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115842802A (zh) |
-
2021
- 2021-08-13 CN CN202110930337.2A patent/CN115842802A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105808399B (zh) | 一种远程调试的方法和装置 | |
CN108924005B (zh) | 网络检测方法、网络检测装置、介质和设备 | |
CN106681891A (zh) | 一种Java应用系统中调整日志级别的方法及装置 | |
CN109873737B (zh) | 一种测试方法及装置 | |
CN108062235B (zh) | 数据处理方法及装置 | |
CN112422361A (zh) | 一种交换机测试方法、设备及介质 | |
CN106373616A (zh) | 一种检测随机存储器故障的方法、装置和网络处理器 | |
US11770460B2 (en) | Method and system for sharing multi-protocol port, and server | |
CN112181830B (zh) | 内存泄露的检测方法、装置、终端及介质 | |
CN112559565A (zh) | 一种异常检测方法、系统及装置 | |
CN112131086A (zh) | 一种应用服务器的性能调优方法、装置及设备 | |
CN115842802A (zh) | 一种网络连接ip地址选择方法及相关设备 | |
CN110784364B (zh) | 一种数据监测方法、装置、存储介质及终端 | |
CN111427777A (zh) | 一种sol测试的方法、系统、设备以及介质 | |
CN114979236B (zh) | 数据传输方法、装置、存储介质以及电子设备 | |
US20220086693A1 (en) | Packet flow description information deployment management method, device, and system | |
CN111309402A (zh) | 数据监测及针对应用程序的处理方法、装置及设备 | |
CN113141376B (zh) | 一种恶意ip扫描检测方法、装置、电子设备及存储介质 | |
CN113271235B (zh) | 网络流量的模糊测试方法、装置、存储介质及处理器 | |
CN112817536B (zh) | 一种数据包的捕获方法及相关装置 | |
CN118041824B (zh) | 测试旁路镜像功能的方法、装置、电子设备及存储介质 | |
CN113630422B (zh) | 一种基于边缘节点的网络安全数据处理方法和系统 | |
CN117591393A (zh) | 一种基于http请求的进程测试的方法及设备 | |
CN113721916B (zh) | 一种操作系统的编译方法、装置、设备及可读存储介质 | |
CN118503076A (zh) | 一种应用测试方法、服务器及装置 |
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 |