一种高效的TCP/IP数据报处理方法及系统技术方案

技术编号:35021272 阅读:22 留言:0更新日期:2022-09-24 22:50
本发明专利技术提出一种高效的TCP/IP数据报处理方法和系统,利用基于TCP的通信过程中由于所需要发送的数据报直接交由DMA处理,在协议栈只处理内存地址和数据大小,减少了协议栈发生的大量数据拷贝过程,从而有效的减少了该过程的时间开销,通过由于引入DMA作为内存与内存之间的数据交换,则减少了CPU的资源占用。由此可见,本发明专利技术的数据报处理方法可以有效的提高网络数据报在应用程序与网卡之间的传输速率,且节省CPU资源的占用率。且节省CPU资源的占用率。且节省CPU资源的占用率。

【技术实现步骤摘要】
一种高效的TCP/IP数据报处理方法及系统


[0001]本专利技术涉及计算机通信
,具体涉及一种高效网络报文传输方法,尤其涉及一种高效的TCP/IP(Transmission Control Protocol/Internet Protocol)数据报处理方法。

技术介绍

[0002]目前计算机的操作系统(例如Linux)在处理网络数据的一般过程是,从应用程序通过Socket接口将数据报(数据报文)交给网络协议栈,而网卡驱动程序则从网络协议栈中获取协议栈处理后的数据。但在实际场景下,与应用程序进行数据报传输的是用户态的网络协议栈,而与网卡驱动程序进行数据交互的是内核态的网络协议栈。
[0003]TCP服务端和客户端为两个进程,两者之间通过socket进行TCP/IP通信。服务端是指以本地信息建立socket并进行监听是否有socket连接的一端进程;客户端是指根据服务端本地信息而建立的socket,并以此为目标去请求连接的一端进程。
[0004]基于Socket机制进行数据报交互的内核态程序和用户态程序,无论是从用户程序到协议栈,还是从协议栈到网卡驱动程序都要发生多次数据报的拷贝过程,以现有技术常规的TCP/IP通信为例,常规的网卡数据传输会发生三次CPU参与的数据报拷贝过程:1、用户态到内核态(由socket发送给网络协议栈);2、协议栈到网卡驱动(即由网卡驱动的sk_buff接收的数据);3、网卡驱动将数据包封装为MAC帧(其中包含用户数据)。该过程则会需要大量的时间片,是网络数据报传输速率提高的主要瓶颈。因此从解决因传输过程中所需要的大量拷贝所消耗的时间片将会是提高网络数据报的传输效率的有效手段。

技术实现思路

