一种TCP/IP协议栈实现方法与流程

文档序号:17005110发布日期:2019-03-02 01:59阅读:1396来源:国知局
一种TCP/IP协议栈实现方法与流程

本发明属于计算机技术领域,涉及一种tcp/ip协议栈实现方法。



背景技术:

tcp/ip协议是实现网络通信最基本的协议,对网络数据的可靠、高效传输具有很大的影响。随着网络技术的发展,将嵌入式系统中引入tcp/ip协议具有深远的意义。传统的tcp/ip协议对接收到的数据大都是通过软件进行解析,处理,在处理网络数据传输的过程中,要占用大量的主机资源。或是完全依靠硬件资源对数据进行处理,通过硬件实现及多种加速技术复用的研究,其基本思想是:分担cpu对tcp/ip协议栈的处理,利用硬件处理速度快的优势,将部分处理过程放到高速网卡等硬件上完成。传统的处理方法对于软件和硬件的资源没有进行合理分配,加重了处理器的负荷,大大降低了数据处理的效率。



技术实现要素:

发明目的:

本发明提供一种tcp/ip协议栈实现方法,给出了行之有效的提高tcp/ip协议处理效率的实施方法。

技术方案:

一种tcp/ip协议栈实现方法,包括:

硬件分担软件协议栈处理部分工作,通过协同处理的方式,达到协议栈的实现。

包括:

步骤一、是将传输过程中的数据通过软件和硬件协同处理的方式,分配处理器资源,达到数据接收;

步骤二、是将数据通过网卡缓冲区拷贝到内核空间内存,通过协议处理,完成数据发送。

步骤一包括:

(11)当网络中有数据包传输到设备时,接收来自mii接口的数据并将其转存在fifo队列中;

(12)通过逻辑检测接收数据包的奇偶错误和最大最小数据包长度,检测帧类型并回写到接收回写描述符中,根据具体应用选择过滤掉与应用没有关联的类型的帧;

(13)交由软件执行tcp/ip协议处理,之后就得到了应用程序使用的数据,接着按照tcp/ip协议栈卸载的数据处理流程,把数据由网卡缓冲拷贝到内核空间内存,也就是主存,最后通过一次数据拷贝,将数据拷贝到用户空间交给应用程序使用;

(14)执行完tcp/ip协议,得到数据时,开始使用零拷贝技术,即将内核空间和用户空间通过映射进行共享,消除数据从内核空间拷贝到用户空间的过程。

步骤二包括:

(21)发送的数据先存储在网卡缓冲区;

(22)用户数据由用户空间拷贝到内核空间内存,再从内核空间内存拷贝到网卡缓冲区中;

(23)在网卡上经过tcp/ip协议处理,最后发送出去。

有益效果:

该方法通过软件优化和逻辑设计。这种方式使操作系统进程切换次数与协议栈层数无关,大大减少了系统开销,另外,协议栈中各层不需要单独占用缓冲区,只为协议栈分配一个公用的缓冲区,层级之间传输数据不需要将数据从一个缓冲区拷贝到另一个缓冲区,逻辑分担软件处理的工作,将硬件资源得到合理利用,减轻了处理器的负荷,大大提高了数据处理的效率。

附图说明

图1是本发明架构示意图。

具体实施方式

下面结合附图和实施例对本发明做进一步描述:

一种tcp/ip协议栈实现方法,硬件分担软件协议栈处理部分工作,通过协同处理的方式,达到高效的协议栈的实现。协议栈的实现部分包括:步骤一、高效的数据接收处理流程;步骤二、高效的数据发送处理流程。

其中步骤一、高效的数据接收处理流程:是将传输过程中的数据通过软件和硬件协同处理的方式,合理分配处理器资源,达到高效的数据接收。其具体流程描述如下:

(11)当网络中有数据包传输到设备时,接收来自mii接口的数据并将其转存在fifo队列中;

(12)通过逻辑检测接收数据包的奇偶错误和最大最小数据包长度。检测帧类型并回写到接收回写描述符中。根据具体应用选择过滤掉与应用没有关联的类型的帧。

(13)交由软件执行tcp/ip协议处理,之后就得到了应用程序使用的数据,接着按照tcp/ip协议栈卸载的数据处理流程,把数据由网卡缓冲拷贝到内核空间内存,也就是主存,最后通过一次数据拷贝,将数据拷贝到用户空间交给应用程序使用。

(14)执行完tcp/ip协议,得到数据时,开始使用零拷贝技术,即将内核空间和用户空间通过映射进行共享,消除数据从内核空间拷贝到用户空间的过程。

其中步骤二、高效的数据发送处理流程:是数据发送的逆过程。其具体流程描述如下:

(21)由于是在网卡实现的tcp/ip协议处理,那么需要发送的数据必须先存储在网卡缓冲区。

(22)此时的过程与数据接收过程相反,用户数据由用户空间拷贝到内核空间内存,再从内核空间内存拷贝到网卡缓冲区中。

(23)在网卡上经过tcp/ip协议处理,最后发送出去。整个过程与数据接收类似,其中从用户空间到内核空间的数据拷贝可以用零拷贝技术予以消除。

实施例

数据接收:在系统上电后,dma和mac均处于关闭状态,初始化函数完成对mac的复位、设置mac地址、使能相应功能位。

首先复位dma模块,初始化最大接收帧尺寸,复位mac模块,并将其设置为全双工模式。然后用已定义的mac地址初始化cam寄存器,当接收数据包时,mac模块会自动对比数据包的目的地址,与cam寄存器中的值,决定是否接收数据。

接收模块被使能后,就会监控网络上的数据流,通过硬件对监控网路上的数据进行一系列的处理如下:

当mii接口有数据到达时,mac模块会对数据包进行差错检查,包括crc检查和奇偶校验,并将检测到的数据信息通过回写描述符的形式回写到缓存中,软件通过读取回写描述符中相应的位段能够获取状态信息,如果出现错误,直接将包丢弃。若检测信息无误,则将进一步筛选与应用无关的类型的帧,通过配置,将所有协议类型的帧选择性的过滤,对应用无用的帧,为防止其过度占用系统资源,将数据包进行丢弃。

通过以上流程得到的数据包,将会交付软件进行协议处理,由于在mac层已经将接受到数据包检测出的帧类型填入到接收回写描述符中,协议层无需通过接收缓冲区得到的数据进行识别帧头,逐层解析,将解析出的数据交付下层协议处理,而是直接从接收回写描述符中获取包头信息,软件就能够直接交付下层进行相应协议的处理。在协议处理过程中,对于协议类型的帧中需要填入的长度位段信息,同样由硬件获取到填写到接收回写描述符中,协议处理过程中直接从描述符中获取,取代了复杂的软件计算。

经过检测后,mac模块认为接收到一个有效的包并将其转交给dma模块,dma模块会将其存储在接收帧描述符起始地址寄存器的数据帧所指向的一块缓冲区中,接收数据过程是由mac模块和dma模块自动完成,上层应用程序只需要在相应接收缓冲区将数据取出,然后将dma控制权交还给dma,然后将帧描述符指针转移到下一描述符位置。

数据发送:数据发送是用户的一个主动过程,发送驱动与接收驱动实现过程类似。首先要初始化发送帧描述符和发送缓冲区,然后设置发送描述符起始地址寄存器值为发送帧描述符起始地址,dma模块空闲时,会将数据发送,发送这一帧完成后,dma模块会将dma_owner位段填充为0,当要发送的数据长度小于60字节时,软件需要自动填充0。

本发明优于传统的协议栈处理的特点就是传统方式中单纯通过软件或硬件对协议栈进行的处理,通过资源互补将软硬件资源进行合理分配,使软件处理和硬件处理形成资源互补从而提高处理效率。

本发明所述方法实现了一种高效tcp/ip协议栈的方法。该方法将性能高、资源丰富的硬件资源与技术成熟、可靠性高的tcp/ip结合,提高数据包传输效率,提高了系统内核运行效率,大大节省了系统存储资源,且减少了拷贝数据占用cpu的时间,并且对符合其他通信协议的数据传输具有借鉴意义。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1