基于BPF的计量主站网络检测方法及计量主站技术

技术编号:34892737 阅读:15 留言:0更新日期:2022-09-10 13:51
本发明专利技术公开种基于BPF的计量主站网络检测方法及计量主站,所述方法包括:将编译好的BPF函数加载到计量主站的Linux内核中,并在所述Linux内核中建立BPF函数的键值存储区;用所述BPF函数替代数据包接收处理函数的回调,获取TCP连接信息;用所述BPF函数替代快速重传函数的回调,保存执行快速重传函数前后的拥塞机状态于所述键值存储区中;用所述BPF函数检测慢启动出口点对应的标志位,获得混合慢启动的退出情况。采用本发明专利技术,通过调用BPF函数可以跟踪Linux内核中的事件、检测甚至修改事件,而不需要重新编译内核,进而有效且高效地分析计量主站的网络拥塞状况。站的网络拥塞状况。站的网络拥塞状况。

【技术实现步骤摘要】
基于BPF的计量主站网络检测方法及计量主站


[0001]本专利技术涉及网络监测
,尤其涉及一种基于BPF的计量主站网络检测方法及计量主站。

技术介绍

[0002]计量主站一般使用Linux操作系统,而当前Linux内核默认的立方算法作为拥塞控制算法,目前对于采用该算法的计量主站拥塞状态机、TCP发送缓冲区队列、混合慢启动等问题进行分析时一般需要重新编译内核,引起拥塞的原因不易被探测到。而且进行网络拥塞分析时并不能跟踪和定位具体的网络事件。

技术实现思路

