TCP下载速率计算优化方法及提高TCPKPI计算准确度的方法与流程

文档序号:19010202发布日期:2019-10-30 00:16阅读:600来源:国知局
TCP下载速率计算优化方法及提高TCP KPI计算准确度的方法与流程

本发明属于网络通讯技术领域,涉及一种tcp流量性能监测方法,尤其涉及一种tcp下载速率计算优化方法;同时,本发明还涉及一种提高tcpkpi计算准确度的方法。



背景技术:

近年来,随着互联网的快速发展,对ip网络和各种上层应用(如web访问、电子商务、视频、游戏、即时通信等)业务质量的监测需求也日益增长。目前业界普遍采用在ip网络的各个关键网络节点位置(包括骨干层、汇聚层、接入层、用户侧)部署被动监测探针设备,来实现对ip网络流量和各种上层应用的业务质量监测。

由于ip网络流量增长迅猛,在ip骨干网上广泛采用10g、40g甚至100g的光纤链路传输数据,在用户侧千兆家庭网关、百兆接口4k机顶盒也越来越普及。这种大流量的网络环境对监测设备和软件的底层抓包性能提出了极大的挑战,目前的商用万兆服务器网卡、家庭网关和机顶盒等终端设备的千兆/百兆网卡均无法保证在大流量情况下实现100%数据包捕获性能。由于大部分互联网应用主要采用tcp协议来传输数据,因此业界迫切需要找到一种能在网络抓包有损情况下,仍能较准确地计算各项tcpkpi指标(包括tcp下载速率、tcp时延、tcp重传率)的方法。

高流量情况下ip网络抓包性能分析

通常ip监测设备或软件的网络抓包分析模块使用libpcap接口从网口捕获ip数据包,libpcap采用“尽力而为”转发机制向抓包分析模块发送数据包。以ott机顶盒中部署qos软探针为例,机顶盒操作系统内核为了保障主要业务(如机顶盒视频播放)不受影响,到达网卡的数据包会优先发送给tcp/ip协议栈,经过重组后传递到机顶盒播放器。当开启libpcap抓包时,内核会通过中断通知qos软探针抓包分析模块尽快将收到的数据复制传递走。

在播放4k超高清视频等高流量的情况下,libpcap往往无法全量拷贝出网口数据包,从而造成qos软探针所抓取的数据包大量缺失。以一个普通配置的安卓ott机顶盒为例,在4k视频下载时,视频媒体流传输协议栈采用mpeg-ts/http/tcp/ip/ethernet情况下,对终端网卡抓包性能进行测试,抓包模块丢包严重程度与网口流量关系如图1所示。

通过对抓包模块丢包的特性做进一步分析,发现一个规律:视频服务器发送给机顶盒的下行视频数据包,由于数据包长度较大(一般在1300-1500字节左右)、并且数量较多,因此丢包情况较为严重;相反机顶盒发送给视频服务器的上行tcpack应答包文,由于数据包长度较小(一般在64-100字节左右),则不容易被抓包模块丢失。

根据以上分析,在机顶盒这类网卡性能较低的设备上,通过传统网口抓包分析方法来计算tcpkpi指标,由于在高流量情况下抓包模块丢包严重,会导致所计算的tcp下载速率、tcp时延、tcp重传率等指标存在很大的误差。考虑到上行tcpack小报文比下行tcp大数据包文的丢包概率要小很多,因此可以对传统tcpkpi指标计算方法进行了优化改进,来提高tcpkpi指标计算准确度,以达到合理的误差范围。

传统的tcpkpi指标计算方法及缺陷

1、tcp下载速率

图2是一个tcp/ip报文的ip包头格式描述。

由于ip包头的totallength字段可用来标识当前ip包的总大小,因此可以通过统计这个字段的数值,来计算出来一段时间内的tcp下载速率(即这段时间内下载ip包的总大小除以该时间段长度)。

这种算法的缺陷是:在网口抓包模块出现严重丢包的情景下,就无法准确统计出下行数据包的总字节数,从而导致tcp下载速率计算出现较大误差(误差率同丢包率严重程度基本成正比)。

2、tcp时延

图3是一个tcp连接建立过程中的三次握手流程示意图。

一般情况下,根据tcp三次握手过程,tcp握手包syn(时间戳t0)到握手响应包syn,ack(时间戳t1)记录了一次tcp包往返的过程,这个往返过程所消耗的时长即定义为tcp时延(tcp时延=t1-t0)。

