CN116016351A - 基于eBPF的UDP流量和丢包观测方法、系统及介质 - Google Patents
基于eBPF的UDP流量和丢包观测方法、系统及介质 Download PDFInfo
- Publication number
- CN116016351A CN116016351A CN202211601356.1A CN202211601356A CN116016351A CN 116016351 A CN116016351 A CN 116016351A CN 202211601356 A CN202211601356 A CN 202211601356A CN 116016351 A CN116016351 A CN 116016351A
- Authority
- CN
- China
- Prior art keywords
- identifier
- packet loss
- sliding window
- udp
- key information
- 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
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及领域,公开了一种基于eBPF的UDP流量和丢包观测方法、系统及介质。该方法包括:在Linux内核协议栈的UDP报文接收处理函数处进行插桩;在主机接收到UDP报文时,获取UDP报文中的关键信息,并保存到环形缓冲区;从环形缓冲区读取关键信息并进行关键字匹配,得到会话记录;根据关键信息与会话记录进行流量和丢包统计,并根据统计结果更新至会话记录中。本申请只需要从内核传输少量的数据,不影响业务系统,另外不需要对Linux内核和上层应用程序进行任何修改,因此在工程环境中具有很强的实用性和通用性。
Description
技术领域
本发明涉及计算机网络流量可观测技术领域,尤其涉及一种基于eBPF的UDP流量和丢包观测方法、系统及介质。
背景技术
在航空航天、卫星控制、国家电网等现场测控工程领域,UDP(UserDatagramProtocol,用户数据报协议)技术被广泛采用,以保障系统的实时性和可靠性。相比于TCP(Transmission Control Protocol,传输控制协议),UDP协议省去了建立连接和拆除连接的过程,取消了重发检验机制,极大地提高了数据通信的实时性,同时UDP组播可以将数据从数据采集端同时发送到多台分布式服务器进行主/备分布式运算,多节点的主/备分布式处理既提升了数据处理能力也避免了单节点故障影响整个系统的正常运行,极大地提高了整个系统数据处理的容量和可靠性。
eBPF(extended Berkeley Packet Filter,扩展伯克利数据包过滤器)是Linux内核中一个非常灵活且高效的类虚拟机(virtual machine-like)组件,能够在许多内核hook点安全地执行字节码(bytecode)。
传统观测UDP是否丢包的方法有两种,方法一是通过tcpdump等网络抓包工具获取所有UDP网络报文并生成pcap文件,然后用wireshark工具进行手动分析。此方法需要从内核传输大量的数据报文并保存到文件,对系统性能影响较大,不适合线上系统的实时观测。方法二是应用程序对每个UDP报文进行编号,然后在应用层进行丢包观测和处理,该方法需要对应用程序进行修改,工作量大且不通用。
发明内容
有鉴于此,本发明的目的是为了克服现有技术中的不足,提供一种基于eBPF的UDP流量和丢包观测方法、系统及介质。
本发明提供如下技术方案:
第一方面,本公开实施例中提供了一种基于eBPF的UDP流量和丢包观测方法,所述方法包括:
在Linux内核协议栈的UDP报文接收处理函数处进行插桩;
在主机接收到UDP报文时,获取所述UDP报文中的关键信息,并保存到环形缓冲区;
从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录;
根据所述关键信息与所述会话记录进行流量和丢包统计,并根据统计结果更新至所述会话记录中。
进一步地,所述在Linux内核协议栈的UDP报文接收处理函数处进行插桩,包括:
通过观测工具将数据采集代码进行编译,以生成BPF字节码,并通过BPF系统调用将所述BPF字节码加载到Linux内核;
利用所述Linux内核中的BPF虚拟机解析所述BPF字节码,生成对应的数据采集模块和环形缓冲区;
通过所述BPF系统调用将所述数据采集模块插桩到所述Linux内核协议栈的UDP报文接收处理函数的开端处。
进一步地,所述在主机接收到UDP报文时,获取所述UDP报文中的关键信息,包括:
利用所述UDP报文接收处理函数计算出IP首部地址和UDP首部地址;
解析所述IP首部地址对应的IP首部结构和所述UDP首部地址对应的UDP首部结构,以获取所述UDP报文中的关键信息,其中,所述关键信息包括源IP地址、目的IP地址、IP标识符、报文长度、源端口号和目的端口号。
进一步地,所述从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录,包括:
从所述环形缓冲区读取所述关键信息中的源四元组信息,并通过所述四元组信息匹配对应的会话记录;
若未匹配到已有的会话记录,则新建一个对应的会话记录,其中,所述会话记录包括源IP地址、目的IP地址、源端口号、目的端口号、IP标识符滑动窗口左边界、IP标识符滑动窗口右边界、IP标识符滑动窗口状态数组、传输字节数、传输丢包数、传输乱序和重包数。
进一步地,所述根据所述关键信息与所述会话记录进行流量和丢包统计,包括:
将所述报文长度累加到新建的会话记录或匹配到已有的会话记录中的传输字节数中,完成流量统计;
根据所述IP标识符、所述IP标识符滑动窗口右边界、所述IP标识符滑动窗口左边界和所述IP标识符滑动窗口状态数组,判断丢包和乱序的情况。
进一步地,所述根据所述IP标识符、所述IP标识符滑动窗口右边界、所述IP标识符滑动窗口左边界和所述IP标识符滑动窗口状态数组,判断丢包和乱序的情况,包括:
若所述IP标识符大于或等于所述IP标识符滑动窗口右边界,则将所述会话记录中的IP标识符滑动窗口状态数组对应的数据元素置1,然后将所述IP标识符滑动窗口右边界设置为所述IP标识符加1;
利用调整后的IP标识符滑动窗口右边界减去所述IP标识符滑动窗口左边界,若大于滑动窗口阈值,则将所述IP标识符滑动窗口左边界收缩到所述滑动窗口阈值的大小;
观测所述IP标识符滑动窗口状态数组的值,并在为0时统计到所述传输丢包数中。
进一步地,所述根据所述IP标识符、所述IP标识符滑动窗口右边界、所述IP标识符滑动窗口左边界和所述IP标识符滑动窗口状态数组,判断丢包和乱序的情况,包括:
若所述IP标识符小于所述IP标识符滑动窗口右边界的同时大于或等于所述IP标识符滑动窗口左边界,则将所述IP标识符滑动窗口状态数组对应的数据元素置1,并将所述传输乱序和所述重包数均加1;
若所述IP标识符小于所述IP标识符滑动窗口左边界,则所述IP标识符滑动窗口状态数组、所述传输丢包数、所述传输乱序和所述重包数均保持不变。
进一步地,所述根据统计结果更新至所述会话记录中之后,还包括:
设置周期性定时器,并在所述周期性定时器超时,报告所有会话记录中的传输字节数、传输丢包数、传输乱序和重包数的情况。
第二方面,本公开实施例中提供了一种基于eBPF的UDP流量和丢包观测系统,所述系统包括插桩模块、数据采集模块和数据分析模块;
所述插桩模块用于在Linux内核协议栈的UDP报文接收处理函数处进行插桩;
所述数据采集模块用于在主机接收到UDP报文时,获取所述UDP报文中的关键信息,并保存到环形缓冲区;
所述数据分析模块用于从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录;
所述数据分析模块还用于根据所述关键信息与会话记录进行流量和丢包统计,并根据统计结果更新至所述会话记录中。
第三方面,本公开实施例中提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的基于eBPF的UDP流量和丢包观测方法的步骤。
本申请的实施例具有如下优点:
本申请实施例提供的基于eBPF的UDP流量和丢包观测方法,方法包括:在Linux内核协议栈的UDP报文接收处理函数处进行插桩;在主机接收到UDP报文时,获取所述UDP报文中的关键信息,并保存到环形缓冲区;从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录;根据所述关键信息与所述会话记录进行流量和丢包统计,并根据统计结果更新至所述会话记录中。本申请只需要从内核传输少量的数据,不影响业务系统,另外不需要对Linux内核和上层应用程序进行任何修改,因此在工程环境中具有很强的实用性和通用性。
为使本发明的上述目的、特征和优点能更明显和易懂,下文特举较佳实施例,并配合所附附图,做详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。在各个附图中,类似的构成部分采用类似的编号。
图1示出了本申请实施例提供的一种基于eBPF的UDP流量和丢包观测方法的流程图;
图2示出了本申请实施例提供的另一种基于eBPF的UDP流量和丢包观测方法的流程图;
图3示出了本申请实施例提供的再一种基于eBPF的UDP流量和丢包观测方法的流程图;
图4示出了本申请实施例提供的一种基于eBPF的UDP流量和丢包观测系统的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
需要说明的是,当元件被称为“固定于”另一个元件,它可以直接在另一个元件上或者也可以存在居中的元件。当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件。相反,当元件被称作“直接在”另一元件“上”时,不存在中间元件。本文所使用的术语“垂直的”、“水平的”、“左”、“右”以及类似的表述只是为了说明的目的。
在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在模板的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
实施例1
如图1所示,为本申请实施例中的一种基于eBPF的UDP流量和丢包观测方法的流程图,本申请实施例提供的基于eBPF的UDP流量和丢包观测方法包括以下步骤:
步骤S110,在Linux内核协议栈的UDP报文接收处理函数处进行插桩。
具体地,通过观测工具将数据采集代码编译生成BPF字节码,然后通过BPF系统调用将BPF字节码加载到Linux内核。Linux内核的BPF虚拟机解析所述BPF字节码,生成对应的数据采集模块和环形缓冲区。通过BPF系统调用,将数据采集模块插桩到Linux内核协议栈的UDP报文接收处理函数的最开端处。
在本实施例中,采用的观测工具为BBC工具,BCC是一个用于跟踪内核和操作程序的工具集,其软件包中包含了一些有用的工具和例子,它扩展了BPF,BCC使用C语言进行内核检测,并使用Python和lua作为前端简化了BPF程序的编写,它适用于多种任务,如性能分析和网络流量控制。可以理解的是,具体采用的观测工具可根据实际情况设定,本申请实施例对此不作限定。
在一种可选的实施方式中,如图2所示,步骤S110还包括:
步骤S111,通过观测工具将数据采集代码进行编译,以生成BPF字节码,并通过BPF系统调用将所述BPF字节码加载到Linux内核;
步骤S112,利用所述Linux内核中的BPF虚拟机解析所述BPF字节码,生成对应的数据采集模块和环形缓冲区;
步骤S113,通过所述BPF系统调用将所述数据采集模块插桩到所述Linux内核协议栈的UDP报文接收处理函数的开端处。
在本实施例中,数据采集模块插桩之前,UDP报文接收处理函数的第一条指令代码是一个占空位操作的nopl指令,数据采集模块插桩之后,nopl指令被替换成了一个函数调用指令,该函数调用指令即为本申请中的数据采集模块。完成插桩之后,当主机接收到UDP报文,UDP报文接收处理函数就会被调用,此时UDP报文接收处理函数首先会调用插桩的数据采集模块。
基于当前业界前沿eBPF技术实现在要观测的Linux内核的UDP报文接收处理函数处注册数据采集函数,实现动态插桩,无需修改和替换当前运行的Linux内核。
步骤S120,在主机接收到UDP报文时,获取所述UDP报文中的关键信息,并保存到环形缓冲区。
在本实施例中,UDP报文接收处理函数udp_rcv(struct sk_buff *skb)的第一个参数是sk_buff的指针,首先根据sk_buff的首部地址和network_header地址偏移量计算IP首部的地址。按照IP首部的结构,解析数据并获取到该UDP报文的源IP地址、目的IP地址和IP标识符的信息。然后根据sk_buff的首部地址和transport_header地址偏移量计算UDP首部的地址。按照UDP首部的结构,解析数据并获取到该UDP报文的报文长度、源端口号和目的端口号的信息。上述源IP地址、目的IP地址、IP标识符、报文长度、源端口号、目的端口号共同构成所述UDP报文中的关键信息。
其中,所述IP标识符占16个比特,源IP地址、目的IP地址、源端口号和目的端口号组成一个四元组信息,在Linux内核会为每个四元组信息确认的网络连接设置一个IP标识符,在这个网络连接上每发送一个UDP报文,IP标识符就会加1。这样就可以通过分析四元组信息对应的会话记录来判断该UDP报文是否有丢包和乱序的情况。
步骤S130,从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录。
进一步地,从环形缓冲区取出关键信息并进行分析,根据所述源IP地址、所述目的IP地址、所述源端口号和所述目的端口号匹配对应的会话记录。若匹配不到已存在的会话记录,则新建一个以所述源IP地址、所述目的IP地址、所述源端口号和所述目的端口号为关键字的会话记录。其中,所述会话记录的字段包括源IP地址、目的IP地址、源端口号、目的端口号、IP标识符滑动窗口左边界、IP标识符滑动窗口右边界、IP标识符滑动窗口状态数组、传输字节数、传输丢包数、传输乱序和重包数。
需要说明的是,所述会话记录中的源IP地址、目的IP地址、源端口号和目的端口号等同于所述UDP报文中的源IP地址、目的IP地址、源端口号和目的端口号,所述会话记录中的IP标识符滑动窗口左边界和IP标识符滑动窗口右边界等于所述UDP报文中的IP标识符。在IP协议中IP标识符的长度是16个比特,其取值范围是0到65535。会话记录中的IP标识符滑动窗口状态数组的长度也为65535个字节,IP标识符滑动窗口状态数组的工作原理是数组的序号对应到IP标识符,数组元素的值表示对应IP标识符的UDP报文是否已经收到。
例如,假设IP标识符滑动窗口状态数组的名称为A,那A[10]的值就代表IP标识符等于10的UDP报文收到与否的状态,若A[10]等于0,就表示IP标识符为10的UDP报文没有收到,若A[10]等于1,就表示IP标识符为10的UDP报文已经收到。初始时,整个IP标识符滑动窗口状态数组的值都为0,表示所有IP标识符的UDP报文都没有收到,新的会话记录中的传输字节数、传输丢包数、传输乱序和重包数都初始化为0。
巧妙地利用了IP标识符在每个由源IP地址、目的IP地址、源端口号和目的端口号组成的关键字表示的会话记录中是独立和连续的这一特点,实现了在不修改用户应用程序的情况下判断和观测UDP报文的丢包和乱序情况。
步骤S140,根据所述关键信息与所述会话记录进行流量和丢包统计,并根据统计结果更新至所述会话记录中。
具体地,将UDP报文中的报文长度累加到新建的会话记录或匹配到已有的会话记录中的传输总字节数中,完成流量统计。
进一步地,UDP报文的丢包和乱序观测的核心是IP标识符滑动窗口左、右边界和IP标识符滑动窗口状态数组。其中,IP标识符滑动窗口状态数组的序号对应到IP标识符,IP标识符滑动窗口状态数组对应序号的元素的值代表对应IP标识符的UDP报文是否已经收到。假设IP标识符滑动窗口状态数组的名称为A,那A[10]的值就代表IP标识符等于10的报文收到与否的状态,正常情况下IP标识符滑动窗口右边界对应的IP标识符是即将收到的下一个UDP报文的IP标识符。具体的判断方法如下:
(1)若所述IP标识符大于或等于所述IP标识符滑动窗口右边界,则将所述会话记录中的IP标识符滑动窗口状态数组对应的数据元素置1,然后将所述IP标识符滑动窗口右边界设置为所述IP标识符加1;利用调整后的IP标识符滑动窗口右边界减去所述IP标识符滑动窗口左边界,若大于滑动窗口阈值,则将所述IP标识符滑动窗口左边界收缩到所述滑动窗口阈值的大小。需要说明的是,滑动窗口阈值的大小可以根据实际应用场景进行设置,如5表示滑动窗口阈值的大小为5个UDP报文。进一步观测所述IP标识符滑动窗口状态数组的值,并在为0时统计到所述传输丢包数中。
如图3中,如果收缩IP标识符滑动窗口左边界,假设IP标识符滑动窗口状态数组的名称为A,IP标识符滑动窗口左边界等于2,首先判断A[2]的值是否为0,如果为0则表示IP标识符为2的UDP报文没收到,需要将会话记录的丢包数加1。之后IP标识符滑动窗口左边界加1等于3,再判断A[3]的值是否为0,同时将A[2]的值清0,这样就完成了左边界向右收缩一个UDP报文。
(2)若所述IP标识符小于所述IP标识符滑动窗口右边界的同时大于或等于所述IP标识符滑动窗口左边界,则是重包和乱序情况,将所述IP标识符滑动窗口状态数组对应的数据元素置1,并将所述传输乱序和所述重包数均加1。
(3)若所述IP标识符小于所述IP标识符滑动窗口左边界,则认为是过期了的UDP报文,可以直接忽略,所述IP标识符滑动窗口状态数组、所述传输丢包数、所述传输乱序和所述重包数均保持不变。
通过IP标识符滑动窗口左、右边界和IP标识符滑动窗口状态数组的算法能够正确进一步分析和判断丢包和乱序、重包的情况。
最后根据统计结果更新至所述会话记录中之后,还设置有一周期性定时器,并在所述周期性定时器超时,报告所有会话记录中的传输字节数、传输丢包数、传输乱序和重包数的情况。可以理解的是,在本申请实施例中,周期性定时器的超时时间是可配置的,如1秒或1分钟,具体的超时时间可根据实际情况设定,本申请实施例对此不作限定。
本申请实施例提供的基于eBPF的UDP流量和丢包观测方法,方法包括:在Linux内核协议栈的UDP报文接收处理函数处进行插桩;在主机接收到UDP报文时,获取所述UDP报文中的关键信息,并保存到环形缓冲区;从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录;根据所述关键信息与所述会话记录进行流量和丢包统计,并根据统计结果更新至所述会话记录中。本申请只需要从内核传输少量的数据,不影响业务系统,另外不需要对Linux内核和上层应用程序进行任何修改,因此在工程环境中具有很强的实用性和通用性。
实施例2
如图4所示,为本申请实施例中的一种基于eBPF的UDP流量和丢包观测系统的结构示意图,所述系统包括插桩模块10、数据采集模块20和数据分析模块30;
所述插桩模块10用于在Linux内核协议栈的UDP报文接收处理函数处进行插桩;
所述数据采集模块20用于在主机接收到UDP报文时,获取所述UDP报文中的关键信息,并保存到环形缓冲区;
所述数据分析模块30用于从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录;
所述数据分析模块30还用于根据所述关键信息与会话记录进行流量和丢包统计,并根据统计结果更新至所述会话记录中。
可选地,所述系统还包括结果报告模块40;
所述结果报告模块40用于设置周期性定时器,并在所述周期性定时器超时,报告所有会话记录中的传输字节数、传输丢包数、传输乱序和重包数的情况。
可选地,所述系统还包括BPF虚拟机、环形缓冲区和Linux内核协议栈的UDP报文接收处理函数;
如图4所示,整个系统包括由运行在Linux用户态和Linux内核态的两部分代码组成,其中,所述BPF虚拟机、所述环形缓冲区和所述Linux内核协议栈的UDP报文接收处理函数均属于Linux内核态的原生模块,所述数据采集模块20在Linux内核态中;所述插桩模块10、数据分析模块30和结果报告模块40在Linux用户态中。
本申请实施例提供的基于eBPF的UDP流量和丢包观测系统,只需要从内核传输少量的数据,不影响业务系统,另外不需要对Linux内核和上层应用程序进行任何修改,因此在工程环境中具有很强的实用性和通用性。
本申请实施例中提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现实施例1中所述的基于eBPF的UDP流量和丢包观测方法的步骤。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和结构图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,结构图和/或流程图中的每个方框、以及结构图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块或单元可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或更多个模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是智能手机、个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。
Claims (10)
1.一种基于eBPF的UDP流量和丢包观测方法,其特征在于,包括:
在Linux内核协议栈的UDP报文接收处理函数处进行插桩;
在主机接收到UDP报文时,获取所述UDP报文中的关键信息,并保存到环形缓冲区;
从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录;
根据所述关键信息与所述会话记录进行流量和丢包统计,并根据统计结果更新至所述会话记录中。
2.根据权利要求1所述的基于eBPF的UDP流量和丢包观测方法,其特征在于,所述在Linux内核协议栈的UDP报文接收处理函数处进行插桩,包括:
通过观测工具将数据采集代码进行编译,以生成BPF字节码,并通过BPF系统调用将所述BPF字节码加载到Linux内核;
利用所述Linux内核中的BPF虚拟机解析所述BPF字节码,生成对应的数据采集模块和环形缓冲区;
通过所述BPF系统调用将所述数据采集模块插桩到所述Linux内核协议栈的UDP报文接收处理函数的开端处。
3.根据权利要求1所述的基于eBPF的UDP流量和丢包观测方法,其特征在于,所述在主机接收到UDP报文时,获取所述UDP报文中的关键信息,包括:
利用所述UDP报文接收处理函数计算出IP首部地址和UDP首部地址;
解析所述IP首部地址对应的IP首部结构和所述UDP首部地址对应的UDP首部结构,以获取所述UDP报文中的关键信息,其中,所述关键信息包括源IP地址、目的IP地址、IP标识符、报文长度、源端口号和目的端口号。
4.根据权利要求3所述的基于eBPF的UDP流量和丢包观测方法,其特征在于,所述从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录,包括:
从所述环形缓冲区读取所述关键信息中的源四元组信息,并通过所述四元组信息匹配对应的会话记录;
若未匹配到已有的会话记录,则新建一个对应的会话记录,其中,所述会话记录包括源IP地址、目的IP地址、源端口号、目的端口号、IP标识符滑动窗口左边界、IP标识符滑动窗口右边界、IP标识符滑动窗口状态数组、传输字节数、传输丢包数、传输乱序和重包数。
5.根据权利要求4所述的基于eBPF的UDP流量和丢包观测方法,其特征在于,所述根据所述关键信息与所述会话记录进行流量和丢包统计,包括:
将所述报文长度累加到新建的会话记录或匹配到已有的会话记录中的传输字节数中,完成流量统计;
根据所述IP标识符、所述IP标识符滑动窗口右边界、所述IP标识符滑动窗口左边界和所述IP标识符滑动窗口状态数组,判断丢包和乱序的情况。
6.根据权利要求4所述的基于eBPF的UDP流量和丢包观测方法,其特征在于,所述根据所述IP标识符、所述IP标识符滑动窗口右边界、所述IP标识符滑动窗口左边界和所述IP标识符滑动窗口状态数组,判断丢包和乱序的情况,包括:
若所述IP标识符大于或等于所述IP标识符滑动窗口右边界,则将所述会话记录中的IP标识符滑动窗口状态数组对应的数据元素置1,然后将所述IP标识符滑动窗口右边界设置为所述IP标识符加1;
利用调整后的IP标识符滑动窗口右边界减去所述IP标识符滑动窗口左边界,若大于滑动窗口阈值,则将所述IP标识符滑动窗口左边界收缩到所述滑动窗口阈值的大小;
观测所述IP标识符滑动窗口状态数组的值,并在为0时统计到所述传输丢包数中。
7.根据权利要求4所述的基于eBPF的UDP流量和丢包观测方法,其特征在于,所述根据所述IP标识符、所述IP标识符滑动窗口右边界、所述IP标识符滑动窗口左边界和所述IP标识符滑动窗口状态数组,判断丢包和乱序的情况,包括:
若所述IP标识符小于所述IP标识符滑动窗口右边界的同时大于或等于所述IP标识符滑动窗口左边界,则将所述IP标识符滑动窗口状态数组对应的数据元素置1,并将所述传输乱序和所述重包数均加1;
若所述IP标识符小于所述IP标识符滑动窗口左边界,则所述IP标识符滑动窗口状态数组、所述传输丢包数、所述传输乱序和所述重包数均保持不变。
8.根据权利要求4所述的基于eBPF的UDP流量和丢包观测方法,其特征在于,所述根据统计结果更新至所述会话记录中之后,还包括:
设置周期性定时器,并在所述周期性定时器超时,报告所有会话记录中的传输字节数、传输丢包数、传输乱序和重包数的情况。
9.一种基于eBPF的UDP流量和丢包观测系统,其特征在于,所述系统包括插桩模块、数据采集模块和数据分析模块;
所述插桩模块用于在Linux内核协议栈的UDP报文接收处理函数处进行插桩;
所述数据采集模块用于在主机接收到UDP报文时,获取所述UDP报文中的关键信息,并保存到环形缓冲区;
所述数据分析模块用于从所述环形缓冲区读取所述关键信息并进行关键字匹配,得到会话记录;
所述数据分析模块还用于根据所述关键信息与会话记录进行流量和丢包统计,并根据统计结果更新至所述会话记录中。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-8中任一项所述的基于eBPF的UDP流量和丢包观测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211601356.1A CN116016351A (zh) | 2022-12-13 | 2022-12-13 | 基于eBPF的UDP流量和丢包观测方法、系统及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211601356.1A CN116016351A (zh) | 2022-12-13 | 2022-12-13 | 基于eBPF的UDP流量和丢包观测方法、系统及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116016351A true CN116016351A (zh) | 2023-04-25 |
Family
ID=86029519
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211601356.1A Pending CN116016351A (zh) | 2022-12-13 | 2022-12-13 | 基于eBPF的UDP流量和丢包观测方法、系统及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116016351A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116244160A (zh) * | 2023-05-09 | 2023-06-09 | 江苏博云科技股份有限公司 | 一种无侵入性能分析方法、系统、电子设备及存储介质 |
CN117527641A (zh) * | 2024-01-04 | 2024-02-06 | 柏科数据技术(深圳)股份有限公司 | 数据报文的丢包观测方法、装置、设备及存储介质 |
-
2022
- 2022-12-13 CN CN202211601356.1A patent/CN116016351A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116244160A (zh) * | 2023-05-09 | 2023-06-09 | 江苏博云科技股份有限公司 | 一种无侵入性能分析方法、系统、电子设备及存储介质 |
CN116244160B (zh) * | 2023-05-09 | 2023-08-04 | 江苏博云科技股份有限公司 | 一种无侵入性能分析方法、系统、电子设备及存储介质 |
CN117527641A (zh) * | 2024-01-04 | 2024-02-06 | 柏科数据技术(深圳)股份有限公司 | 数据报文的丢包观测方法、装置、设备及存储介质 |
CN117527641B (zh) * | 2024-01-04 | 2024-03-15 | 柏科数据技术(深圳)股份有限公司 | 数据报文的丢包观测方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116016351A (zh) | 基于eBPF的UDP流量和丢包观测方法、系统及介质 | |
EP1742416B1 (en) | Method, computer readable medium and system for analyzing and management of application traffic on networks | |
EP2556632B1 (en) | Real-time adaptive processing of network data packets for analysis | |
CN111935170A (zh) | 一种网络异常流量检测方法、装置及设备 | |
EP3282643A1 (en) | Method and apparatus of estimating conversation in a distributed netflow environment | |
CN111835681B (zh) | 一种大规模流量异常主机检测方法和装置 | |
US20110209001A1 (en) | Time modulated generative probabilistic models for automated causal discovery | |
CN111400127B (zh) | 业务日志的监控方法及装置、存储介质、计算机设备 | |
CN110191109B (zh) | 一种报文采样方法及装置 | |
CN111628900A (zh) | 基于网络协议的模糊测试方法、装置和计算机可读介质 | |
CN108880885B (zh) | 一种报文处理方法及装置 | |
EP3065343B1 (en) | Network monitoring method and apparatus, and packet filtering method and apparatus | |
CN111181800A (zh) | 测试数据处理方法、装置、电子设备及存储介质 | |
CN115037658B (zh) | 基于bpf的计量主站网络检测方法及计量主站 | |
CN114281676A (zh) | 针对工控私有协议的黑盒模糊测试方法及系统 | |
US11245712B2 (en) | Method and apparatus for generating virtual malicious traffic template for terminal group including device infected with malicious code | |
CN114124773B (zh) | 一种端口块地址转换的测试系统及方法 | |
CN111654499B (zh) | 一种基于协议栈的暴破攻击识别方法和装置 | |
CN111010362B (zh) | 一种异常主机的监控方法及装置 | |
CN112350844B (zh) | 用于数据传输的方法和装置 | |
CN113765728A (zh) | 网络探测方法、装置、设备及存储介质 | |
CN113872980B (zh) | 一种工控设备信息的识别方法、装置、存储介质和设备 | |
EP3480696A1 (en) | Adaptive event aggregation | |
JP3892322B2 (ja) | 不正アクセス経路解析システム及び不正アクセス経路解析方法 | |
CN110784337A (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 |