[0005]本专利技术为了解决技术问题有两点,首先目前网络数据报传输过程中所需要的大量拷贝而带来的时间片消耗使得数据报传输速率低的问题;其次由进程间的数据拷贝带来的CPU资源占用问题。
[0006]针对现有技术的不足,本专利技术提出一种高效的TCP/IP数据报处理方法,其中包括:
[0007]当服务端应用程序发送数据时执行步骤1;当服务端应用程序接收数据时执行步骤2;
[0008]步骤1、服务端应用程序通过构建TCP服务端进程建立Socket连接,将需要发送的数据报写入DMA,得到DMA反馈的内存偏移地址和写入的数据大小,并将该内存偏移地址和数据大小,同时通过Socket接口存入网络协议栈的sk_buff,网卡驱动根据sk_buff中的内存偏移地址和数据大小,将该数据报从DMA映射到虚拟地址,该网卡驱动根据该虚拟地址读取DMA中该数据报,以替换sk_buff中部分数据,并将替换后的sk_buff封装为MAC帧数据包,物理网卡将该MAC帧发送出去;
[0009]步骤2、物理网卡接收到MAC帧数据包后,由网卡驱动将对其解包处理,得到sk_buff数据包,将该sk_buff数据报的数据部分剪切至DMA,将DMA返回的内存地址和写入的数
据大小作为sk_buff数据包的数据部分,得到替换数据包,将该替换数据包交给网络协议栈,服务端应用程序通过该网络协议栈接收该内存地址和该数据大小,该服务端应用程序将该内存地址映射为用户态的虚拟地址,该服务端应用程序访问该虚拟地址,以接收DMA中该数据报。
[0010]所述的高效的TCP/IP数据报处理方法,其中该步骤1中替换sk_buff中部分数据具体为:将sk_buff中用户数据的偏移地址加数据大小替换为从DMA中读取的数据报。
[0011]所述的高效的TCP/IP数据报处理方法,其中该DMA,用于代替网络协议栈处理用户将要发送的数据报,并通过DMA读写和管理驱动程序,为用户态的服务端应用程序提供读写接口,DMA读写和管理驱动程序包含DMA读写地址分配和冲突检测,通过分配写入地址,并且根据判断写入数据是否读出判断出该地址是否能再次被写入。
[0012]所述的高效的TCP/IP数据报处理方法,其中该网卡驱动根据所使用的设备进行移植,以适用多种网卡设备以及虚拟网卡;
[0013]在该步骤1中该网卡驱动从内核网络协议栈中获取数据包,解析数据包获取DMA写入后的偏移地址和数据大小,并将该地址映射到该网卡驱动,从而获取该服务端应用程序的数据报,对sk_buff的数据部分进行替换并封装为MAC帧格式;
[0014]在该步骤2中该网卡驱动将解析MAC帧为sk_buff,将解析到的数据写入DMA,并将从DMA反馈的内存偏移地址和数据大小替换sk_buff中对应数据,再将替换后的sk_buff交给网络协议栈处理。
[0015]本专利技术还提出了一种高效的TCP/IP数据报处理系统,其中包括:
[0016]当服务端应用程序发送数据时调用发送模块;当服务端应用程序接收数据时调用接收模块;
[0017]发送模块,用于使服务端应用程序通过构建TCP服务端进程建立Socket连接,将需要发送的数据报写入DMA,得到DMA反馈的内存偏移地址和写入的数据大小,并将该内存偏移地址和数据大小,同时通过Socket接口存入网络协议栈的sk_buff,网卡驱动根据sk_buff中的内存偏移地址和数据大小,将该数据报从DMA映射到虚拟地址,该网卡驱动根据该虚拟地址读取DMA中该数据报,以替换sk_buff中部分数据,并将替换后的sk_buff封装为MAC帧数据包,物理网卡将该MAC帧发送出去;
[0018]接收模块,用于使物理网卡接收到MAC帧数据包后,由网卡驱动将对其解包处理,得到sk_buff数据包,将该sk_buff数据报的数据部分剪切至DMA,将DMA返回的内存地址和写入的数据大小作为sk_buff数据包的数据部分,得到替换数据包,将该替换数据包交给网络协议栈,服务端应用程序通过该网络协议栈接收该内存地址和该数据大小,该服务端应用程序将该内存地址映射为用户态的虚拟地址,该服务端应用程序访问该虚拟地址,以接收DMA中该数据报。
[0019]所述的高效的TCP/IP数据报处理系统,其中该发送模块中替换sk_buff中部分数据具体为:将sk_buff中用户数据的偏移地址加数据大小替换为从DMA中读取的数据报。
[0020]所述的高效的TCP/IP数据报处理系统,其中该DMA,用于代替网络协议栈处理用户将要发送的数据报,并通过DMA读写和管理驱动程序,为用户态的服务端应用程序提供读写接口,DMA读写和管理驱动程序包含DMA读写地址分配和冲突检测,通过分配写入地址,并且根据判断写入数据是否读出判断出该地址是否能再次被写入。
[0021]所述的高效的TCP/IP数据报处理系统,其中该网卡驱动根据所使用的设备进行移植,以适用多种网卡设备以及虚拟网卡;
[0022]在该发送模块中该网卡驱动从内核网络协议栈中获取数据包,解析数据包获取DMA写入后的偏移地址和数据大小,并将该地址映射到该网卡驱动,从而获取该服务端应用程序的数据报,对sk_buff的数据部分进行替换并封装为MAC帧格式;
[本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种高效的TCP/IP数据报处理方法,其特征在于,包括:当服务端应用程序发送数据时执行步骤1;当服务端应用程序接收数据时执行步骤2;步骤1、服务端应用程序通过构建TCP服务端进程建立Socket连接,将需要发送的数据报写入DMA,得到DMA反馈的内存偏移地址和写入的数据大小,并将该内存偏移地址和数据大小,同时通过Socket接口存入网络协议栈的sk_buff,网卡驱动根据sk_buff中的内存偏移地址和数据大小,将该数据报从DMA映射到虚拟地址,该网卡驱动根据该虚拟地址读取DMA中该数据报,以替换sk_buff中部分数据,并将替换后的sk_buff封装为MAC帧数据包,物理网卡将该MAC帧发送出去;步骤2、物理网卡接收到MAC帧数据包后,由网卡驱动将对其解包处理,得到sk_buff数据包,将该sk_buff数据报的数据部分剪切至DMA,将DMA返回的内存地址和写入的数据大小作为sk_buff数据包的数据部分,得到替换数据包,将该替换数据包交给网络协议栈,服务端应用程序通过该网络协议栈接收该内存地址和该数据大小,该服务端应用程序将该内存地址映射为用户态的虚拟地址,该服务端应用程序访问该虚拟地址,以接收DMA中该数据报。2.如权利要求1所述的高效的TCP/IP数据报处理方法,其特征在于,该步骤1中替换sk_buff中部分数据具体为:将sk_buff中用户数据的偏移地址加数据大小替换为从DMA中读取的数据报。3.如权利要求1所述的高效的TCP/IP数据报处理方法,其特征在于,该DMA,用于代替网络协议栈处理用户将要发送的数据报,并通过DMA读写和管理驱动程序,为用户态的服务端应用程序提供读写接口,DMA读写和管理驱动程序包含DMA读写地址分配和冲突检测,通过分配写入地址,并且根据判断写入数据是否读出判断出该地址是否能再次被写入。4.如权利要求1所述的高效的TCP/IP数据报处理方法,其特征在于,该网卡驱动根据所使用的设备进行移植,以适用多种网卡设备以及虚拟网卡;在该步骤1中该网卡驱动从内核网络协议栈中获取数据包,解析数据包获取DMA写入后的偏移地址和数据大小,并将该地址映射到该网卡驱动,从而获取该服务端应用程序的数据报,对sk_buff的数据部分进行替换并封装为MAC帧格式;在该步骤2中该网卡驱动将解析MAC帧为sk_buff,将解析到的数据写入DMA,并将从DMA反馈的内存偏移地址和数据大小替换sk_buff中对应数据,再将替换后的sk_buff交给网络协议栈处理。5.一种高效的TCP/IP数据报处理系统,其特征在于,包括:当服务端应用程序发送数据时调用发送模块;当服务端应用程序接...

【专利技术属性】
技术研发人员:王潇南郝沁汾叶笑春范东睿
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:

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

1