这种算法的缺陷是:在网络高流量情景下,tcp握手包syn和tcp握手响应包syn,ack都很可能会被抓包模块丢失,从而造成无法计算出tcp时延指标。

3、tcp重传率

根据tcp协议规则,服务器向客户端发送数据包,若数据包在网络传输过程中出现丢失,客户端会向服务器发送重传请求,服务器会对丢失的数据包进行重传,这些重复发送的数据包称之为tcp重传包。tcp重传率的计算方法如下:

tcp重传率=tcp重传包数/下行总包数

这种算法的缺陷是:在网络高流量情景下,因为抓包模块对下行tcp报文的丢包严重,重复发送的数据包数和正常发送的下行包都可能未被捕获到,从而造成计算出的tcp重传率严重失真。

有鉴于此,如今迫切需要设计一种新的ip网络性能监测优化方式,以便克服现有ip网络性能监测方式存在的上述缺陷。



技术实现要素:

本发明所要解决的技术问题是:提供一种tcp下载速率计算优化方法,可提高tcp下载速率获取的精确度,提高网络dpi设备对tcp流量监测的性能和效率。

此外,本发明还提供一种提高tcpkpi计算准确度的方法,可提高tcp下载速率、tcp时延、tcp重传率指标计算精准度,提高网络dpi设备对tcp流量监测的性能和效率。

为解决上述技术问题,本发明采用如下技术方案:

一种tcp下载速率计算优化方法,所述方法包括:

步骤a1、对捕获的tcp数据流进行协议解析,对tcp上行ack报文进行跟踪分析,尤其解析其中的确认标志确认编号acknowledgementnumber字段值,确认标志确认编号acknowledgementnumber字段值简称ack值,记录第一个tcpack包的时间戳t0,第一个包的ack值为ack0;

步骤a2、每当接收到新的tcp上行ack报文时,就提取出该ack报文的时间戳tn和其ack值ackn,并计算t0到tn这段时间内的tcp下载数据字节总个数,即ackn–ack0;进而计算这段时间的tcp下载速率,计算公式为:tcp下载速率(bps)=(ackn-ack0)/(tn-t0);

步骤a3、考虑到ack存在上限值n的情况,每次计算时需要判断ack值是否超过最大值后出现循环的情况,当ackn<ackn-1时,计算公式为:tcp下载速率(bps)=(ackn-ack0+n)/(tn-t0)。

作为本发明的一种优选方案,根据tcp头部信息中,acknowledgementnumber表示对收到的下行包的数据流序号的确认,ack值的大小=上一次ack值大小+收到下行包的大小,根据这个特性,根据上行包的ack差值反推出实际tcp下载字节数,从而计算tcp下载速率。

作为本发明的一种优选方案,初始化条件:

ack0=0;

t0=0。

一种提高tcpkpi计算准确度的方法,所述方法包括:

tcp下载速率计算优化步骤,具体包括:

步骤a1、对捕获的tcp数据流进行协议解析,对tcp上行ack报文进行跟踪分析,尤其解析其中的确认标志确认编号acknowledgementnumber字段值,确认标志确认编号acknowledgementnumber字段值简称ack值,记录第一个tcpack包的时间戳t0,第一个包的ack值为ack0;

步骤a2、每当接收到新的tcp上行ack报文时,就提取出该ack报文的时间戳tn和其ack值ackn,并计算t0到tn这段时间内的tcp下载数据字节总个数,即ackn–ack0;进而计算这段时间的tcp下载速率,计算公式为:tcp下载速率(bps)=(ackn-ack0)/(tn-t0);

步骤a3、考虑到ack存在上限值n的情况,每次计算时需要判断ack值是否超过最大值后出现循环的情况,当ackn<ackn-1时,计算公式为:tcp下载速率(bps)=(ackn-ack0+n)/(tn-t0)。

作为本发明的一种优选方案,根据tcp头部信息中,acknowledgementnumber表示对收到的下行包的数据流序号的确认,ack值的大小=上一次ack值大小+收到下行包的大小,根据这个特性,根据上行包的ack差值反推出实际tcp下载字节数,从而计算tcp下载速率。

作为本发明的一种优选方案,初始化条件:

ack0=0;

t0=0。

一种提高tcpkpi计算准确度的方法,所述方法包括:

——步骤a、tcp下载速率计算优化步骤,根据tcp头部信息中,acknowledgementnumber表示对收到的下行包的数据流序号的确认,ack值的大小=上一次ack值大小+收到下行包的大小,根据这个特性,根据上行包的ack差值反推出实际tcp下载字节数,从而计算tcp下载速率;具体包括:

步骤a1、对捕获的tcp数据流进行协议解析,对tcp上行ack报文进行跟踪分析,尤其解析其中的确认标志确认编号acknowledgementnumber字段值,确认标志确认编号acknowledgementnumber字段值简称ack值,记录第一个tcpack包的时间戳t0,第一个包的ack值为ack0;

步骤a2、每当接收到新的tcp上行ack报文时,就提取出该ack报文的时间戳tn和其ack值ackn,并计算t0到tn这段时间内的tcp下载数据字节总个数,即ackn–ack0;进而计算这段时间的tcp下载速率,计算公式为:tcp下载速率(bps)=(ackn-ack0)/(tn-t0);

步骤a3、考虑到ack存在上限值n的情况,每次计算时需要判断ack值是否超过最大值后出现循环的情况,当ackn<ackn-1时,计算公式为:tcp下载速率(bps)=(ackn-ack0+n)/(tn-t0)。

——步骤b、tcp时延计算步骤,采用跟踪tcp数据流,通过匹配tcp下行数据包序号值和应答数据包ack值,找到相对应的tcp下行数据和上行ack应答数据报文对,分别提取上下行报文的时间戳,并计算这两个时间戳的差值,从而获取tcp网络时延;具体包括:

步骤b1、初始化tcp_delay_sum=0,tcp_delay_cnt=0;

tcp时延均值用tcp_delay_sum/tcp_delay_cnt表述;tcp_delay_sum是指tcp时延累计值,tcp_delay_cnt是指有效的tcp时延统计次数;

步骤b2、解析tcp包头信息,记录每一个下行数据包的序号seqn、tcp长度lenn、对应时间戳tn,计算对应的tcp应答报文的ackn=seqn+lenn,这样得到下行报的三个序号一致的集合:序号集合seq_agg、时间戳集合t_agg、ack集合ack_agg;

步骤b3、记录上行ack包的时间戳tm和ack值ackm,若ackm属于集合ack_agg,则取出对应的下行包的时间戳tm,并计算本次上下行tcp数据包匹配对的tcp时延值为:tcp_delaym=tm-tm;

步骤b4、将最新得到的tcp时延累计计算:

tcp_delay_sum=tcp_delay_sum+tcp_delaym;

tcp_delay_cnt=tcp_delay_cnt+1;

步骤b5、计算得到的平均tcp时延为:

tcp时延=tcp_delay_sum/tcp_delay_cnt。

——步骤c、tcp重传率计算步骤,通过上行tcpack应答报文包头的ack字段,对下行tcp总包数和tcp重传包数进行较准,以提高tcp重传率指标的计算准确性;具体包括:

步骤c1、初始化tcp重传包数r=0,平均tcp下行包长b=0,初始ack0;

步骤c2、当捕获到一个新的下行tcp报文时,解析该报文的包头信息,获取其包长bn和包序号seqn,并累计下行总包数n;并计算下行tcp平均包长b=∑(b0,b1..bn)/n;

步骤c3、比对当前下行tcp报文包序号seqn与上一个下行tcp报文的包序号seqn-1:

若seqn<seqn-1,即包序号发生回跳,则可判定包序号为seqn的报文为tcp重传包,tcp重传包数r加1;同时记录每一个tcp重传包的ack值,从而形成tcp重传包ack_agg集合;

若seqn>=seqn-1,则不做任何处理;

步骤c4、当捕获到一个新的上行tcp报文时,检查该报文的ack字段,若发现该ack数值与之前收到的上行报文的ack数值相同,则记录该报文的ack数值为ack_up;

步骤c5、对比ack_up与tcp重传包ack_agg集合中的成员:

若存在ack_up与seq成员数值相同的情况,则不做任何处理;

若不存在相同情况,则将tcp重传包r数量加1,并记录该ack_up;

步骤c6、计算tcp下行报文的总包数t:t=(ack_up-ack0)/b;

步骤c7、计算tcp重传率=r/t*100%。

本发明的有益效果在于:本发明提出的tcp下载速率计算优化方法,可提高tcp下载速率获取的精确度,提高网络dpi设备对tcp流量监测的性能和效率。此外,本发明提出的提高tcpkpi计算准确度的方法,可以在网络抓包有损情况下提高tcp下载速率、tcp时延、tcp重传率指标计算精准度,提高网络dpi设备对tcp流量监测的性能和效率。

附图说明

