CN117395329B - 收发以太二层协议报文的方法、装置及存储介质 - Google Patents
收发以太二层协议报文的方法、装置及存储介质 Download PDFInfo
- Publication number
- CN117395329B CN117395329B CN202311704391.0A CN202311704391A CN117395329B CN 117395329 B CN117395329 B CN 117395329B CN 202311704391 A CN202311704391 A CN 202311704391A CN 117395329 B CN117395329 B CN 117395329B
- Authority
- CN
- China
- Prior art keywords
- message
- socket
- kernel
- layer protocol
- function
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000012545 processing Methods 0.000 claims abstract description 76
- 238000010276 construction Methods 0.000 claims description 6
- 238000000605 extraction Methods 0.000 claims description 6
- 238000012795 verification Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 abstract description 68
- DWSYCUKCNSVBRA-UHFFFAOYSA-N 4-(5-methylsulfonyltetrazol-1-yl)phenol Chemical compound CS(=O)(=O)C1=NN=NN1C1=CC=C(C=C1)O DWSYCUKCNSVBRA-UHFFFAOYSA-N 0.000 description 4
- 101710167643 Serine/threonine protein phosphatase PstP Proteins 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000009417 prefabrication Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/324—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the data link layer [OSI layer 2], e.g. HDLC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Abstract
本发明提供了一种收发以太二层协议报文的方法、装置及存储介质,方法包括:在嵌入式linux系统内核中增加wenos_layer2_module.ko模块,所述wenos_layer2_module.ko模块包括内核部分和二层协议分发处理部分;内核部分在协议栈入口函数中注册内核钩子函数;二层协议分发处理部分通过报文注册处理函数设置报文注册处理函数调用所述内核钩子函数,以勾取报文;以及注册二层具体报文处理函数,所述二层具体报文处理函数用以完成报文的分发处理;以及初始化多种协议的基础信息,并注册对应的新增的二层协议socket。本方案不需要对无关报文进行解析,不存在未关注的其他报文的拷贝,无需将无关的报文拷贝到用户态socket,极大的简化了程序设计的复杂度且提升了程序的性能,增强了系统的报文发送效率,操作简单。
Description
技术领域
本发明涉及计算机报文数据处理及数据通信技术领域,尤其涉及一种基于用户态socket的收发以太二层协议报文的方法、装置及存储介质。
背景技术
在linux系统下进程,如果需要通过socket收取二层协议报文的话,必须通过socket原始套接字进行处理,目前只有IP类型的报文才能做到只收指定协议类型的报文,像以太网二层报文(IGMP Snooping,STP报文等),只能在混杂模式下,通过RAW socket接收所有类型的链路层报文帧,用户态进程通过socket收到报文后,需要对报文链路层头进行解析,然后根据具体的信息对报文进行分类,最终投递到对应的以太网二层协议报文处理函数流程中;当需要发送报文时,所有报文通过一个同种类型的socket发送报文,内核态socket收到报文后,根据携带的port信息,将报文发送出去。
基于现有的socket进行收发包,会存在以下问题:
(一)无法在链路层对报文进行精确过滤,只能全部抓取出来,然后在用户态进程中自己选取需要的报文进行处理,需要处理大量的跟对应的业务无关的报文,从而影响指定报文的处理效率。
(二)所有报文都从内核态投递到用户socket,这将大大占用系统CPU资源,需要消耗系统资源影响性能。当用户需要单一的二层协议报文的场景时候,使用linux现有收包机制就会存在诸多限制,例如用户只要实现MSTP协议功能,此时该MSTP功能模块会收到全部的链路层报文帧,处理大量的不关注的报文帧,大大降低了该进程的报文处理性能。
(三)用户态发送报文的时候,所有报文都投递到一个socket上,当报文数量很大的时候,由于socket缓冲区是固定,从而导致大部分时间耗在socket发包缓冲区是否为空闲的状态,这样会大大降低系统发包性能。
发明内容
为至少部分地解决现有技术中存在的问题,本发明提供了一种收发以太二层协议报文的方法、装置及存储介质,具体而言,本发明提供了以下技术方案:
一方面,本发明提供了一种收发以太二层协议报文的方法,所述方法包括:
S1、配置阶段:
在嵌入式linux系统内核中增设wenos_layer2_module.ko模块,所述wenos_layer2_module.ko模块包括内核部分和二层协议分发处理部分;
内核部分在协议栈入口函数中注册内核钩子函数,用于新增二层报文处理流程;
所述二层协议分发处理部分通过报文注册处理函数调用所述内核钩子函数,以勾取报文;以及注册二层报文具体处理函数,所述二层报文具体处理函数用以完成报文的分发处理;以及初始化多种协议的基础信息,并注册对应的新增的二层协议socket;所述二层协议socket包括内核socket和用户态socket;
S2、收包阶段:
当所述内核部分接收到报文后,通过所述注册的内核钩子函数勾取报文,解析报文指定特征字段,基于指定特征字段将报文发送至对应类型的内核socket中;
用户进程创建与内核socket对应的用户态socket;当用户态socket接收到由内核socket发送的报文后,对报文有效性进行验证,验证通过后,将报文中的二层链路层头剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;
S3、发包阶段:
用户进程基于报文类型,创建对应类型的socket套接字,并构建对应类型的报文;基于报文类型将该报文发送至对应的用户态socket,并由用户态socket传输至对应的内核socket;内核socket基于报文中的端口信息,将报文发送出去。
优选地,所述S1中还包括:修订S1中创建的二层协议socket,使之用于收发指定类型的报文;
在创建socket时,在socket套接字设置中,指定报文中匹配字段的开始位置及匹配字段的长度,形成指定特征字段。
优选地,所述S1中还包括:所述内核钩子函数基于接收报文的指定特征字段分发协议。
优选地,所述内核钩子函数功能至少包括:从协议栈的入口勾取报文;对指定特征字段进行提取及匹配;以及将匹配的报文分发到对应的socket上。
优选地,所述S2中,基于指定字段将报文发送至对应类型的内核socket具体包括:
在内核socket中指定匹配字段的开始位置及匹配字段的长度,获取匹配字段的值;
解析报文的指定特征字段,基于所述开始位置、长度及值,进行socket类型匹配;
若匹配成功,则将报文的二层链路层头进行剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;若匹配不成功,则进入下一个类型的内核socket匹配环节;
若全部内核socket匹配后仍无匹配项,则将报文丢弃。
优选地,所述S2中,用户态socket创建后,还包括:
将创建的用户态socket绑定到具体接口,轮询收包,如果收到报文,则对报文有效性进行验证,否则继续进行轮询。
优选地,所述S3还包括:若端口信息不存在,则将报文丢弃。
第二方面,本发明还提供了一种收发以太二层协议报文的装置,所述装置用以实现如上所述的方法,该装置包括:
设置于嵌入式linux系统内核中的wenos_layer2_module.ko模块,所述wenos_layer2_module.ko模块包括内核部分和二层协议分发处理部分;
所述内核部分包括发包单元、报文特征提取单元以及内核socket单元;所述二层协议分发处理部分包括进程单元、二层协议报文构造单元以及用户态socket单元;
内核部分在协议栈入口函数中注册内核钩子函数,用于新增二层报文处理流程;所述二层协议分发处理部分通过设置报文注册处理函数调用所述内核钩子函数,以勾取报文;所述二层协议分发处理部分注册报文具体处理函数,所述报文具体处理函数用以完成报文的分发处理;
所述报文特征提取单元通过内核钩子函数勾取报文,并解析报文指定特征字段,基于指定特征字段将报文发送至内核socket单元中对应类型的内核socket中;
进程单元用于在用户态socket单元中创建与内核socket对应的用户态socket,并对接收到的报文有效性进行验证,验证通过后,将报文中的二层链路层头剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;
所述二层协议报文构造单元用于在发包阶段,基于报文类型,创建对应类型的socket套接字,并构建对应类型的报文;
所述发包单元用于在发包阶段,将接收到的来自内核socket单元的报文进行发送。
第三方面,本发明还提供了一种计算机可读存储介质,该存储介质上存储有可被计算机读取并执行的指令,该指令被读取后可执行如上所述的收发以太二层协议报文的方法。
与现有技术相比,本发明技术方案具有以下有益效果:
本方案中,用户进程只需要创建对应的二层协议的socket,就能够收到指定二层协议的报文,不需要对无关报文进行解析;内核中根据业务报文特征对指定的报文进行了过滤,只将关注的报文拷贝到对应的socket中,不存在未关注的其他报文的拷贝,无需将无关的报文拷贝到用户态socket,因此相比当前内核的socket收包,本文收包的方法和装置具有以下优点:
(1)对于用户进程不存在未关注报文的处理,只需对关注的二层协议报文类型进行处理,极大的简化了程序设计的复杂度且提升了程序的性能;
(2)内核报文投递的时候,根据报文自定义字段特征对报文进行了匹配,匹配到指定的特征就投递到对应的socket上,这样大大减少了需要复制到用户态socket的报文,减少了系统资源的消耗,优化了程序的性能;
(3)用户进程进行报文发送的时候,根据报文自定义特征通过对应的socket进行报文发送,增强了系统的报文发送效率;
(4)本方案中,socket可以基于用户自定义位置与长度进行匹配,操作简单,大大降低了用户开发人员的学习成本,降低使用门槛。
本方案特别适用于一些网络设备内的对指定的二层网络协议的处理,譬如MSTP协议功能程序的开发,lacp协议功能的程序的开发等等,可以大大降低该功能模块进程的设计复杂度,在性能处理上也相对于传统linux raw socket收发包处理有大大的提升,最终二层协议软件的整体性能将得到极大的提升。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例的实现修订流程示意图;
图2为本发明实施例的整体方案流程图;
图3为本发明实施例的内核收包投递流程图;
图4为本发明实施例的用户软件收包处理流程图;
图5为本发明实施例的发包处理流程图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。应当明确,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本领域技术人员应当知晓,下述具体实施例或具体实施方式,是本发明为进一步解释具体的发明内容而列举的一系列优化的设置方式,而该些设置方式之间均是可以相互结合或者相互关联使用的,除非在本发明明确提出了其中某些或某一具体实施例或实施方式无法与其他的实施例或实施方式进行关联设置或共同使用。同时,下述的具体实施例或实施方式仅作为最优化的设置方式,而不作为限定本发明的保护范围的理解。
本发明提出的方案特别适用于一些网络设备内的对指定二层网络协议的处理,例如MSTP协议功能程序的开发、lacp协议功能程序的开发等,可以大大降低该功能模块进程的设计复杂度,在性能处理上也相对于传统linux raw socket收发包处理有很大的提升,最终二层协议软件的整体性能将得到极大的提升,本方案在实际应用中效果显著。
以下,在本实施例中,对本方案提出的基于用户态socket的接收以太网二层协议报文的方法及装置展开进行阐述。
现有linux操作系统中,当网卡收取到数据帧以后,首先会以DMA的方式把网卡收到的帧写到内存里。再向CPU发起一个中断,以通知CPU有数据到达。当CPU收到中断请求后,会去调用网络驱动注册的中断处理程序。网卡的中断处理函数并不做过多工作,发出软中断请求,然后尽快释放CPU。Ksoftirqd(即内核软中断进程)检测到有中断请求到达,调用poll开始轮询收包,收到后交由各级协议栈处理(例如协议栈入口函数__netif_receive_skb_core);发包流程与之相反。在这一基础上,增加本方案的收发以太二层协议报文的具体方法。
一、本实施例中,接收以太网二层协议的预制条件如下:
在协议栈入口函数中注册二层协议bridge钩子函数,进行初始化,注册新增的二层具体协议socket等,具体方式参考图1,实施方式如下:
在嵌入式linux系统内核中新增wenos_layer2_module.ko模块(即自定义二层协议处理模块)。可分为kernel(即内核)部分和layer2_module(二层协议分发处理)部分,关键修改如下:
(1)kernel通过修改协议栈入口函数,例如netif_receive_skb_core,通过在协议栈收包的入口函数中注册内核钩子函数,如wenos_handle_frame_hook,内核钩子函数内部根据接收报文帧的目的mac地址分发到与用户空间对应的socket上,例如stp等协议。本实施例中,内核钩子函数至少需要配置如下的功能:a、能够从协议栈的入口勾取报文;b、能够对创建的二层协议socket时指定的要匹配的特征,进行字段提取匹配;c、预先要修订增加二层协议类型socket;d、可以对匹配的报文分发到具体的二层协议socket上。
(2)layer2_module(即二层协议分发处理部分)中调用注册过的内核钩子函数,例如在该部分设置register_wenos_handle_frame_hook(即报文注册处理函数),用于挂接钩子函数,勾取报文帧;在报文注册处理函数中注册二层bridge钩子函数,即报文处理函数,例如br_handle_frame(即报文处理函数),此函数用于具体的报文帧的分发处理。初始化lldp、stp等协议的基础信息,然后分别注册协议socket等。
(3)修订二层协议socket,将二层协议socket创建的时候可以指定自定义的字段匹配,即在socket中,可以指定报文的开始位置,以及要匹配的长度,这样就可以灵活匹配报文的任意字段。所述二层协议socket包括内核socket和用户态socket。
二、整体收发报文处理流程
参考图2、图4及图5所示,本实施例中,报文的整体收发流程如下:
(1)当报文已经接收到内核中,通过上述部分“一”中新增的报文注册处理函数register_wenos_handle_frame_hook,将报文勾取出来,然后解析报文指定字段,在创建socket的时候指定要匹配的报文开始位置与要匹配的长度,将匹配的报文投递到对应的报文类型的socket中;指定字段根据实际的需求来确定,例如如果是要匹配mac字段的话,开始位置和长度就是固定的,也可以不按标准字段来,定义任意字节的树的匹配方式;
(2)用户进程创建与内核中新增的二层协议socket(即内核socket)对应的用户态socket,监听接收方向的报文,当监听socket收到对应的报文后,对报文有效性进行验证,只需要按对应的二层协议报文格式进行分析(例如分析出在创建socket时指定的匹配信息),然后将二层链路层头剥掉,将剩余报文字节数据作为业务数据部分信息,最终投递到具体对应的二层协议业务功能处理流程中。创建用户态socket的过程与内核socket类似,同样增加自定义字段的匹配,此外,用户态socket中增加二层协议的类型,例如lldp,mstpsocket类型等;
(3)用户发包流程则与收包流程方向是相反的,首先用户进程根据需要发送的报文的类型,创建对应类型的新增socket套接字,然后构造对应类型的报文(构造报文时已经是在用户态socket上了),将报文投递到对应的内核socket上,内核socket根据报文携带的端口信息,将报文发送出去。
本实施例中,自定义字段匹配可以覆盖传统的标准的报文类型匹配。第(3)部分中,创建新增socket套接字时,需要增加两个基本的功能,即指定匹配开始位置和要匹配的字段长度。
三、内核收包过滤投递流程
结合图3所示,内核从驱动拿到报文后,最终调用钩子函数,解析报文帧中自定义帧的字节位置,自定义帧是在用户态socket创建时指定(如上文所记载),然后如果匹配上对应的字节,就投递到具体对应的socket上。我们以stp报文的接收为例,对投递的过程进行阐述如下:
假设在用户进程中想要通过socket接收stp报文,则:
(1)创建stp类型的socket,并指定匹配字段开始位置为0,长度为6(即0-5字节),值为0x0180c2000000;此处,值和字段位置的具体设置,可以依据用户的要求而调整,此处仅是作为示例。
(2)此时内核soket收到报文(此时的报文尚未进行匹配),解析报文目的mac,匹配报文的0-5字节,匹配的过程,可以采用例如逐级判断或匹配的方式,直至匹配到值为0x0180c2000000,即找到目的类型的socket上,此时,将二层头部进行剥离,将剩余部分投递到用户态的stp类型的socket上;如果当前一级的字节不匹配,则进入下一个匹配环节,直至匹配到目的类型的socket上;若最终没有匹配项,则把报文进行丢弃。
(3)用户态的stp socket收到报文后,进行相应的业务流程处理。
四、用户进程收包流程
参考图4,为本实施例的用户进程收包流程,具体过程如下:
(1)首先创建对应业务功能二层协议的socket(即用户态socket),例如进程要实现一个stp报文的业务功能等;将创建的用户态socket绑定到具体的接口;使用recv函数轮询收包,如果收到报文,进行报文有效性验证;如果没有收到报文,继续跳到轮询收包环节;
(2)在报文有效性验证通过后,进行报文业务字段解析;交由具体的业务流程进行处理;流程结束。
五、进程向网络发包流程
参考图2及图5,进程的发包流程具体包括:
(1)首先,用户进程根据需要发送的报文的类型,创建对应类型的协议socket(即用户态socket);
(2)构造对应协议的报文;
(3)使用创建的协议socket(即创建的用户态socket)将构造的报文发送到内核;
(4)内核中的socket收到报文后,解析报文携带的端口信息;
(5)如果端口存在,则将报文从指定端口发送出去;端口存在的判断,可以直接通过物理的端口号判断来实现;
(6)如果端口不存在,则将报文丢弃。
在又一个实施例中,结合图2所示,本方案还可以通过一种收发以太二层协议报文的装置的方式来实现,以质性如上一实施例中所提出的收发以太二层协议报文的方法,结合图2所示,该装置包括:
设置于嵌入式linux系统内核中的wenos_layer2_module.ko模块,所述wenos_layer2_module.ko模块包括内核部分和二层协议分发处理部分;
所述内核部分包括发包单元、报文特征提取单元以及内核socket单元;所述二层协议分发处理部分包括进程单元、二层协议报文构造单元以及用户态socket单元;
内核部分在协议栈入口函数中注册内核钩子函数;所述二层协议分发处理部分通过设置报文注册处理函数调用所述内核钩子函数,以勾取报文;所述二层协议分发处理部分注册报文处理函数,所述报文处理函数用以完成报文的分发处理;
所述报文特征提取单元通过内核钩子函数勾取报文,并解析报文指定字段,基于指定字段将报文发送至内核socket单元中对应类型的内核socket中;
进程单元用于在用户态socket单元中创建与内核socket对应的用户态socket,并对接收到的报文有效性进行验证,验证通过后,将报文中的二层链路层头剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;
所述二层协议报文构造单元用于在发包阶段,基于报文类型,创建对应类型的socket套接字,并构建对应类型的报文;
所述发包单元用于在发包阶段,将接收到的来自内核socket单元的报文进行发送。
在一个更优的实施方式中,所述内核socket单元以及用户态socket单元均包含多种类型协议,例如包括stp类型的socket、lacp类型的socket等。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本方案的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本方案的实施方式所属技术领域的技术人员所理解。处理器执行上文所描述的各个方法和处理。例如,本方案中的方法实施方式可以被实现为软件程序,其被有形地包含于机器可读介质,例如存储器。在一些实施方式中,软件程序的部分或者全部可以经由存储器和/或通信接口而被载入和/或安装。当软件程序加载到存储器并由处理器执行时,可以执行上文描述的方法中的一个或多个步骤。备选地,在其他实施方式中,处理器可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行上述方法之一。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,可以具体实现在任何可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.收发以太二层协议报文的方法,其特征在于,所述方法包括:
S1、配置阶段:
在嵌入式linux系统内核中增设wenos_layer2_module.ko模块,所述wenos_layer2_module.ko模块包括内核部分和二层协议分发处理部分;
内核部分在协议栈入口函数中注册内核钩子函数,用于新增二层报文处理流程;
所述二层协议分发处理部分通过报文注册处理函数调用所述内核钩子函数,以勾取报文;以及注册二层报文具体处理函数,所述二层报文具体处理函数用以完成报文的分发处理;以及初始化多种协议的基础信息,并注册对应的新增的二层协议socket;所述二层协议socket包括内核socket和用户态socket;
S2、收包阶段:
当所述内核部分接收到报文后,通过所述注册的内核钩子函数勾取报文,解析报文指定特征字段,基于指定特征字段将报文发送至对应类型的内核socket中;
用户进程创建与内核socket对应的用户态socket;当用户态socket接收到由内核socket发送的报文后,对报文有效性进行验证,验证通过后,将报文中的二层链路层头剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;
S3、发包阶段:
用户进程基于报文类型,创建对应类型的socket套接字,并构建对应类型的报文;基于报文类型将该报文发送至对应的用户态socket,并由用户态socket传输至对应的内核socket;内核socket基于报文中的端口信息,将报文发送出去。
2.根据权利要求1所述的方法,其特征在于,所述S1中还包括:
修订S1中创建的二层协议socket,使之用于收发指定类型的报文;
在创建socket时,在socket套接字设置中,指定报文中匹配字段的开始位置及匹配字段的长度,形成指定特征字段。
3.根据权利要求1所述的方法,其特征在于,所述S1中还包括:所述内核钩子函数基于接收报文的指定特征字段分发协议。
4.根据权利要求1所述的方法,其特征在于,所述S3中,所述内核钩子函数功能至少包括:从协议栈的入口勾取报文;对指定特征字段进行提取及匹配;以及将匹配的报文分发到对应的socket上。
5.根据权利要求2所述的方法,其特征在于,所述S2中,基于指定字段将报文发送至对应类型的内核socket具体包括:
在内核socket中指定匹配字段的开始位置及匹配字段的长度,获取匹配字段的值;
解析报文指定特征字段,基于所述开始位置、长度及值,进行socket类型匹配;
若匹配成功,则将报文的二层链路层头进行剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;若匹配不成功,则进入下一个类型的内核socket匹配环节;
若全部内核socket匹配后仍无匹配项,则将报文丢弃。
6.根据权利要求2所述的方法,其特征在于,所述S2中,用户态socket创建后,还包括:
将创建的用户态socket绑定到具体接口,轮询收包,如果收到报文,则对报文有效性进行验证,否则继续进行轮询。
7.根据权利要求1所述的方法,其特征在于,所述S3还包括:若端口信息不存在,则将报文丢弃。
8.收发以太二层协议报文的装置,其特征在于,所述装置用以实现权利要求1-7任一所述的方法,该装置包括:
设置于嵌入式linux系统内核中的wenos_layer2_module.ko模块,所述wenos_layer2_module.ko模块包括内核部分和二层协议分发处理部分;
所述内核部分包括发包单元、报文特征提取单元以及内核socket单元;所述二层协议分发处理部分包括进程单元、二层协议报文构造单元以及用户态socket单元;
内核部分在协议栈入口函数中注册内核钩子函数,用于新增二层报文处理流程;所述二层协议分发处理部分通过设置报文注册处理函数调用所述内核钩子函数,以勾取报文;所述二层协议分发处理部分注册报文具体处理函数,所述报文具体处理函数用以完成报文的分发处理;
所述报文特征提取单元通过内核钩子函数勾取报文,并解析报文指定特征字段,基于指定特征字段将报文发送至内核socket单元中对应类型的内核socket中;
进程单元用于在用户态socket单元中创建与内核socket对应的用户态socket,并对接收到的报文有效性进行验证,验证通过后,将报文中的二层链路层头剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;
所述二层协议报文构造单元用于在发包阶段,基于报文类型,创建对应类型的socket套接字,并构建对应类型的报文;
所述发包单元用于在发包阶段,将接收到的来自内核socket单元的报文进行发送。
9.根据权利要求8所述的装置,其特征在于,所述内核socket单元以及用户态socket单元均包含多种类型协议。
10.一种计算机可读存储介质,其特征在于,该存储介质上存储有可被计算机读取并执行的指令,该指令被读取后可执行如权利要求1-7任一所述的收发以太二层协议报文的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311704391.0A CN117395329B (zh) | 2023-12-13 | 2023-12-13 | 收发以太二层协议报文的方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311704391.0A CN117395329B (zh) | 2023-12-13 | 2023-12-13 | 收发以太二层协议报文的方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117395329A CN117395329A (zh) | 2024-01-12 |
CN117395329B true CN117395329B (zh) | 2024-02-06 |
Family
ID=89437826
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311704391.0A Active CN117395329B (zh) | 2023-12-13 | 2023-12-13 | 收发以太二层协议报文的方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117395329B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117651084B (zh) * | 2024-01-26 | 2024-04-19 | 井芯微电子技术(天津)有限公司 | 一种异构协议报文处理方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103428226A (zh) * | 2013-08-30 | 2013-12-04 | 天津汉柏汉安信息技术有限公司 | 一种用户态与内核通信的方法与系统 |
CN108650295A (zh) * | 2018-03-30 | 2018-10-12 | 深圳市风云实业有限公司 | 协议报文跨层通信方法装置及电子设备 |
CN108712459A (zh) * | 2018-03-30 | 2018-10-26 | 深圳市风云实业有限公司 | 协议报文跨层通信方法、装置及电子设备 |
CN110535813A (zh) * | 2018-05-25 | 2019-12-03 | 网宿科技股份有限公司 | 内核态协议栈与用户态协议栈并存处理方法和装置 |
CN115396194A (zh) * | 2022-08-25 | 2022-11-25 | 武汉烽火技术服务有限公司 | 一种为用户态网络协议栈提供防火墙功能的方法和系统 |
WO2022251998A1 (zh) * | 2021-05-31 | 2022-12-08 | 华为技术有限公司 | 支持多协议栈的通信方法及系统 |
CN117041379A (zh) * | 2023-07-10 | 2023-11-10 | 中科驭数(北京)科技有限公司 | 同时监听用户态协议栈和内核态协议栈新建连接的方法及装置 |
-
2023
- 2023-12-13 CN CN202311704391.0A patent/CN117395329B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103428226A (zh) * | 2013-08-30 | 2013-12-04 | 天津汉柏汉安信息技术有限公司 | 一种用户态与内核通信的方法与系统 |
CN108650295A (zh) * | 2018-03-30 | 2018-10-12 | 深圳市风云实业有限公司 | 协议报文跨层通信方法装置及电子设备 |
CN108712459A (zh) * | 2018-03-30 | 2018-10-26 | 深圳市风云实业有限公司 | 协议报文跨层通信方法、装置及电子设备 |
CN110535813A (zh) * | 2018-05-25 | 2019-12-03 | 网宿科技股份有限公司 | 内核态协议栈与用户态协议栈并存处理方法和装置 |
WO2022251998A1 (zh) * | 2021-05-31 | 2022-12-08 | 华为技术有限公司 | 支持多协议栈的通信方法及系统 |
CN115396194A (zh) * | 2022-08-25 | 2022-11-25 | 武汉烽火技术服务有限公司 | 一种为用户态网络协议栈提供防火墙功能的方法和系统 |
CN117041379A (zh) * | 2023-07-10 | 2023-11-10 | 中科驭数(北京)科技有限公司 | 同时监听用户态协议栈和内核态协议栈新建连接的方法及装置 |
Non-Patent Citations (1)
Title |
---|
一种优化的内核态文件发送方法;屠雪真;计算机与现代化;20190531;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117395329A (zh) | 2024-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117395329B (zh) | 收发以太二层协议报文的方法、装置及存储介质 | |
CN102104541B (zh) | 报头处理引擎 | |
WO2019233179A1 (zh) | 一种数据报文的检测方法、设备及系统 | |
CN111083161A (zh) | 数据传输的处理方法及装置、物联网设备 | |
KR101696206B1 (ko) | 통신 네트워크의 엔티티의 적어도 하나의 부품을 비활성화하는 방법, 대응하는 장치 및 컴퓨터 프로그램 | |
CN111800226B (zh) | 一种基于硬件仲裁的边带管理电路及方法 | |
CN113595931A (zh) | 一种报文处理方法、装置、设备及存储介质 | |
JP4071098B2 (ja) | ネットワークフィルタドライバのためのアーキテクチャおよびランタイム環境 | |
CN115484047A (zh) | 云平台中的泛洪攻击的识别方法、装置、设备及存储介质 | |
CN102801726B (zh) | 通信系统以及客户端与服务端之间的通信方法 | |
EP2840838B1 (en) | Network discovery method, access point, and terminal device | |
CN116991142A (zh) | 基于模块化uds协议的汽车诊断服务方法及系统 | |
US11855888B2 (en) | Packet verification method, device, and system | |
CN111064768A (zh) | 打印机数据传输控制方法、装置、设备及存储介质 | |
CN113162911B (zh) | 基于sdn网络控制器的多协议兼容的数据交互方法及装置 | |
WO2009003398A1 (fr) | Procédé et dispositif de simulation de canal de communication numérique série asynchrone | |
US7143173B2 (en) | Autodetection of routing protocol version and type | |
CN105245471A (zh) | 报文发送方法及报文发送装置 | |
WO2014187348A1 (zh) | 报文处理方法和装置 | |
JP2009188623A (ja) | ネットワーク中継装置およびネットワーク中継方法 | |
US7428242B2 (en) | Action list for a split media access and control layer communications system | |
CN111294344A (zh) | 数据转发的控制系统、方法、电子设备及存储介质 | |
JP4377033B2 (ja) | データ転送制御方法及びその装置 | |
CN104038426A (zh) | 网络交换器与数据更新方法 | |
CN115665042B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |