一种基于内核态协议栈的udp数据零拷贝传输方法
技术领域
1.本发明涉及网络安全技术领域,具体涉及一种基于内核态协议栈的udp数据零拷贝传输方法。
背景技术:2.在网络安全及业务可信传输的大背景下,网络中传输的数据在安全检查方面的技术是多种多样的,安全机制与传输效率之间是此消彼长的一个逆向关系。对数据内容的深层次监测,必然带来更多的系统开销和处理时延,体现在业务层面就是传输时延增大,实时性有所降低。目前在安全监察和传输效率之间优化的手段主要在:硬件性能提升、安全监测并行化处理。其存在的缺点就是带来成本上的增加和并行阻断不及时等问题。
3.传统业务应用系统层面在进行设计时,传输层目前主要应用的还是tcp和udp作为承载协议。业务安全监测的重要手段就是将传输承载协议tcp或udp做应用落地,使传输的两端之间协议断开,并进行数据实体内容检查,如何能提高落地处理效率成为优化安全监测和传输效率的一个重要手段。目前传统的技术是通过零拷贝方式实现tcp层的一个快速传输,减少了应用层和内核层之间的调度与拷贝开销,这两层的开销就是整个协议落地的主要性能消耗点。但是该技术更多的是从tcp协议层面的特性去考虑,tcp的特点是整个tcp过程一定是基于数据流,而udp是基于报文的,因此基于tcp的零拷贝技术并不适用udp承载协议。然而在安全通信要求已经不仅仅只覆盖tcp流的过程,udp的业务系统也需要提高其安全性。因此我们需要提出一种基于传统协议栈udp数据的零拷贝传输方法,从而应对用udp承载的业务系统对数据处理的安全性要求。
技术实现要素:4.针对现有技术中的上述不足,本发明提供的一种基于内核态协议栈的udp数据零拷贝传输方法,解决了udp业务系统如何兼顾逻辑处理时效性和安全性的问题。
5.为了达到上述发明目的,本发明采用的技术方案为:
6.一种基于内核态协议栈的udp数据零拷贝传输方法,包括以下步骤:
7.s1、通过网络安全设备的网卡在网络传输链路中截获使用了udp承载协议的ip报文,并将其上送至网络安全设备的内核态协议栈;
8.s2、通过内核态协议栈对步骤s1所述ip报文进行目的地址转换,并将真实目的地址添加至所述ip报文末尾,进而更新总和校验码,得到转换后的ip报文;
9.s3、通过内核态协议栈解析并检查转换后的ip报文,若转换后的ip报文解析至udp层落地且未出错,则跳转至步骤s4,若转换后的ip报文解析出错,则丢弃该转换后的ip报文,并结束;
10.s4、将解析至udp层落地且未出错的ip报文存储至应用层接收队列中;
11.s5、获取应用层接收队列中ip报文的真实目的地址和udp目标端口,并在内核态协议栈中寻找或通过udp socket连接获取对应的上下文fd;
12.s6、将步骤s5所述的ip报文的数据体放入所述的上下文fd指示的发送队列,封装成新ip报文,并通过网卡将其发送至网络传输链路中。
13.进一步地,所述步骤s1中截获的使用了udp承载协议的ip报文的字段从头到尾依次为:mac头、源地址、目的地址、总和校验码、udp协议码和数据体。
14.进一步地,所述步骤s2得到的转换后的ip报文的字段从头到尾依次为:mac头、源地址、本地地址、总和校验码、udp协议码、数据体和目的地址。
15.进一步地,所述步骤s3中通过内核态协议栈解析转换后的ip报文的方法包括以下步骤:
16.a1、通过内核态协议栈对转换后的ip报文进行mac层协议解析;
17.a2、通过内核态协议栈对步骤a1解析后的ip报文进行ip层协议解析;
18.a3、通过内核态协议栈对步骤a2解析后的ip报文进行udp层协议解析至udp层落地。
19.进一步地,所述步骤s5包括以下分步骤:
20.s51、获取应用层接收队列中ip报文的真实目的地址和udp目标端口;
21.s52、根据步骤s51所述的ip报文的真实目的地址和udp目标端口,在内核态协议栈中寻找对应的上下文fd,若找到,则跳转至步骤s6,若未找到,则跳转至步骤s53;
22.s53、在内核态协议栈中建立基于步骤s51所述的ip报文的真实目的地址和udp目标端口的udp socket连接,获取所述udp socket连接的上下文fd,并存储在内核态协议栈中。
23.进一步地,所述步骤s6中将数据体封装成新ip报文的方法包括以下步骤:
24.b1、在数据体尾部加载真实源地址;
25.b2、对步骤b1得到的序列进行udp层填充,得到字段从头到尾依次为udp协议码、数据体和源地址的序列;
26.b3、对步骤b2得到的序列进行ip层填充,得到字段从头到尾依次为本地地址、目的地址、总和校验码、udp协议码、数据体和源地址的序列;
27.b4、用步骤b3得到的序列的尾部提供的真实源地址覆盖其本地地址字段,并删除源地址字段,得到字段从头到尾依次为源地址、目的地址、总和校验码、udp协议码和数据体的序列;
28.b5、对步骤b4得到的序列进行mac层填充,得到字段从头到尾依次为mac头、源地址、目的地址、总和校验码、udp协议码和数据体的新ip报文。
29.本发明的有益效果为:
30.1)本发明所提供的方法相比于现有技术提升了基于udp协议数据落地传输的速率。
31.2)本发明缩短安全设备在链路中处理udp数据的处理时延。
32.3)本发明提供的方法无需应用层参与数据落地,整个过程均在安全设备的内核态协议栈中处理。
附图说明
33.图1为本发明实施例提供的一种基于内核态协议栈的udp数据零拷贝传输方法的
流程图;
34.图2为本发明实施例步骤s2对ip报文处理的示意图;
35.图3为本发明实施例步骤s6将数据体封装成新ip报文的示意图。
具体实施方式
36.下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
37.如图1所示,在本发明的一个实施例中,一种基于内核态协议栈的udp数据零拷贝传输方法,包括以下步骤:
38.s1、通过网络安全设备的网卡在网络传输链路中截获使用了udp承载协议的ip报文,并将其上送至网络安全设备的内核态协议栈。
39.如图2所示,该ip报文的字段从头到尾依次为:mac头、源地址、目的地址、总和校验码、udp协议码和数据体。
40.s2、通过内核态协议栈对步骤s1所述ip报文进行dnat目的地址转换,并将真实目的地址dstaddr添加至所述ip报文末尾,进而更新总和校验码checksum,得到转换后的ip报文。
41.如图2所示,得到的转换后的ip报文的字段从头到尾依次为:mac头、源地址、本地地址、总和校验码、udp协议码、数据体和目的地址。
42.s3、通过内核态协议栈解析并检查转换后的ip报文,若转换后的ip报文解析至udp层落地且未出错,则跳转至步骤s4,若转换后的ip报文解析出错,则丢弃该转换后的ip报文,并结束。
43.其中,通过内核态协议栈解析转换后的ip报文的方法包括以下步骤:
44.a1、通过内核态协议栈对转换后的ip报文进行mac层协议解析;
45.a2、通过内核态协议栈对步骤a1解析后的ip报文进行ip层协议解析;
46.a3、通过内核态协议栈对步骤a2解析后的ip报文进行udp层协议解析至udp层落地。
47.s4、将解析至udp层落地且未出错的ip报文存储至应用层接收队列中。
48.s5、获取应用层接收队列中ip报文的真实目的地址和udp目标端口,并在内核态协议栈中寻找或通过udp socket连接获取对应的上下文fd。
49.本发明实施例中,fd为内核中对socket的上下文描述,其中,udp socket为udp套接字。
50.步骤s5包括以下分步骤:
51.s51、获取应用层接收队列中ip报文的真实目的地址和udp目标端口;
52.s52、根据步骤s51所述的ip报文的真实目的地址和udp目标端口,在内核态协议栈中寻找对应的上下文fd,若找到,则跳转至步骤s6,若未找到,则跳转至步骤s53;
53.s53、在内核态协议栈中建立基于步骤s51所述的ip报文的真实目的地址和udp目标端口的udp socket连接,获取所述udp socket连接的上下文fd,并存储在内核态协议栈
中。
54.s6、将步骤s5所述的ip报文的数据体放入所述的上下文fd指示的发送队列,封装成新ip报文,并通过网卡将其发送至网络传输链路中。
55.其中将数据体封装成新ip报文的方法如图3所示,包括以下步骤:
56.b1、在数据体尾部加载真实源地址;
57.b2、对步骤b1得到的序列进行udp层填充,得到字段从头到尾依次为udp协议码、数据体和源地址的序列;
58.b3、对步骤b2得到的序列进行ip层填充,得到字段从头到尾依次为本地地址、目的地址、总和校验码、udp协议码、数据体和源地址的序列;
59.b4、用步骤b3得到的序列的尾部提供的真实源地址覆盖其本地地址字段,并删除源地址字段,得到字段从头到尾依次为源地址、目的地址、总和校验码、udp协议码和数据体的序列;
60.b5、对步骤b4得到的序列进行mac层填充,得到字段从头到尾依次为mac头、源地址、目的地址、总和校验码、udp协议码和数据体的新ip报文。
61.本发明具有如下的有益效果:
62.1)本发明所提供的方法相比于现有技术提升了基于udp协议数据落地传输的速率。
63.2)本发明缩短安全设备在链路中处理udp数据的处理时延。
64.3)本发明提供的方法无需应用层参与数据落地,整个过程均在安全设备的内核态协议栈中处理。
65.本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
66.本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
技术特征:1.一种基于内核态协议栈的udp数据零拷贝传输方法,其特征在于,包括以下步骤:s1、通过网络安全设备的网卡在网络传输链路中截获使用了udp承载协议的ip报文,并将其上送至网络安全设备的内核态协议栈;s2、通过内核态协议栈对步骤s1所述ip报文进行目的地址转换,并将真实目的地址添加至所述ip报文末尾,进而更新总和校验码,得到转换后的ip报文;s3、通过内核态协议栈解析并检查转换后的ip报文,若转换后的ip报文解析至udp层落地且未出错,则跳转至步骤s4,若转换后的ip报文解析出错,则丢弃该转换后的ip报文,并结束;s4、将解析至udp层落地且未出错的ip报文存储至应用层接收队列中;s5、获取应用层接收队列中ip报文的真实目的地址和udp目标端口,并在内核态协议栈中寻找或通过udp socket连接获取对应的上下文fd;s6、将步骤s5所述的ip报文的数据体放入所述的上下文fd指示的发送队列,封装成新ip报文,并通过网卡将其发送至网络传输链路中。2.根据权利要求1所述的基于内核态协议栈的udp数据零拷贝传输方法,其特征在于,所述步骤s1中截获的使用了udp承载协议的ip报文的字段从头到尾依次为:mac头、源地址、目的地址、总和校验码、udp协议码和数据体。3.根据权利要求2所述的基于内核态协议栈的udp数据零拷贝传输方法,其特征在于,所述步骤s2得到的转换后的ip报文的字段从头到尾依次为:mac头、源地址、本地地址、总和校验码、udp协议码、数据体和目的地址。4.根据权利要求3所述的基于内核态协议栈的udp数据零拷贝传输方法,其特征在于,所述步骤s3中通过内核态协议栈解析转换后的ip报文的方法包括以下步骤:a1、通过内核态协议栈对转换后的ip报文进行mac层协议解析;a2、通过内核态协议栈对步骤a1解析后的ip报文进行ip层协议解析;a3、通过内核态协议栈对步骤a2解析后的ip报文进行udp层协议解析至udp层落地。5.根据权利要求4所述的基于内核态协议栈的udp数据零拷贝传输方法,其特征在于,所述步骤s5包括以下分步骤:s51、获取应用层接收队列中ip报文的真实目的地址和udp目标端口;s52、根据步骤s51所述的ip报文的真实目的地址和udp目标端口,在内核态协议栈中寻找对应的上下文fd,若找到,则跳转至步骤s6,若未找到,则跳转至步骤s53;s53、在内核态协议栈中建立基于步骤s51所述的ip报文的真实目的地址和udp目标端口的udp socket连接,获取所述udp socket连接的上下文fd,并存储在内核态协议栈中。6.根据权利要求5所述的基于内核态协议栈的udp数据零拷贝传输方法,其特征在于,所述步骤s6中将数据体封装成新ip报文的方法包括以下步骤:b1、在数据体尾部加载真实源地址;b2、对步骤b1得到的序列进行udp层填充,得到字段从头到尾依次为udp协议码、数据体和源地址的序列;b3、对步骤b2得到的序列进行ip层填充,得到字段从头到尾依次为本地地址、目的地址、总和校验码、udp协议码、数据体和源地址的序列;b4、用步骤b3得到的序列的尾部提供的真实源地址覆盖其本地地址字段,并删除源地
址字段,得到字段从头到尾依次为源地址、目的地址、总和校验码、udp协议码和数据体的序列;b5、对步骤b4得到的序列进行mac层填充,得到字段从头到尾依次为mac头、源地址、目的地址、总和校验码、udp协议码和数据体的新ip报文。
技术总结本发明公开了一种基于内核态协议栈的UDP数据零拷贝传输方法,涉及网络安全技术领域,包括:通过网络安全设备的网卡在网络传输链路中截获使用了UDP承载协议的IP报文;进行目的地址转换;解析并检查转换后的IP报文;将解析至UDP层落地且未出错的IP报文存储至应用层接收队列中;获取IP报文的真实目的地址和UDP目标端口,并在内核态协议栈中寻找或通过UDP socket连接获取对应的上下文fd;将IP报文的数据体放入上下文fd指示的发送队列,封装成新IP报文,并通过网卡将其发送至网络传输链路中。本发明所提供的方法相比于现有技术提升了基于UDP协议数据落地传输的速率。于UDP协议数据落地传输的速率。于UDP协议数据落地传输的速率。
技术研发人员:芦伟 詹晋川 陈世伟 张晋 郑江泳
受保护的技术使用者:深圳市风云实业有限公司
技术研发日:2022.03.16
技术公布日:2022/7/5