图1为抓包模块丢包严重程度与网口流量关系示意图。

图2为tcp/ip报文的ip包头格式示意图。

图3为tcp连接建立过程中的三次握手流程示意图。

图4为本发明tcp下载速率计算优化方法的流程图。

图5为本发明tcp时延计算方法的流程图。

图6为本发明tcp重传率计算方法的流程图。

具体实施方式

下面结合附图详细说明本发明的优选实施例。

实施例一

请参阅图4,本发明揭示了一种tcp下载速率计算优化方法,根据tcp头部信息中,acknowledgementnumber表示对收到的下行包的数据流序号的确认,ack值的大小=上一次ack值大小+收到下行包的大小,根据这个特性,根据上行包的ack差值反推出实际tcp下载字节数,从而计算tcp下载速率。

所述tcp下载速率计算优化方法包括如下步骤:

【步骤a1】对捕获的tcp数据流进行协议解析,对tcp上行ack报文进行跟踪分析,尤其解析其中的确认标志确认编号acknowledgementnumber字段值,确认标志确认编号acknowledgementnumber字段值简称ack值,记录第一个tcpack包的时间戳t0,第一个包的ack值为ack0;

【步骤a2】每当接收到新的tcp上行ack报文时,就提取出该ack报文的时间戳tn和其ack值ackn,并计算t0到tn这段时间内的tcp下载数据字节总个数,即ackn–ack0;进而计算这段时间的tcp下载速率,计算公式为:tcp下载速率(bps)=(ackn-ack0)/(tn-t0);

【步骤a3】考虑到ack存在上限值n的情况,每次计算时需要判断ack值是否超过最大值后出现循环的情况,当ackn<ackn-1时,计算公式为:tcp下载速率(bps)=(ackn-ack0+n)/(tn-t0)。

本实施例中,初始化条件为:ack0=0;t0=0。

实施例二

本发明揭示一种提高tcpkpi计算准确度的方法,所述方法包括:

【步骤a】tcp下载速率计算优化步骤,根据tcp头部信息中,acknowledgementnumber表示对收到的下行包的数据流序号的确认,ack值的大小=上一次ack值大小+收到下行包的大小,根据这个特性,根据上行包的ack差值反推出实际tcp下载字节数,从而计算tcp下载速率。请参阅图4,步骤a具体包括:

步骤a1、对捕获的tcp数据流进行协议解析,对tcp上行ack报文进行跟踪分析,尤其解析其中的确认标志确认编号acknowledgementnumber字段值,确认标志确认编号acknowledgementnumber字段值简称ack值,记录第一个tcpack包的时间戳t0,第一个包的ack值为ack0;

步骤a2、每当接收到新的tcp上行ack报文时,就提取出该ack报文的时间戳tn和其ack值ackn,并计算t0到tn这段时间内的tcp下载数据字节总个数,即ackn–ack0;进而计算这段时间的tcp下载速率,计算公式为:tcp下载速率(bps)=(ackn-ack0)/(tn-t0);

步骤a3、考虑到ack存在上限值n的情况,每次计算时需要判断ack值是否超过最大值后出现循环的情况,当ackn<ackn-1时,计算公式为:tcp下载速率(bps)=(ackn-ack0+n)/(tn-t0)。

实施例三

本发明揭示一种提高tcpkpi计算准确度的方法,所述方法包括:

【步骤a】tcp下载速率计算优化步骤,根据tcp头部信息中,acknowledgementnumber表示对收到的下行包的数据流序号的确认,ack值的大小=上一次ack值大小+收到下行包的大小,根据这个特性,根据上行包的ack差值反推出实际tcp下载字节数,从而计算tcp下载速率。请参阅图4,步骤a具体包括:

步骤a1、对捕获的tcp数据流进行协议解析,对tcp上行ack报文进行跟踪分析,尤其解析其中的确认标志确认编号acknowledgementnumber字段值,确认标志确认编号acknowledgementnumber字段值简称ack值,记录第一个tcpack包的时间戳t0,第一个包的ack值为ack0;

步骤a2、每当接收到新的tcp上行ack报文时,就提取出该ack报文的时间戳tn和其ack值ackn,并计算t0到tn这段时间内的tcp下载数据字节总个数,即ackn–ack0;进而计算这段时间的tcp下载速率,计算公式为:tcp下载速率(bps)=(ackn-ack0)/(tn-t0);

