System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机报文数据处理及数据通信,尤其涉及一种基于用户态socket的收发以太二层协议报文的方法、装置及存储介质。
技术介绍
1、在linux系统下进程,如果需要通过socket收取二层协议报文的话,必须通过socket原始套接字进行处理,目前只有ip类型的报文才能做到只收指定协议类型的报文,像以太网二层报文(igmp snooping,stp报文等),只能在混杂模式下,通过raw socket接收所有类型的链路层报文帧,用户态进程通过socket收到报文后,需要对报文链路层头进行解析,然后根据具体的信息对报文进行分类,最终投递到对应的以太网二层协议报文处理函数流程中;当需要发送报文时,所有报文通过一个同种类型的socket发送报文,内核态socket收到报文后,根据携带的port信息,将报文发送出去。
2、基于现有的socket进行收发包,会存在以下问题:
3、(一)无法在链路层对报文进行精确过滤,只能全部抓取出来,然后在用户态进程中自己选取需要的报文进行处理,需要处理大量的跟对应的业务无关的报文,从而影响指定报文的处理效率。
4、(二)所有报文都从内核态投递到用户socket,这将大大占用系统cpu资源,需要消耗系统资源影响性能。当用户需要单一的二层协议报文的场景时候,使用linux现有收包机制就会存在诸多限制,例如用户只要实现mstp协议功能,此时该mstp功能模块会收到全部的链路层报文帧,处理大量的不关注的报文帧,大大降低了该进程的报文处理性能。
5、(三)用户态
技术实现思路
1、为至少部分地解决现有技术中存在的问题,本专利技术提供了一种收发以太二层协议报文的方法、装置及存储介质,具体而言,本专利技术提供了以下技术方案:
2、一方面,本专利技术提供了一种收发以太二层协议报文的方法,所述方法包括:
3、s1、配置阶段:
4、在嵌入式linux系统内核中增设wenos_layer2_module.ko模块,所述wenos_layer2_module.ko模块包括内核部分和二层协议分发处理部分;
5、内核部分在协议栈入口函数中注册内核钩子函数,用于新增二层报文处理流程;
6、所述二层协议分发处理部分通过报文注册处理函数调用所述内核钩子函数,以勾取报文;以及注册二层报文具体处理函数,所述二层报文具体处理函数用以完成报文的分发处理;以及初始化多种协议的基础信息,并注册对应的新增的二层协议socket;所述二层协议socket包括内核socket和用户态socket;
7、s2、收包阶段:
8、当所述内核部分接收到报文后,通过所述注册的内核钩子函数勾取报文,解析报文指定特征字段,基于指定特征字段将报文发送至对应类型的内核socket中;
9、用户进程创建与内核socket对应的用户态socket;当用户态socket接收到由内核socket发送的报文后,对报文有效性进行验证,验证通过后,将报文中的二层链路层头剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;
10、s3、发包阶段:
11、用户进程基于报文类型,创建对应类型的socket套接字,并构建对应类型的报文;基于报文类型将该报文发送至对应的用户态socket,并由用户态socket传输至对应的内核socket;内核socket基于报文中的端口信息,将报文发送出去。
12、优选地,所述s1中还包括:修订s1中创建的二层协议socket,使之用于收发指定类型的报文;
13、在创建socket时,在socket套接字设置中,指定报文中匹配字段的开始位置及匹配字段的长度,形成指定特征字段。
14、优选地,所述s1中还包括:所述内核钩子函数基于接收报文的指定特征字段分发协议。
15、优选地,所述内核钩子函数功能至少包括:从协议栈的入口勾取报文;对指定特征字段进行提取及匹配;以及将匹配的报文分发到对应的socket上。
16、优选地,所述s2中,基于指定字段将报文发送至对应类型的内核socket具体包括:
17、在内核socket中指定匹配字段的开始位置及匹配字段的长度,获取匹配字段的值;
18、解析报文的指定特征字段,基于所述开始位置、长度及值,进行socket类型匹配;
19、若匹配成功,则将报文的二层链路层头进行剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;若匹配不成功,则进入下一个类型的内核socket匹配环节;
20、若全部内核socket匹配后仍无匹配项,则将报文丢弃。
21、优选地,所述s2中,用户态socket创建后,还包括:
22、将创建的用户态socket绑定到具体接口,轮询收包,如果收到报文,则对报文有效性进行验证,否则继续进行轮询。
23、优选地,所述s3还包括:若端口信息不存在,则将报文丢弃。
24、第二方面,本专利技术还提供了一种收发以太二层协议报文的装置,所述装置用以实现如上所述的方法,该装置包括:
25、设置于嵌入式linux系统内核中的wenos_layer2_module.ko模块,所述wenos_layer2_module.ko模块包括内核部分和二层协议分发处理部分;
26、所述内核部分包括发包单元、报文特征提取单元以及内核socket单元;所述二层协议分发处理部分包括进程单元、二层协议报文构造单元以及用户态socket单元;
27、内核部分在协议栈入口函数中注册内核钩子函数,用于新增二层报文处理流程;所述二层协议分发处理部分通过设置报文注册处理函数调用所述内核钩子函数,以勾取报文;所述二层协议分发处理部分注册报文具体处理函数,所述报文具体处理函数用以完成报文的分发处理;
28、所述报文特征提取单元通过内核钩子函数勾取报文,并解析报文指定特征字段,基于指定特征字段将报文发送至内核socket单元中对应类型的内核socket中;
29、进程单元用于在用户态socket单元中创建与内核socket对应的用户态socket,并对接收到的报文有效性进行验证,验证通过后,将报文中的二层链路层头剥离,将剩余报文数据投递到对应的二层协议业务功能处理流程;
30、所述二层协议报文构造单元用于在发包阶段,基于报文类型,创建对应类型的socket套接字,并构建对应类型的报文;
31、所述发包单元用于在发包阶段,将接收到的来自内核socket单元的报文进行发送。
32、第三方面,本专利技术还提供了一种计算机可读存储介质,该存储介质上存储有可被本文档来自技高网...
【技术保护点】
1.收发以太二层协议报文的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述S1中还包括:
3.根据权利要求1所述的方法,其特征在于,所述S1中还包括:所述内核钩子函数基于接收报文的指定特征字段分发协议。
4.根据权利要求1所述的方法,其特征在于,所述S3中,所述内核钩子函数功能至少包括:从协议栈的入口勾取报文;对指定特征字段进行提取及匹配;以及将匹配的报文分发到对应的socket上。
5.根据权利要求2所述的方法,其特征在于,所述S2中,基于指定字段将报文发送至对应类型的内核socket具体包括:
6.根据权利要求2所述的方法,其特征在于,所述S2中,用户态socket创建后,还包括:
7.根据权利要求1所述的方法,其特征在于,所述S3还包括:若端口信息不存在,则将报文丢弃。
8.收发以太二层协议报文的装置,其特征在于,所述装置用以实现权利要求1-7任一所述的方法,该装置包括:
9.根据权利要求8所述的装置,其特征在于,所述内核socket单元以及用户态
10.一种计算机可读存储介质,其特征在于,该存储介质上存储有可被计算机读取并执行的指令,该指令被读取后可执行如权利要求1-7任一所述的收发以太二层协议报文的方法。
...【技术特征摘要】
1.收发以太二层协议报文的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述s1中还包括:
3.根据权利要求1所述的方法,其特征在于,所述s1中还包括:所述内核钩子函数基于接收报文的指定特征字段分发协议。
4.根据权利要求1所述的方法,其特征在于,所述s3中,所述内核钩子函数功能至少包括:从协议栈的入口勾取报文;对指定特征字段进行提取及匹配;以及将匹配的报文分发到对应的socket上。
5.根据权利要求2所述的方法,其特征在于,所述s2中,基于指定字段将报文发送至对应类型的内核socket具体包括:
6.根据...
【专利技术属性】
技术研发人员:朱珂,常超,张明伟,闻亮,肖峰,高庆,陈培岩,田境遴,吴乐,
申请(专利权)人:井芯微电子技术天津有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。