[0003]本专利技术实施例提供一种基于BPF的计量主站网络检测方法及计量主站,在不需重新编译内核情况下跟踪Linux内核中的修改事件,跟踪和定位网络事件。
[0004]为实现上述目的,本申请实施例的第一方面提供了一种基于BPF的计量主站网络检测方法,包括:
[0005]将编译好的BPF函数加载到计量主站的Linux内核中,并在所述Linux内核中建立BPF函数的键值存储区;
[0006]用所述BPF函数替代数据包接收处理函数的回调,获取TCP连接信息;
[0007]用所述BPF函数替代快速重传函数的回调,保存执行快速重传函数前后的拥塞机状态于所述键值存储区中;
[0008]用所述BPF函数检测慢启动出口点对应的标志位,获得混合慢启动的退出情况。
[0009]在第一方面的一种可能的实现方式中,所述BPF函数是由LLVM编译器编译的BPF汇编代码;所述BPF函数的键值存储区存储的变量值可供所述Linux内核中其他函数调取。
[0010]在第一方面的一种可能的实现方式中,所述用所述BPF函数替代数据包接收处理函数的回调,获取TCP连接信息,具体包括:
[0011]从TCP结构体中提取套接口的发送队列统计值,根据所述发送队列统计值的变化判断网络拥塞程度。
[0012]在第一方面的一种可能的实现方式中,所述用所述BPF函数替代快速重传函数的回调,保存执行快速重传函数前后的拥塞状态机状态于所述键值存储区中,具体包括:
[0013]在快速重传函数的进出口分别插入Kprobe和Kretprobe探针,若快速重传函数执行前后存在相同的连接控制结构,动态保存拥塞状态机状态于所述键值存储区中。
[0014]在第一方面的一种可能的实现方式中,所述用所述BPF函数检测慢启动出口点对应的标志位,获得混合慢启动的退出情况,具体包括:
[0015]用所述BPF函数检测HYSTART_ACK_TRAIN标志位,得到ACK行列测量开始时间戳和最小路径发送延迟;
[0016]若当前时间减去ACK行列测量开始时间戳的差值大于行列阈值,网络状况恶化,慢
启动退出;所述行列阈值取值与所述最小路径发送延迟有关。
[0017]在第一方面的一种可能的实现方式中,所述用所述BPF函数检测慢启动出口点对应的标志位,获得混合慢启动的退出情况,具体包括:
[0018]用所述BPF函数检测HYSTART_DELAY标志位,得到curr_RTT值和最小路径发送延迟;若所述curr_RTT值与最小路径发送延迟时的差值大于延迟阈值,延迟增加过多,退出慢启动;所述延迟阈值的取值与所述最小路径发送延迟时有关。
[0019]在第一方面的一种可能的实现方式中,所述TCP连接信息包括TCP基本连接信息、进程控制信息、拥塞窗口、慢启动阈值和发送队列缓存。
[0020]在第一方面的一种可能的实现方式中,所述BPF函数作为Kprobe处理程序运行。
[0021]本申请实施例的第二方面提供了基于BPF的计量主站,含有BPF函数的linux内核、网络信息分析模块、拥塞状态分析模块和慢启动分析模块;
[0022]所述网络信息分析模块,用于调用所述BPF函数替代数据包接收处理函数的回调,获取TCP连接信息;
[0023]所述拥塞状态分析模块,用于调用所述BPF函数替代快速重传函数的回调,保存执行快速重传函数前后的拥塞机状态于所述键值存储区中;
[0024]所述慢启动分析模块,用于调用所述BPF函数检测慢启动出口点对应的标志位,获得混合慢启动的退出情况。
[0025]相比于现有技术,本专利技术实施例提供的一种基于BPF的计量主站网络检测方法及计量主站,在Linux内核中实现一组增强BPF虚拟机。将编译好的BPF函数加载到计量主站的Linux内核中,并在所述Linux内核中建立BPF函数的键值存储区后,Linux内核将在相应类型的事件下触发计量主站定义的增强BPF程序,如Kprobe类型的增强BPF程序,允许为计量主站编写的增强BPF程序作为Kprobe处理程序,当函数N被执行时,不执行早期内核模块插入的回调,而是执行计量主站模式动态插入的增强BPF程序。利用Kprobe型的增强BPF程序,可以实时检测计量主站的Linux内核的相关网络功能,并实时获取网络参数信息。此外,通过调用BPF函数可以跟踪Linux内核中的事件、检测甚至修改事件,而不需要重新编译内核,进而有效且高效地分析计量主站的网络拥塞状况。
附图说明
[0026]图1是本专利技术一实施例提供的一种基于BPF的计量主站网络检测方法的流程示意图;
[0027]图2是本专利技术一实施例考虑中BPF函数执行示意图。
具体实施方式
[0028]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0029]请参见图1,本专利技术一实施例提供一种基于BPF的计量主站网络检测方法,包括:
[0030]S10、将编译好的BPF函数加载到计量主站的Linux内核中,并在所述Linux内核中
建立BPF函数的键值存储区。
[0031]S11、用所述BPF函数替代数据包接收处理函数的回调,获取TCP连接信息。
[0032]S12、用所述BPF函数替代快速重传函数的回调,保存执行快速重传函数前后的拥塞机状态于所述键值存储区中。
[0033]S13、用所述BPF函数检测慢启动出口点对应的标志位,获得混合慢启动的退出情况。
[0034]指定在某些场景下是否以及何时调用某些内核函数的方法是向内核代码中相应的函数添加日志打印,这通常需要重新编译内核。然而,Kprobes的诞生使它更容易被探测。当Linux内核通过插入内核模块来执行指定的探测函数时,将调用计量主站定义的回调函数。Kprobes在Linux Arm体系结构中的实现原理如图1所示。启用点上的代码被保存并替换为断点指令。当执行此断点时,将生成陷阱指令,保存寄存器,然后跳转相关的检测处理程序。Kprobes机制的三种方法分别是Kprobe、Jprobe和Kret探针。Kprobe可以插入到任何要检测的指令中,Kret探针可以本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于BPF的计量主站网络检测方法,其特征在于,包括:将编译好的BPF函数加载到计量主站的Linux内核中,并在所述Linux内核中建立BPF函数的键值存储区;用所述BPF函数替代数据包接收处理函数的回调,获取TCP连接信息;用所述BPF函数替代快速重传函数的回调,保存执行快速重传函数前后的拥塞机状态于所述键值存储区中;用所述BPF函数检测慢启动出口点对应的标志位,获得混合慢启动的退出情况。2.如权利要求1所述基于BPF的计量主站网络检测方法,其特征在于,所述BPF函数是由LLVM编译器编译的BPF汇编代码;所述BPF函数的键值存储区存储的变量值可供所述Linux内核中其他函数调取。3.如权利要求1所述基于BPF的计量主站网络检测方法,其特征在于,所述用所述BPF函数替代数据包接收处理函数的回调,获取TCP连接信息,具体包括:从TCP结构体中提取套接口的发送队列统计值,根据所述发送队列统计值的变化判断网络拥塞程度。4.如权利要求1所述基于BPF的计量主站网络检测方法,其特征在于,所述用所述BPF函数替代快速重传函数的回调,保存执行快速重传函数前后的拥塞状态机状态于所述键值存储区中,具体包括:在快速重传函数的进出口分别插入Kprobe和Kretprobe探针,若快速重传函数执行前后存在相同的连接控制结构,动态保存拥塞状态机状态于所述键值存储区中。5.如权利要求1所述基于BPF的计量主站网络检测方法,其特征在于,所述用所述BPF函数检测慢启动出口点对应的标志位,获得混合慢启动的退出情况,具体包括:用所述BPF函数检测H...

【专利技术属性】
技术研发人员:孙勇李经儒刘日荣蔡乾乾阙华坤黄家嘉黄友朋张捷彭策唐曦凌
申请(专利权)人:广东电网有限责任公司计量中心
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1