步骤a3、考虑到ack存在上限值n的情况,每次计算时需要判断ack值是否超过最大值后出现循环的情况,当ackn<ackn-1时,计算公式为:tcp下载速率(bps)=(ackn-ack0+n)/(tn-t0)。

【步骤b】tcp时延计算步骤,采用跟踪tcp数据流,通过匹配tcp下行数据包序号值和应答数据包ack值,找到相对应的tcp下行数据和上行ack应答数据报文对,分别提取上下行报文的时间戳,并计算这两个时间戳的差值,从而获取tcp网络时延。请参阅图5,步骤b具体包括:

步骤b1、初始化tcp_delay_sum=0,tcp_delay_cnt=0;

tcp时延均值用tcp_delay_sum/tcp_delay_cnt表述;tcp_delay_sum是指tcp时延累计值,tcp_delay_cnt是指有效的tcp时延统计次数;

步骤b2、解析tcp包头信息,记录每一个下行数据包的序号seqn、tcp长度lenn、对应时间戳tn,计算对应的tcp应答报文的ackn=seqn+lenn,这样得到下行报的三个序号一致的集合:序号集合seq_agg、时间戳集合t_agg、ack集合ack_agg;

步骤b3、记录上行ack包的时间戳tm和ack值ackm,若ackm属于集合ack_agg,则取出对应的下行包的时间戳tm,并计算本次上下行tcp数据包匹配对的tcp时延值为:tcp_delaym=tm-tm;

步骤b4、将最新得到的tcp时延累计计算:

tcp_delay_sum=tcp_delay_sum+tcp_delaym;

tcp_delay_cnt=tcp_delay_cnt+1;

步骤b5、计算得到的平均tcp时延为:

tcp时延=tcp_delay_sum/tcp_delay_cnt。

【步骤c】tcp重传率计算步骤,通过上行tcpack应答报文包头的ack字段,对下行tcp总包数和tcp重传包数进行较准,以提高tcp重传率指标的计算准确性。请参阅图6,步骤c具体包括:

步骤c1、初始化tcp重传包数r=0,平均tcp下行包长b=0,初始ack0;

步骤c2、当捕获到一个新的下行tcp报文时,解析该报文的包头信息,获取其包长bn和包序号seqn,并累计下行总包数n;并计算下行tcp平均包长b=∑(b0,b1..bn)/n;

步骤c3、比对当前下行tcp报文包序号seqn与上一个下行tcp报文的包序号seqn-1:

若seqn<seqn-1,即包序号发生回跳,则可判定包序号为seqn的报文为tcp重传包,tcp重传包数r加1;同时记录每一个tcp重传包的ack值,从而形成tcp重传包ack_agg集合;

若seqn>=seqn-1,则不做任何处理;

步骤c4、当捕获到一个新的上行tcp报文时,检查该报文的ack字段,若发现该ack数值与之前收到的上行报文的ack数值相同,则记录该报文的ack数值为ack_up;

步骤c5、对比ack_up与tcp重传包ack_agg集合中的成员:

若存在ack_up与seq成员数值相同的情况,则不做任何处理;

若不存在相同情况,则将tcp重传包r数量加1,并记录该ack_up;

步骤c6、计算tcp下行报文的总包数t:t=(ack_up-ack0)/b;

步骤c7、计算tcp重传率=r/t*100%。

所述方法还包括流程初始条件(如可以设置于步骤c1中):

设定ack上行包序号为0:ack_up=0;

设定ack下行包序号为0:ack0=0;

设定时间戳为0:t=0。

综上所述,本发明提出的tcp下载速率计算优化方法,根据tcp上行报文的ack差值反推出实际tcp下载字节数,计算tcp下载速率,可克服在高流量情况下抓包模块会丢失一部分下行报文的缺陷,从而提高tcp下载速率获取的精确度,提高网络dpi设备对tcp流量监测的性能和效率。此外,本发明提出的提高tcpkpi计算准确度的方法,可提高tcp下载速率、tcp时延、tcp重传率指标计算精准度,提高网络dpi设备对tcp流量监测的性能和效率。

这里本发明的描述和应用是说明性的,并非想将本发明的范围限制在上述实施例中。这里所披露的实施例的变形和改变是可能的,对于那些本领域的普通技术人员来说实施例的替换和等效的各种部件是公知的。本领域技术人员应该清楚的是,在不脱离本发明的精神或本质特征的情况下,本发明可以以其它形式、结构、布置、比例,以及用其它组件、材料和部件来实现。在不脱离本发明范围和精神的情况下,可以对这里所披露的实施例进行其它变形和改变。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1