CN113014447A - 带宽测量方法及装置 - Google Patents
带宽测量方法及装置 Download PDFInfo
- Publication number
- CN113014447A CN113014447A CN202110197273.XA CN202110197273A CN113014447A CN 113014447 A CN113014447 A CN 113014447A CN 202110197273 A CN202110197273 A CN 202110197273A CN 113014447 A CN113014447 A CN 113014447A
- Authority
- CN
- China
- Prior art keywords
- thread
- client device
- port
- receiving
- sending
- 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.)
- Granted
Links
Images
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/0876—Network utilisation, e.g. volume of load or congestion level
- H04L43/0894—Packet rate
-
- 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/0852—Delays
-
- 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/50—Testing arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Environmental & Geological Engineering (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种带宽测量方法及装置。其中,该方法包括:客户端设备建立发送线程和接收线程,其中,发送线程对应的发送端口和接收线程对应的接收端口采用动态分配的方式分配传输和控制端口,不占用固定的UDP探包接收端口和TCP控制端口;客户端设备通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列;客户端设备根据第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。本发明解决了现有技术中的带宽测量方法的测量时间长、测量效率低的技术问题。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种带宽测量方法及装置。
背景技术
为了测量带宽,目前常用的方法是Pathchirp算法,Pathchirp算法通过在两个客户端设备之间发送探包长度相等、时间间隔呈指数级缩短的探包序列,并在接收端统计区段(excursion),根据excursion包含的接收延时信息预测两个客户端设备之间的可用带宽。
但是,目前带宽测量方法只能在一个客户端设备测量结束之后,再开始在另一个客户端设备上进行测量,导致测量时间长、测量效率低。
针对现有技术中的带宽测量方法的测量时间长、测量效率低的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种带宽测量方法及装置,以至少解决现有技术中的带宽测量方法的测量时间长、测量效率低的技术问题。
根据本发明实施例的一个方面,提供了一种带宽测量方法,包括:客户端设备建立发送线程和接收线程,其中,发送线程对应的发送端口和接收线程对应的接收端口采用动态分配的方式分配传输和控制端口,不占用固定的UDP探包接收端口和TCP控制端口;客户端设备通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列;客户端设备根据第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。
进一步地,客户端设备建立接收线程包括:客户端设备根据预设算法,随机分配第一端口;客户端设备利用第一端口的端口号,创建控制会话和接收套接字;客户端设备根据第一端口的端口号、控制会话和接收套接字,建立接收线程。
进一步地,在客户端设备利用第一端口的端口号,创建控制会话和接收套接字之后,客户端设备发送第一端口的端口号。
进一步地,客户端设备建立发送线程包括:客户端设备在预设时间段内接收第二端口的端口号,其中,第二端口为根据预设算法,随机分配的端口;客户端设备利用第二端口的端口号,创建发送套接字;客户端设备根据第二端口的端口号和发送套接字,建立发送线程。
进一步地,在客户端设备建立发送线程和接收线程之前,上述方法还包括:客户端设备利用预设端口,建立通信连接;客户端设备通过预设端口接收连接请求,其中,连接请求用于表征请求客户端设备发送第一探包序列,以及请求客户端设备接收第二探包序列。
进一步地,在客户端设备建立发送线程和接收线程之后,客户端设备关闭通信连接。
进一步地,在客户端设备通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列之前,上述方法还包括:客户端设备获取操作系统的类型;在操作系统的类型为预设类型的情况下,客户端设备利用预设计时器,通过发送线程发送第一探包序列。
进一步地,客户端设备利用预设计时器,通过发送线程发送第一探包序列包括:客户端设备发送第一探包序列中的当前探包,并获取预设计时器的初始计数值;客户端设备获取预设计时器的当前计数值;客户端设备判断当前计数值与初始计数值的差值是否大于等于预设数值;客户端设备如果当前计数值与初始计数值的差值大于等于预设数值,则发送第一探包序列中的下一个探包。
进一步地,在客户端设备利用预设计时器,通过发送线程发送第一探包序列之前,上述方法还包括:客户端设备判断操作系统是否存在预设计时器;如果操作系统存在预设计时器,则客户端设备利用预设计时器,通过发送线程发送第一探包序列。
进一步地,在客户端设备建立发送线程和接收线程之前,加载预设动态库,并在加载预设动态库之后,开始执行客户端设备建立发送线程和接收线程的步骤。
根据本发明实施例的另一方面,还提供了一种带宽测量装置,包括:建立模块,用于建立发送线程和接收线程,其中,发送线程对应的发送端口和接收线程对应的接收端口采用动态分配的方式分配传输和控制端口,不占用固定的UDP探包接收端口和TCP控制端口;通信模块,用于通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列;处理模块,用于根据第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。
进一步地,建立模块包括:分配子模块,用于根据预设算法,随机分配第一端口;第一创建子模块,用于利用第一端口的端口号,创建控制会话和接收套接字;第一建立子模块,用于根据第一端口的端口号、控制会话和接收套接字,建立发送线程。
进一步地,建立模块包括:接收子模块,用于在预设时间段内接收第二端口的端口号,其中,根据预设算法,随机分配第二端口;第二创建子模块,用于利用第二端口的端口号,创建发送套接字;第二建立子模块,用于根据第二端口的端口号和发送套接字,建立接收线程。
进一步地,上述装置还包括:获取模块,用于获取操作系统的类型;通信模块还用于在操作系统的类型为预设类型的情况下,利用预设计时器,通过发送线程发送第一探包序列。
进一步地,上述装置还包括:加载模块,用于加载预设动态库;执行模块,用于在加载预设动态库之后,开始执行建立模块的功能。
根据本发明实施例的另一方面,还提供了一种存储介质,存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行上述实施例中的带宽测量方法。
根据本发明实施例的另一方面,还提供了一种处理器,处理器用于运行程序,其中,程序运行时执行上述实施例中的带宽测量方法。
在本发明实施例中,客户端设备建立发送线程和接收线程,通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列,根据第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。容易注意到的是,由于客户端设备可以建立发送线程和接收线程,而且,发送线程对应的发送端口和接收线程对应的接收端口采用动态分配的方式分配传输和控制端口,不占用固定的UDP探包接收端口和TCP控制端口,在通过发送线程发送第一探包序列的同时通过接收线程接收第二探包序列,从而实现并行测量带宽的目的,解决了现有技术中的带宽测量方法的测量时间长、测量效率低的技术问题,达到了缩短测量时间、提高测量效率的效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种带宽测量方法的流程图;
图2是根据本发明实施例的一种可选的并行带宽测量方法的流程图;
图3是根据本发明实施例的一种可选的Windows系统精确延时控制方法的流程图;以及
图4是根据本发明实施例的一种带宽测量装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,针对本发明实施例中出现的技术名词进行解释如下:
Pathchirp算法:一种通过在收、发两台主机直接传输等长度、时间间隔呈指数级缩短的探包序列,在接收端根据根据序列的接收时延来估算两台主机之间单向可用带宽的算法。单组探包序列(chirp)计算带宽的公式是:其中,向量Δ标识chirp内各探包之间的发送间隔(即第k+1个探包的发送时标减去第k个探包的发送时标),向量E表示发送每个探包所占的带宽估计值,标量D表示根据本轮chirp测量带宽的结果,单位为bps。
向量E和Δ的长度都比探包数N少1,其中,Ek可以分为下列三种情况分别计算:第k个探包的传输时间在1个excursion内,而且这个excursion不在本chirp的末尾,则Ek取第k个包的长度除以Δk;第k个探包的传输时间在1个excursion内,但这个excursion位于本chirp的末尾,因而并不完整,Ek取本excursion内的第一个探包的长度除以其发送时标间隔E1/Δ1;第k个探包的传输时间不属于任何excursion,选择与之相连、都不属于任何excursion、最早的一个探包i,以Ei/Δi作为这些探包的Ek。
探包传输时延向量q的某一段子序列必须同时满足下列三个条件,才能构成一个excursion:该子序列存在一个元素q[i]的时延大于0;对i以后的元素按下列规则循环,找到子序列q[i]~q[j]:子序列q[i]~q[j]的长度大于阈值L(例如取5)。
带宽预测的运算完全在接收端进行,并且只有在每组chirp接收完整之后才能分析计算。
chirp:根据Pathchirp算法进行一次可用带宽测量时传递的探包序列。每组chirp由若干个探包组成,探包之间的发送时间间隔呈指数级缩短。
excursion:依照Pathchirp算法,在接收端统计chirp序列的接收时延,将接收时延过零且回零或过零且持续增长的子序列称为一个excursion。excursion及其接收时延是计算可用带宽的重要依据。
可用带宽:两台主机之间单向的最大可用发送带宽。该带宽由测量接收端在收到完整的chirp之后经计算获得。
实施例1
根据本发明实施例,提供了一种带宽测量方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的一种带宽测量方法的流程图,如图1所示,该方法包括如下步骤:
步骤S102,客户端设备建立发送线程和接收线程。
具体地,上述的客户端设备可以是计算机设备、智能手机(包括:Android手机、IOS手机)、IPAD、平板电脑、掌上电脑等,本发明对此不作具体限定;上述的发送线程和接收线程可以Pathchirp的发送线程和接收线程,建立的线程数量可以是一个也可以是多个,在对测量精度要求不高的情况下,客户端设备可以建立多个发送线程和多个接收线程。
在现有技术中,客户端设备通过固定端口(UDP(用户数据报协议,是UserDatagram Protocol的简称)探包接收端口和TCP(传输控制协议,是Transmission ControlProtocol的简称)控制端口)接收探包序列,导致同一个客户端设备在同一时刻只能运行发送线程或接收线程,无法实现并行测量带宽。为了并行测量带宽的目的,在本发明实施例中,接收线程对应的接收端口和发送线程对应的发送端口可以采用动态分配的方式分配传输和控制端口,不再占用固定的UDP探包接收端口和TCP控制端口。
步骤S104,客户端设备通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列。
步骤S106,客户端设备根据第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。
具体地,上述的第一带宽可以是上行带宽,即客户端设备发送数据的带宽,上述的第二带宽可以是下线带宽,即客户端设备接收数据的带宽。
在一种可选的方案中,当需要进行带宽测量时,客户端设备A可以建立一个发送线程和一个接收线程,两个线程可以并行运行,客户端设备A通过发送线程发送第一探包序列至客户端设备B,同时,可以通过接收线程接收客户端设备C发送的第二探包序列,客户端设备B在接收到第一探包序列之后,可以通过Pathchirp算法,根据第一探包序列中多个探包的时间间隔得到客户端设备A的上行带宽的测量值,客户端涉笔A在接收到第二探包序列之后,可以通过Pathchirp算法,根据第二探包序列中多个探包的时间间隔得到客户端设备A的下行带宽的测量值,从而是实现并行测量带宽的目的。
需要说明的是,客户端设备A也可以在向客户端设备B发送第一探包序列的同时,接收客户端设备B发送的第二探包序列,此时,需要在客户端设备B上建立发送线程和接收线程。
根据本发明上述实施例,客户端设备建立发送线程和接收线程,通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列,根据第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。容易注意到的是,由于客户端设备可以建立发送线程和接收线程,而且,发送线程对应的发送端口和接收线程对应的接收端口采用动态分配的方式分配传输和控制端口,不占用固定的UDP探包接收端口和TCP控制端口,在通过发送线程发送第一探包序列的同时通过接收线程接收第二探包序列,从而实现并行测量带宽的目的,解决了现有技术中的带宽测量方法的测量时间长、测量效率低的技术问题,达到了缩短测量时间、提高测量效率的效果。
可选地,在本发明上述实施例中,步骤S102,客户端设备建立接收线程包括:
步骤S1021,客户端设备根据预设算法,随机分配第一端口。
具体地,上述的预设算法可以是动态分配端口的算法,本发明对此不作具体限定;上述的第一端口可以是客户端设备作为发送端的传输和控制端口。
步骤S1022,客户端设备利用第一端口的端口号,创建控制会话和接收套接字。
具体地,上述的控制会话可以是TCP控制会话,上述的接收套接字可以是UDP接收套接字。
步骤S1023,客户端设备根据第一端口的端口号、控制会话和接收套接字,建立接收线程。
在一种可选的方案中,当需要客户端设备A接收客户端设备C发送的第二探包序列时,客户端设备A可以接收到客户端设备C发送的连接请求,请求客户端设备A作为接收端,客户端设备A可以采用随机端口(即上述的第一端口的端口号)创建本地的TCP控制会话和UDP接收套接字,然后启动一个PathChirp接收线程。
可选地,在本发明上述实施例中,在步骤S1022,客户端设备利用第一端口的端口号,创建控制会话和接收套接字之后,该方法还包括:步骤S1024,客户端设备发送第一端口的端口号。
在一种可选的方案中,在客户端设备A采用随机端口(即上述的第一端口的端口号)创建本地的TCP控制会话和UDP接收套接字之后,可以获取TCP和UDP的端口号(即上述的第一端口的端口号),发送给客户端设备C,然后启动一个PathChirp接收线程。
可选地,在本发明上述实施例中,步骤S102,客户端设备建立发送线程包括:
步骤S1025,客户端设备在预设时间段内接收第二端口的端口号,其中,第二端口为根据预设算法,随机分配的端口。
具体地,上述的预设时间段可以是用户根据需要预先设定的超时时间,在超时时间之后未接收到第二端口的端口号,则确定客户端设备并未发送第二端口的端口号。
步骤S1026,客户端设备利用第二端口的端口号,创建发送套接字。
步骤S1027,客户端设备根据第二端口的端口号和发送套接字,建立发送线程。
在一种可选的方案中,当需要客户端设备A向客户端设备B发送第一探包序列时,客户端设备A可以接收到客户端设备B发送的连接请求,请求客户端设备A作为发送端,客户端设备A可以超时接收客户端设备B返回的TCP和UDP的端口号(即上述的第二端口的端口号),根据这些端口号创建发送套接字,并启动一个PathChirp发送线程。
可选地,在本发明上述实施例中,在步骤S102,客户端设备建立发送线程和接收线程之前,该方法还包括:
步骤S108,客户端设备利用预设端口,建立通信连接。
具体地,上述的预设端口可以是TCP联络端口。
步骤S110,客户端设备通过预设端口接收连接请求,其中,连接请求用于表征请求客户端设备发送第一探包序列,以及请求客户端设备接收第二探包序列。
在一种可选的方案中,可以占用一个TCP联络端口在客户端设备A和客户端设备B、客户端设备A和客户端设备C之间建立TCP短连接(即上述的通信连接),通过TCP短连接可以传输动态端口号、测量参数等信息,可以通过一个联络线程实现。
可选地,在本发明上述实施例中,在步骤S102,客户端设备建立发送线程和接收线程之后,该方法还包括:
步骤S112,客户端设备关闭通信连接。
在一种可选的方案中,客户端设备A在建立发送线程和接收线程之后,可以关闭通信连接,即关闭TCP短连接。
可选地,在本发明上述实施例中,在步骤S104,客户端设备通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列之前,该方法还包括:
步骤S114,客户端设备获取操作系统的类型。
步骤S116,在操作系统的类型为预设类型的情况下,客户端设备利用预设计时器,通过发送线程发送第一探包序列。
具体地,上述的预设类型可以是Windows操作系统,相对于linux系统能够实现10μs级的延时,Windows系统的常规延时函数只能保证10ms级别的延时控制,为了实现相同量程的带宽测量,Windows系统进行带宽测量需要发送更大(增加3个数量级)的探包,不具备可操作性;上述的预设计时器可以是通过调用QueryPerformanceFrequency、QueryPerformanceCounter系列Windows API函数的高精度计时器,从而满足10μs级的延时,实现在Windows平台测量可用带宽。
可选地,在本发明上述实施例中,步骤S116,客户端设备利用预设计时器,通过发送线程发送第一探包序列包括:
步骤S1162,客户端设备发送第一探包序列中的当前探包,并获取预设计时器的初始计数值。
步骤S1164,客户端设备获取预设计时器的当前计数值。
步骤S1166,客户端设备判断当前计数值与初始计数值的差值是否大于等于预设数值。
具体地,上述的预设数值可以是测量需要预先设置的各探包之间的发送时间间隔对应的计时器的计数值。
步骤S1168,客户端设备如果当前计数值与初始计数值的差值大于等于预设数值,则发送第一探包序列中的下一个探包。
在一种可选的方案中,客户端设备A在通过发送线程发送第一探包序列的过程中,在每个探包发送的同时,可以获取高精度计时器的计数值ts,作为初始计数值,并实时获取高精度计时器的当前计数值te,将当前计数值te与初始计数值ts进行比较,如果当前计数值te与初始计数值ts的差值大于等于预设数值cnt,即te-ts≥cnt,则确定发送时间间隔达到预设时间间隔,可以发送下一个探包至客户端设备B。
需要说明的是,上述方法采用了轮训机制,由于Windows系统不是实时操作系统,如果切换线程的上下文,延时控制仍为10ms级别,为了保证微妙级延时控制,必须保持当前线程连续运行。
可选地,在本发明上述实施例中,在步骤S116,客户端设备利用预设计时器,通过发送线程发送第一探包序列之前,该方法还包括:
步骤S118,客户端设备判断操作系统是否存在预设计时器。
步骤S120,如果操作系统存在预设计时器,则客户端设备利用预设计时器,通过发送线程发送第一探包序列。
在一种可选的方案中,在利用高精度计时器,通过发送线程进行第一探包序列之前,客户端设备A首先需要判断当前操作系统是否存在高精度计时器,即客户端A是否支持高精度计时器,如果当前操作系统存在高精度计时器,即客户端设备A支持高精度计时器,则利用高精度计时器,通过发送线程进行第一探包序列;如果当前操作系统不存在高精度计时器,即客户端设备A不支持高精度计时器,则提示用户客户端设备A不支持精确延时控制功能。
可选地,在本发明上述实施例中,在步骤S102,客户端设备建立发送线程和接收线程之前,该方法还包括:步骤S122,加载预设动态库,并在加载预设动态库之后,开始执行步骤S102,客户端设备建立发送线程和接收线程。
具体地,上述的预设动态库可以是存储有上述的带宽测量方法的代码的动态库。
需要说明的是,随着移动设备的普及,带宽测量在手机和平板电脑也有移植的需求,可执行文件虽然已是二进制机器码,但难以直接移植到Android等操作系统中,以Android为例,用C/C++开发的可执行文件不能直接运行。而且,虽然java便于开发Android系统的APK,但是,java开发的代码不能在linux系统复用。考虑到动态库也是二进制可执行模块,又易于被用不同语言开发的应用程序所调用,因此,可以通过动态库实现PathChirp算法的跨平台应用。
在一种可选的方案中,可以将上述的带宽测量方法的代码写入动态库,当客户端设备A为Android系统的设备时,Android系统的应用程序通过调用动态库提供的导出函数,开始执行上述带宽测量方法的代码,实现与其他操作系统的客户端设备B和C进行基于Pathchirp算法的带宽测量,进一步拓展了上述的带宽测量方法的应用空间。
图2是根据本发明实施例的一种可选的并行带宽测量方法的流程图,图3是根据本发明实施例的一种可选的Windows系统精确延时控制方法的流程图,下面结合图2和图3对本发明一种优选的实施例进行详细说明。
如图2所示,并行带宽测量方法可以包括如下步骤:
步骤S21,在联络端口创建tcp server并侦听。
步骤S22,接收到远程客户端设备的tcp client连接。
可选地,本地客户端设备上运行联络线程,在联络端口开始侦听TCP连接请求,当接收到远程客户端设备的tcp client连接时,对接收到的请求是否合法进行判断。
步骤S23,判断是否请求本地客户端设备运行接收端。
可选地,判断是否请求本地客户端接收第二探包序列,如果是,则进入步骤S24,如果否,则进入步骤S27。
步骤S24,创建接收端,创建TCP控制会话和UDP接收套接字。
步骤S25,向远程客户端设备返回TCP和UDP会话的端口号。
步骤S26,运行接收线程。
可选地,当确定接受到的请求为请求本地客户端接收第二探包序列时,本地客户端设备可以采用采用随机端口创建本地的TCP控制会话和UDP接收套接字,然后获取TCP和UDP的端口号发给远端主机,最后启动一个PathChirp接收线程,并进入步骤S210。
步骤S27,判断是否请求本地客户端设备运行发送端。
可选地,判断是否请求本地客户端发送第一探包序列,如果是,则进入步骤S28,如果否,则确定远程客户端设备发送的请求为非法请求,进入步骤S210。
步骤S28,判断是否超时接收到远程客户端设备发送TCP和UDP会话的端口号。
可选地,判断是否在超时时间内接收到远程客户端设备发送TCP和UDP会话的端口号,如果是,则进入步骤S29;如果否,则进入步骤S210,关闭远程客户端设备的tcp client连接。
步骤S29,运行发送线程。
可选地,当确定接受到的请求为请求本地客户端发送第一探包序列时,本地客户端设备可以超时接收远端发回的TCP和UDP的端口号,根据这些端口号创建发送端的套接字,启动一个PathChirp发送线程,并进入步骤S210。
步骤S210,关闭远端的tcp client连接。
可选地,在本地客户端设备启动发送线程和接收线程之后,可以关闭远程客户端设备的tcp client连接,并进入下一轮循环,返回步骤S22。
如图3所示,Windows系统精确延时控制方法可以包括如下步骤:
步骤S31,获取延时微秒数cnt。
可选地,可以获取各探包的发送时间间隔的计数cnt。
步骤S32,判断是否支持高精度时钟。
可选地,判断当前操作系统是否支持高精度时钟,即是否存在高精度时钟,如果是,则进入步骤S33;如果否,则进入步骤S36。
步骤S33,读取起始的高精度时钟计数ts。
可选地,当一个探包被发送时,记录高精度时钟的计数,即读取起始的高精度时钟计数ts。
步骤S34,读取当前的高精度时钟计数te。
可选地,在一个探包被发送之后,可以实时记录高精度时钟的计数,即读取当前的高精度时钟计数te。
步骤S35,判断是否te-ts≥cnt。
可选地,如果te-ts≥cnt,则确定到达发送时间间隔,可以发送下一个探包;如果te-ts<cnt,则确定未到达发送时间间隔,返回步骤S34。
步骤S36,提示系统不支持精确延时。
可选地,如果当前操作系统不支持高精度时钟,即不存在高精度时钟,则可以显示提示信息,提示用户该系统不支持精确延时,无法达到微秒级的延时控制。
通过上述方案,可以有效解决Pathchirp算法在应用中并发性和移植性差的问题,通过动态端口结合多线程实现并发带宽测量,并在Windows平台实现微秒级延时控制,而且3)将带宽测量程序编译为动态库提高可移植性。
实施例2
根据本发明实施例,提供了一种带宽测量装置的实施例。
图4是根据本发明实施例的一种带宽测量装置的示意图,如图4所示,该装置包括:
建立模块41,用于建立发送线程和接收线程。
具体地,上述的客户端设备可以是计算机设备、智能手机(包括:Android手机、IOS手机)、IPAD、平板电脑、掌上电脑等,本发明对此不作具体限定;上述的发送线程和接收线程可以Pathchirp的发送线程和接收线程,建立的线程数量可以是一个也可以是多个,在对测量精度要求不高的情况下,客户端设备可以建立多个发送线程和多个接收线程。
在现有技术中,客户端设备通过固定端口(UDP(用户数据报协议,是UserDatagram Protocol的简称)探包接收端口和TCP(传输控制协议,是Transmission ControlProtocol的简称)控制端口)接收探包序列,导致同一个客户端设备在同一时刻只能运行发送线程或接收线程,无法实现并行测量带宽。为了并行测量带宽的目的,在本发明实施例中,接收线程对应的接收端口和发送线程对应的发送端口可以采用动态分配的方式分配传输和控制端口,不再占用固定的UDP探包接收端口和TCP控制端口。
通信模块43,用于通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列。
处理模块45,用于根据第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。
具体地,上述的第一带宽可以是上行带宽,即客户端设备发送数据的带宽,上述的第二带宽可以是下线带宽,即客户端设备接收数据的带宽。
在一种可选的方案中,当需要进行带宽测量时,客户端设备A可以建立一个发送线程和一个接收线程,两个线程可以并行运行,客户端设备A通过发送线程发送第一探包序列至客户端设备B,同时,可以通过接收线程接收客户端设备C发送的第二探包序列,客户端设备B在接收到第一探包序列之后,可以通过Pathchirp算法,根据第一探包序列中多个探包的时间间隔得到客户端设备A的上行带宽的测量值,客户端涉笔A在接收到第二探包序列之后,可以通过Pathchirp算法,根据第二探包序列中多个探包的时间间隔得到客户端设备A的下行带宽的测量值,从而是实现并行测量带宽的目的。
需要说明的是,客户端设备A也可以在向客户端设备B发送第一探包序列的同时,接收客户端设备B发送的第二探包序列,此时,需要在客户端设备B上建立发送线程和接收线程。
根据本发明上述实施例,客户端设备建立发送线程和接收线程,通过发送线程发送第一探包序列,并通过接收线程接收第二探包序列,根据第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。容易注意到的是,由于客户端设备可以建立发送线程和接收线程,而且,发送线程对应的发送端口和接收线程对应的接收端口采用动态分配的方式分配传输和控制端口,不占用固定的UDP探包接收端口和TCP控制端口,在通过发送线程发送第一探包序列的同时通过接收线程接收第二探包序列,从而实现并行测量带宽的目的,解决了现有技术中的带宽测量方法的测量时间长、测量效率低的技术问题,达到了缩短测量时间、提高测量效率的效果。
可选地,在本发明上述实施例中,建立模块41包括:
分配子模块,用于根据预设算法,随机分配第一端口。
具体地,上述的预设算法可以是动态分配端口的算法,本发明对此不作具体限定;上述的第一端口可以是客户端设备作为发送端的传输和控制端口。
第一创建子模块,用于利用第一端口的端口号,创建控制会话和接收套接字。
具体地,上述的控制会话可以是TCP控制会话,上述的接收套接字可以是UDP接收套接字。
第一建立子模块,用于根据第一端口的端口号、控制会话和接收套接字,建立接收线程。
在一种可选的方案中,当需要客户端设备A接收客户端设备C发送的第二探包序列时,客户端设备A可以接收到客户端设备C发送的连接请求,请求客户端设备A作为接收端,客户端设备A可以采用随机端口(即上述的第一端口的端口号)创建本地的TCP控制会话和UDP接收套接字,然后启动一个PathChirp接收线程。
可选地,在本发明上述实施例中,该装置还包括:第一发送子模块,用于发送第一端口的端口号。
可选地,在本发明上述实施例中,建立模块41包括:
接收子模块,用于在预设时间段内接收第二端口的端口号,其中,第二端口为根据预设算法,随机分配的端口。
具体地,上述的预设时间段可以是用户根据需要预先设定的超时时间,在超时时间之后未接收到第二端口的端口号,则确定客户端设备并未发送第二端口的端口号。
第二创建子模块,用于利用第二端口的端口号,创建发送套接字。
第二建立子模块,用于根据第二端口的端口号和发送套接字,建立发送线程。
在一种可选的方案中,当需要客户端设备A向客户端设备B发送第一探包序列时,客户端设备A可以接收到客户端设备B发送的连接请求,请求客户端设备A作为发送端,客户端设备A可以超时接收客户端设备B返回的TCP和UDP的端口号(即上述的第二端口的端口号),根据这些端口号创建发送套接字,并启动一个PathChirp发送线程。
可选地,在本发明上述实施例中,建立模块41还用于利用预设端口,建立通信连接;通信模块还用于通过预设端口接收连接请求,其中,连接请求用于表征请求客户端设备发送第一探包序列,以及请求客户端设备接收第二探包序列。
可选地,在本发明上述实施例中,该装置还包括:
关闭模块,用于关闭通信连接。
可选地,在本发明上述实施例中,该装置还包括:
获取模块,用于获取操作系统的类型。
通信模块还用于在操作系统的类型为预设类型的情况下,利用预设计时器,通过发送线程发送第一探包序列。
具体地,上述的预设类型可以是Windows操作系统,相对于linux系统能够实现10μs级的延时,Windows系统的常规延时函数只能保证10ms级别的延时控制,为了实现相同量程的带宽测量,Windows系统进行带宽测量需要发送更大(增加3个数量级)的探包,不具备可操作性;上述的预设计时器可以是通过调用QueryPerformanceFrequency、QueryPerformanceCounter系列Windows API函数的高精度计时器,从而满足10μs级的延时,实现在Windows平台测量可用带宽。
可选地,在本发明上述实施例中,通信模块包括:
第二发送子模块,用于发送第一探包序列中的当前探包,并获取预设计时器的初始计数值。
获取子模块,用于获取预设计时器的当前计数值。
第一判断子模块,用于判断当前计数值与初始计数值的差值是否大于等于预设数值。
第三发送子模块,用于如果当前计数值与初始计数值的差值大于等于预设数值,则发送第一探包序列中的下一个探包。
可选地,在本发明上述实施例中,该装置还包括:
判断模块,用于判断操作系统是否存在预设计时器。
通信模块还用于如果操作系统存在预设计时器,则利用预设计时器,通过发送线程发送第一探包序列。
可选地,在本发明上述实施例中,该装置还包括:加载模块,用于加载预设动态库。执行模块,用于在加载预设动态库之后,开始执行建立模块41的功能。
实施例,3
根据本发明实施例,提供了一种存储介质的实施例,存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行上述实施例1中的带宽测量方法。
实施例4
根据本发明实施例,提供了一种处理器的实施例,处理器用于运行程序,其中,程序运行时执行上述实施例1中的带宽测量方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (12)
1.一种带宽测量方法,其特征在于,包括:
客户端设备建立发送线程和接收线程,其中,所述发送线程对应的发送端口和所述接收线程对应的接收端口采用动态分配的方式分配传输和控制端口,不占用固定的UDP探包接收端口和TCP控制端口;
所述客户端设备通过所述发送线程发送第一探包序列,并通过所述接收线程接收第二探包序列;
所述客户端设备根据所述第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据所述第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。
2.根据权利要求1所述的方法,其特征在于,所述客户端设备建立所述接收线程包括:
所述客户端设备根据预设算法,随机分配第一端口;
所述客户端设备利用所述第一端口的端口号,创建控制会话和接收套接字;
所述客户端设备根据所述第一端口的端口号、所述控制会话和所述接收套接字,建立所述接收线程。
3.根据权利要求2所述的方法,其特征在于,在所述客户端设备利用所述第一端口的端口号,创建所述控制会话和所述接收套接字之后,所述客户端设备发送所述第一端口的端口号。
4.根据权利要求1所述的方法,其特征在于,所述客户端设备建立所述发送线程包括:
所述客户端设备在预设时间段内接收第二端口的端口号,其中,所述第二端口为根据预设算法,随机分配的端口;
所述客户端设备利用所述第二端口的端口号,创建发送套接字;
所述客户端设备根据所述第二端口的端口号和所述发送套接字,建立所述发送线程。
5.根据权利要求1所述的方法,其特征在于,在所述客户端设备通过所述发送线程发送所述第一探包序列,并通过所述接收线程接收所述第二探包序列之前,所述方法还包括:
所述客户端设备获取操作系统的类型;
在所述操作系统的类型为预设类型的情况下,所述客户端设备利用预设计时器,通过所述发送线程发送所述第一探包序列。
6.根据权利要求5所述的方法,其特征在于,所述客户端设备利用所述预设计时器,通过所述发送线程发送所述第一探包序列包括:
所述客户端设备发送所述第一探包序列中的当前探包,并获取所述预设计时器的初始计数值;
所述客户端设备获取所述预设计时器的当前计数值;
所述客户端设备判断所述当前计数值与所述初始计数值的差值是否大于等于预设数值;
所述客户端设备如果所述当前计数值与所述初始计数值的差值大于等于所述预设数值,则发送所述第一探包序列中的下一个探包。
7.根据权利要求1至6中任意一项所述的方法,其特征在于,在所述客户端设备建立所述发送线程和所述接收线程之前,加载预设动态库,并在加载所述预设动态库之后,开始执行所述客户端设备建立所述发送线程和所述接收线程的步骤。
8.一种带宽测量装置,其特征在于,包括:
建立模块,用于建立发送线程和接收线程,其中,所述发送线程对应的发送端口和所述接收线程对应的接收端口采用动态分配的方式分配传输和控制端口,不占用固定的UDP探包接收端口和TCP控制端口;
通信模块,用于通过所述发送线程发送第一探包序列,并通过所述接收线程接收第二探包序列;
处理模块,用于根据所述第一探包序列中多个第一探包的时间间隔,得到第一带宽的测量结果,并根据所述第二探包序列中多个第二探包的时间间隔,得到第二带宽的测量结果。
9.根据权利要求8所述的装置,其特征在于,所述建立模块包括:
分配子模块,用于根据预设算法,随机分配第一端口;
第一创建子模块,用于利用所述第一端口的端口号,创建控制会话和接收套接字;
第一建立子模块,用于根据所述第一端口的端口号、所述控制会话和所述接收套接字,建立所述发送线程。
10.根据权利要求8所述的装置,其特征在于,所述建立模块包括:
接收子模块,用于在预设时间段内接收第二端口的端口号,其中,根据预设算法,随机分配所述第二端口;
第二创建子模块,用于利用所述第二端口的端口号,创建发送套接字;
第二建立子模块,用于根据所述第二端口的端口号和所述发送套接字,建立所述接收线程。
11.根据权利要求8所述的装置,其特征在于,所述装置还包括:
获取模块,用于获取操作系统的类型;
所述通信模块还用于在所述操作系统的类型为预设类型的情况下,利用预设计时器,通过所述发送线程发送所述第一探包序列。
12.根据权利要求8至11中任意一项所述的装置,其特征在于,所述装置还包括:加载模块,用于加载预设动态库;执行模块,用于在加载所述预设动态库之后,开始执行所述建立模块的功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110197273.XA CN113014447B (zh) | 2017-07-04 | 2017-07-04 | 带宽测量方法及装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110197273.XA CN113014447B (zh) | 2017-07-04 | 2017-07-04 | 带宽测量方法及装置 |
CN201710538056.6A CN107317728B (zh) | 2017-07-04 | 2017-07-04 | 带宽测量方法及装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710538056.6A Division CN107317728B (zh) | 2017-07-04 | 2017-07-04 | 带宽测量方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113014447A true CN113014447A (zh) | 2021-06-22 |
CN113014447B CN113014447B (zh) | 2022-11-18 |
Family
ID=60180147
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110197273.XA Active CN113014447B (zh) | 2017-07-04 | 2017-07-04 | 带宽测量方法及装置 |
CN201710538056.6A Active CN107317728B (zh) | 2017-07-04 | 2017-07-04 | 带宽测量方法及装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710538056.6A Active CN107317728B (zh) | 2017-07-04 | 2017-07-04 | 带宽测量方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN113014447B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101282247A (zh) * | 2007-04-27 | 2008-10-08 | 清华大学 | 支持互联网高带宽实时视频应用的网络应用性能测量方法 |
CN102325060A (zh) * | 2011-09-09 | 2012-01-18 | 瑞斯康达科技发展股份有限公司 | 一种链路带宽测试的方法和路由器 |
CN103001835A (zh) * | 2012-12-29 | 2013-03-27 | 电信科学技术第一研究所 | 基于数据传输的网络带宽测试方法及系统 |
US20140254452A1 (en) * | 2011-11-18 | 2014-09-11 | Panasonic Corporation | Active bandwidth indicator for power-saving ues |
CN104270646A (zh) * | 2014-09-22 | 2015-01-07 | 何震宇 | 一种基于移动流媒体的自适应传输方法和系统 |
CN106209494A (zh) * | 2016-06-23 | 2016-12-07 | 乐视控股(北京)有限公司 | 可用带宽的测量方法、测量装置和测量系统 |
CN106330600A (zh) * | 2016-08-18 | 2017-01-11 | 成都网优力软件有限公司 | 一种小流量快速获取网络可用带宽的方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7133368B2 (en) * | 2002-02-01 | 2006-11-07 | Microsoft Corporation | Peer-to-peer method of quality of service (QoS) probing and analysis and infrastructure employing same |
CN101282248B (zh) * | 2007-05-16 | 2010-11-10 | 清华大学 | 支持互联网高带宽实时视频应用的可扩展测量方法 |
CN106533826A (zh) * | 2016-10-25 | 2017-03-22 | 乐视控股(北京)有限公司 | 网络状态的探测方法及系统 |
-
2017
- 2017-07-04 CN CN202110197273.XA patent/CN113014447B/zh active Active
- 2017-07-04 CN CN201710538056.6A patent/CN107317728B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101282247A (zh) * | 2007-04-27 | 2008-10-08 | 清华大学 | 支持互联网高带宽实时视频应用的网络应用性能测量方法 |
CN102325060A (zh) * | 2011-09-09 | 2012-01-18 | 瑞斯康达科技发展股份有限公司 | 一种链路带宽测试的方法和路由器 |
US20140254452A1 (en) * | 2011-11-18 | 2014-09-11 | Panasonic Corporation | Active bandwidth indicator for power-saving ues |
CN103001835A (zh) * | 2012-12-29 | 2013-03-27 | 电信科学技术第一研究所 | 基于数据传输的网络带宽测试方法及系统 |
CN104270646A (zh) * | 2014-09-22 | 2015-01-07 | 何震宇 | 一种基于移动流媒体的自适应传输方法和系统 |
CN106209494A (zh) * | 2016-06-23 | 2016-12-07 | 乐视控股(北京)有限公司 | 可用带宽的测量方法、测量装置和测量系统 |
CN106330600A (zh) * | 2016-08-18 | 2017-01-11 | 成都网优力软件有限公司 | 一种小流量快速获取网络可用带宽的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107317728A (zh) | 2017-11-03 |
CN113014447B (zh) | 2022-11-18 |
CN107317728B (zh) | 2021-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11212207B2 (en) | Injecting custom classes in application code to facilitate network traffic monitoring | |
US10757537B2 (en) | User positioning method, information push method, and related apparatus | |
CN108075934B (zh) | 一种网络质量监控方法、装置及系统 | |
CN109120679A (zh) | 任务分配方法及装置 | |
CN112217831A (zh) | 关于物联网设备的信息交互方法、装置及设备 | |
WO2018094989A1 (zh) | 一种定位方法及装置 | |
CN112087401B (zh) | 分布式存储中实现服务质量的方法和装置 | |
KR20210122795A (ko) | 업링크 전송 리소스 선택 방법, 단말 및 기억 매체 | |
CN105100150B (zh) | 一种云桌面迁移的方法、装置及分布式云桌面系统 | |
GB2582877A (en) | Multifactor authentication | |
CN110336713B (zh) | 一种检测蜂窝物联网端到端时延和速率的方法及终端设备 | |
US20150294111A1 (en) | Unauthorized-communication detecting apparatus, unauthorized-communication detecting method and non-transitory computer readable medium | |
CN107317728B (zh) | 带宽测量方法及装置 | |
US11704157B2 (en) | Method and apparatus for comparing acquired cloud resource use information to thresholds to recommend a target cloud resource instance | |
US20230350719A1 (en) | Systems and methods for determining target allocation parameters for initiating targeted communications in complex computing networks | |
CN108512735B (zh) | 一种数据传输方法和装置 | |
US8752101B2 (en) | Distribution system | |
WO2021208807A1 (zh) | 一种参考信号资源的配置方法、装置、设备及储存介质 | |
RU2015103671A (ru) | Способ (варианты) и сервер для загрузки приложения | |
CN110401605B (zh) | 一种局域网内带宽分配的方法、装置、服务器及终端 | |
KR101943932B1 (ko) | 데이터 송신 방법 및 기기 | |
CN114697292B (zh) | 标识信息的生成方法及装置、存储介质、电子装置 | |
CN109819274B (zh) | 数据传输方法、数据处理方法及装置 | |
CN109495299B (zh) | 一种数据流量的控制方法、装置 | |
KR20150133551A (ko) | 미디어 컨텐츠의 송수신을 스케쥴링 하는 방법, 장치 및 시스템 |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220921 Address after: 401122 No. 99, datagu Middle Road, Xiantao street, Yubei District, Chongqing Applicant after: Chongqing Jingxiang Microelectronics Co.,Ltd. Address before: Room 302, 3rd floor, No.4 factory building, 3G intelligent terminal Industrial Park, No.8, Tangyan South Road, high tech Zone, Xi'an City, Shaanxi Province, 710075 Applicant before: XI'AN VANXVM ELECTRONICS TECHNOLOGY Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |