一种面向以太网控制器接收链路的TCP报文拼接系统和方法与流程

文档序号:18451015发布日期:2019-08-17 01:16阅读:335来源:国知局
一种面向以太网控制器接收链路的TCP报文拼接系统和方法与流程

本发明属于计算机网络及集成电路领域,涉及一种面向以太网控制器接收链路的tcp报文拼接系统和方法。



背景技术:

为了缓解高带宽网络给计算机cpu带来的计算压力,减轻cpu对网络数据处理的负担,目前的高性能以太网控制器中都集成了多种硬件加速技术和单元来缓解网络的大流量给系统带来的压力。每种硬件加速技术通常都只针对网络数据收发处理流程中的一种具体情况,因此在实际应用中需要根据具体的应用场合和期望效果,选择合适的方法进行加速。

tso(tcpsegmentoffload)技术可以使以太网控制器在数据发送过程中更加高效、低耗,不仅加速了数据的传输,而且缓解了cpu的负担。与其他加速技术相比,tso最大的特点就是对数据进行了修改。虽然tso只是对tcp报文进行了分割和重新封装,完成了tcp分段操作,但切实减少了cpu的工作量。更重要的是,tso对数据的修改并不影响其对tcp/ip协议的兼容性,且驱动程序在协议栈和tso硬件之间构建了一座畅通的桥梁,保证了tso的操作都受到协议栈的控制。

除了tso外,目前绝大多数加速技术都不会对数据本身进行修改,而是面向一个具体的应用场合来进行优化。例如接收包分类rpi技术,其应用场合集中在用户对关键tcp报文的接收处理中;面向虚拟机优化的iov技术主要解决多虚拟机之间一个物理以太网控制器的共享问题;面向多核处理器优化的rss技术主要侧重于多核之间对网络数据处理的平衡问题。tso技术在某种程度上更贴近于toe(tcp/ipoffloadengine,tcp/ip卸载引擎)的思想,只是其仅仅实现了tcp分段操作的硬件卸载,但保持了对协议以及整个计算机体系结构的兼容。

由于tso技术需要对tcp报文进行修改,因此其在应用中有很多的限制,其中最主要的限制为:1、只支持tcp报文;2、只支持发送过程。

事实上,tso只支持tcp报文这并不应该称之为一种限制。相反,应该说tso正好利用tcp协议的特性才能得以实现。作为一种可靠的传输层协议,tcp采用了面向字节流的传输方式,传输过程中对每个字节进行了标记。这样一来,即使在发送较大数据的时候对报文进行了分割,tcp协议依然能够保证数据的连续性和正确性。tcp通过序号来标识数据字节流的顺序,这样的机制使得接收端能够轻易地判断出重复和乱序的报文,并采取相应的处理方式。这些条件都非常适合tso进行分段操作,且可以保证分段操作不会影响tcp协议的兼容性。

tso只支持发送过程是因为tcp报文只有在发送的过程中才需要分段操作。在tso对大报文进行分段后,接收方会收到多个小的tcp报文。tso对发送过程进行了加速,但是却没有考虑对端的接收过程。



技术实现要素:

本发明的目的在于克服上述现有技术的缺点,提供一种面向以太网控制器接收链路的tcp报文拼接系统和方法;该系统和方法能够保证在保持协议兼容的前提下,在接收过程中对属于同一个tcp/ip连接的报文进行拼接,不产生额外的延迟,且对上层系统保持透明。

为达到上述目的,本发明采用以下技术方案予以实现:

一种面向以太网控制器接收链路的tcp报文拼接方法,包括以下步骤:

步骤1,拼接准备工作;

在以太网控制器的信息表中设定所有能够拼接的tcp/ip连接,当以太网控制器产生中断处理时,建立tcp报文连接路径,记录接收到的tcp报文,判断接收到的tcp报文是否为信息表中设定的某一个tcp/ip连接的第一个报文;如果是第一个报文,剥离该tcp报文的头部和尾部信息,存储该tcp报文剩余的负载作为该类型的第一个tcp报文,如果否,进行步骤2;

步骤2,拼接过程;

步骤2.1,判断接收到的tcp报文属于的tcp报文类型,以及该tcp报文是否可以进行拼接;如果是,执行步骤2.2;如果否,舍弃接收到的tcp报文,或者停止拼接;

步骤2.2,剥离接收到的tcp报文的头部和尾部信息,被剥离后的负载拼接在对应的前一个tcp报文负载的尾端,合并成为一个负载;依次类推,直至tcp报文拼接结束;

步骤3,拼接结束;

步骤3.1,当tcp报文乱序到达、tcp传输完成或重置、拼接后的帧达到最大拼接长度、接收bd的使用量超过拼接阈值或拼接定时器超时时,拼接结束;

步骤3.2,拼接结束后,重新设置已完成拼接的tcp报文的tcp/ip头,完成一个链路tcp报文的拼接,将所有链路的tcp报文存储到主机中。

本发明的进一步改进在于:

优选的,步骤1.2中,当接收到的tcp报文的tcp/ip头部控制标志域中urg、rst、syn以及fin位均不为1,该报文为拼接过程中的第一个tcp报文。

优选的,步骤2.1中,判断接收到的报文是否可以进行拼接的方法为:

当接收到的tcp报文序号大于计算出的应接收的tcp报文序号时,停止拼接;

当接收到的tcp报文序号小于计算出的应接收的tcp报文序号时,舍弃接收到的tcp报文,重新接收;

当接收到的tcp报文序号等于计算出的应接收的tcp报文序号时,执行步骤2.2。

优选的,所述应接收的tcp报文序号,由tcp报文链路中的上一个tcp报文的序号和上一个tcp报文的负载长度相加得到。

优选的,步骤3.1中,所述tcp报文乱序到达标准为:接收到的tcp报文序号大于计算出的应接收的tcp报文序号。

优选的,步骤3.1中,所述tcp传输完成或重置的标准为:tcp报文的tcp/ip头部的控制标志域中cwr、ece、urg、rst、syn和fin中任意一项为1。

优选的,步骤3.1,最大拼接长度小于超长帧的长度。

优选的,步骤3.2中,所述拼接阈值为中断阈值数值的一半,所述中断阈值为以太网控制中的bd的最大使用量;所述拼接定时器为中断定时器的一半,所述中断定时器为以太网控制器中连续两个中断之间的最大时间间隔。

优选的,步骤3.2中,重新设置已完成拼接的tcp报文的tcp/ip头,包括以下内容:

设置保持不变的域,包括:ip头版本、ip头长度、ip头服务类型、ip头协议、源ip地址、目的ip地址、tcp源端口、tcp目的端口、tcp头长度、tcp头控制标志位和tcp头紧急指针;

设置需要重新计算的域,包括:ip头总长度、ip头校验和、tcp头校验和;

设置采用最新值的域,包括:ip头标识、ip头片偏移、ip头生存时间、tcp头确认序号和tcp头窗口大小;

设置采用初始值的域,包括tcp头序号。

一种面向以太网控制器接收链路的tcp报文拼接系统,包括:

规则检测模块,用于判断接收到的tcp报文是否可以进行拼接,将判断结果发送到接收队列分配模块;

接收队列分配模块,用于根据规则检测模块的判断结果,将tcp报文分配到不同类型tcp报文的路径,对于可以进行拼接的tcp报文,将其发送到tcp拼接模块;对于不能够进行拼接的tcp报文,将其直接发送到以太网控制器中的接收缓存中;

tcp拼接模块,用于完成tcp报文的拼接,并将拼接后的tcp报文发送到拼接缓存中;

拼接缓存模块,用于存放拼接结束的tcp报文。

与现有技术相比,本发明具有以下有益效果:

本发明公开了一种面向以太网控制器接收链路的tcp报文拼接方法,该方法将属于同一个tcp/ip连接的多个小段tcp报文拼接成为一个大段的tcp报文,然后再将其传递至主机内存;由于拼接的tcp报文属于同一个连接,且在拼接过程中保证tcp报文字节顺序和协议的正确,使得上层协议和驱动程序并未参与整个过程,保证在保持协议兼容的前提下,在接收过程中对属于同一个tcp/ip连接的报文进行拼接,不产生额外的延迟,因此整个过程对操作系统来说是透明的。

进一步的,该方法基于超长帧技术,解决了拼接过程中拼接后帧长限制这一问题。

进一步的,基于中断聚合技术,引入了拼接阈值和拼接定时器的概念,提出了一种不产生额外延时的计算方法;可以有效减少接收过程中的中断次数,同时也可以减少cpu对tcp协议的处理次数,从而减小cpu的工作负担。

本发明还公开了一种面向以太网控制器接收链路的tcp报文拼接系统,该系统包括规则检测模块、接收队列分配模块、tcp拼接模块和拼接缓存模块;通过各个模块的连接配合,将属于同一个tcp/ip连接的多个小段tcp报文拼接成为一个大段的tcp报文,然后再将其传递至主机内存;整个拼接过程上层协议和驱动程序并未参与整个过程,该系统可以直接集成在以太网控制器中且不需要任何系统级的修改。

【附图说明】

图1为本发明的设计原理图;

图2为本发明的tcp头部的8位控制标志位结构示意图;

其中,cwr/ece—为拥塞控制信号(rfc3168);

urg—为1表示高优先级数据包,紧急指针字段有效;

ack—为1表示确认号字段有效;

psh—为1表示带有推送标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区填满;

rst—为1表示出现严重差错,可能需要重新创建tcp连接;还可以用于拒绝非法的报文段和拒绝连接请求;

syn—为1表示连接请求或连接接受请求,用于创建连接和使顺序号同步;

fin—为1表示发送方没有数据要传输了,要求释放连接。

图3为本方法对连续报文的判断及处理流程;

图4为tcp/ip头计算方法;

图5为本方法的延时消除机制示意图;

图6为本发明的系统结构框图;

图7为本发明的拼接模块状态跳转图。

【具体实施方式】

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

本发明公开了一种面向以太网控制器接收链路的tcp报文拼接系统和方法;该系统考虑到数据接收过程的开销本来就比发送过程要大,且tcp/ip协议广泛应用在当前的网络环境中,为了进一步减轻处理器对网络数据接收处理流程中的压力,本发明公开一种面向以太网控制器接收链路的tcp报文拼接方法,能够保证在保持协议兼容的前提下,在接收过程中对属于同一个tcp/ip连接的报文进行拼接,不产生额外的延迟,且对上层系统保持透明。同时,该方法基于超长帧技术,解决了拼接过程中拼接后帧长限制这一问题;基于中断聚合技术,引入了拼接阈值和拼接定时器的概念,提出了一种不产生额外延时的计算方法;基于对tcp协议的分析,提出可拼接报文的选择机制及拼接开始、结束机制。该发明可以有效减少接收过程中的中断次数,同时也可以减少cpu对tcp协议的处理次数,从而减小cpu的工作负担。

参见图1为本发明的核心思想图,为本发明的tcp/ip接收处理过程与传统tcp/ip接收处理过程进行比较,图中a、b、c分别代表三个不同的tcp/ip连接,且1、2、3表示tcp报文的先后顺序。对于未采用本发明的以太网控制器来说,其不会对报文进行任何的修改,而是按接收顺序正常处理。因此在图1所示的例子中,接收到的6个tcp报文会依次传输到主机内存,并等待cpu一一处理。然而在采用了本发明方法后,以太网控制器会在将数据递交至主机内存之前,将属于同一个tcp/ip协议的tcp报文进行拼接。对于以太网控制器接收到的一个tcp/ip帧来说,除了以太网帧头和crc校验和外,其通常还包括ip头,tcp头以及负载。从图1中可以看出,本发明方法实际上是将多个帧中的负载合并为一个负载,并为其添加统一的ip头和tcp。这样一来,虽然以太网控制器从网络中接收到了6个tcp报文,但最终传输到主机内存中的tcp报文只有3个,从而减少了数据的传输次数和cpu对协议的处理次数。

本发明涉及到的tcp/ip协议中的tcp报文均满足以下条件:(1)标准长度以太网帧;(2)ip头部无扩展选项;(3)tcp/ip校验和均有效;(4)tcp负载不为空;(5)tcp头部无扩展选项。

本发明设计到的tcp报文拼接方法具体包括以下三个步骤:

步骤1,拼接准备工作

进行拼接的基本条件为接收到的tcp报文属于同一个tcp/ip连接。因此,在tcp/ip连接建立的同时就需要对接收到的tcp报文的信息进行记录,以便对后续接收到的tcp报文进行判断;记录tcp报文的信息为ip五元组,即源ip地址、目的ip地址,源tcp端口号、目的tcp端口号以及协议类型,其可以唯一确定网络中的一个tcp/ip连接。

在tcp报文的头部设置有一个8位的控制标志域,包括cwr、ece、urg、ack、psh、rst、syn和fin,该域中的每一位都指示着tcp报文的不同功能,如图2所示。对于接收到的tcp报文,若其tcp头部中的syn标志位为1,则本方法会提取该tcp报文的ip五元组并记录在以太网控制器中。在连接的建立过程中,tcp会使用syn标志位,因此若该位有效,则代表着一个tcp/ip连接的开始。在tcp连接建立的“三次握手”过程中,第一次“握手”中tcp报文的syn=1且ack=0;而在后两次“握手”中,连接的请求会捎带在确认应答中,因此报文中syn=1且ack=1。本质上,syn位被用来同时表示连接建立请求和连接建立确认,只是进一步用ack位来区分这两种可能的情况。

该方法记录的tcp/ip连接信息是存储在以太网控制器中的,称之为拼接表,拼接表记录着该方法所能够进行拼接的所有tcp/ip连接,引入并行拼接机制,即根据应用的需求,在拼接表中提前设定好需要进行拼接的tcp/ip连接,从而实现多个tcp/ip连接的并行拼接;连接信息在拼接表中记录完成后,tcp报文并不立刻开始拼接,而是要在以太网控制器完成一次中断请求后,才开始对接收到的tcp报文进行分析和判断;根据拼接表,对于接收到的属于同一连接的tcp报文,若其tcp头部的控制标志域中urg、rst、syn以及fin位均不为1,则该tcp报文为拼接过程中的第一个tcp报文。在对拼接的第一个tcp报文进行判断时,未考虑tcp报文的长度,因为本方法可以将多个tcp报文拼为超长帧;即,本方法在开始判断一个tcp/ip连接是否能够进行拼接时,不用考虑接收到tcp报文的长度。

综上所述,本方法的拼接开始机制可以归纳为以下三个步骤:(1)建立tcp/ip连接,并将连接信息记录在拼接表;(2)等待以太网控制器的中断请求,在中断处理完成后进行拼接开始的判断;(3)对接收到的tcp报文的信息进行提取和分析,判断是否选择其为拼接过程的第一个tcp报文,如果是第一个报文,首先从tcp/ip头中提取出一些相关信息,包括负载序号、确认序号、窗口大小以及控制标志位,并存储在以太网控制器中,然后剥离该tcp报文的头部和尾部信息,存储该tcp报文剩余的负载作为该类型的第一个tcp报文并开始随后的拼接过程。

步骤2,拼接过程

当确定拼接操作开始,则需要对接收到的tcp报文进行相应的处理。由于该方法不支持乱序tcp报文拼接,因此需要先判断报文是否连续,当报文连续时,进行正常的拼接。

(1)报文连续的判断

所谓报文连续是指tcp报文在到达接收端时没有发生乱序现象。由于多路由、并行处理、链路层重传等原因,每个报文的传输路径可能不同,时延也可能不同,因此乱序现象在现实的网络环境中不可避免。

具体来说,通过tcp头部的序号来判断报文是否连续,序号用来标记tcp传输过程中的字节。在一个tcp报文中,序号只表示该报文中数据的第一个字节,通过报文中的长度字段和序号,就可以确定出报文中每一个字节所对应的序号。序号的大小并不是总是从0开始的,而是在连接建立过程中,由收发两端确定该连接的初始序号值。在后续发送数据的过程中,tcp以这个序号值作为基值,对每个报文的序号进行标记,且序号随着每一次发送报文的大小而逐渐增大。对于接收端来说,其根据接收到tcp报文的序号和负载长度计算出确认序号。因此,确认序号表示接收端所期望的下一个报文所携带的序号。即,确认序号为之前所成功接收到的字节序号加1。

参见图3,根据tcp报文序号和确认序号的工作原理,通过上一个tcp报文序号和上一个报文序号负载的长度来计算下一个连续报文的序号。若下一个报文的序号与计算的结果相同,则报文连续;若不相同,则表示发生乱序或报文重复现象。本方法对下一个报文序号的计算方法如式1所示:

nsn=csn+lpayload=csn+(lip-lheader)

=csn+(lip-40)(1)

其中,nsn代表下一个报文的序号,csn代表当前接收到报文的序号,lpayload代表负载的长度,lip代表ip包的总长度,lheader代表tcp头和ip头的总长度。lip可以在ip头中的总长度域中直接获得。对于lheader,由于本方法的前提条件是tcp/ip头均不支持扩展选项,因此其ip头和tcp头的长度均为20字节,从而得到lheader等于40字节。

当通过上述计算方法计算的序号与接收到报文序号不相同时,其具体包括两种情况:报文乱序和报文重复。所述报文乱序是指接收到报文序号大于式(1)计算的序号,即未拼接的报文发生了乱序。当乱序现象发生时,该方法不对乱序报文进行处理,并停止当前的拼接。报文重复是指接收到报文序号小于式(1)计算的序号,即已经拼接的报文被重复接收到,对于这类报文,采取直接丢弃的处理方式,因为该报文已经完成了拼接。之所以会发生重复报文可能是因为发送端认为该报文发生了丢失而启动了重传机制。图3示出了本方法对连续报文的判断及处理流程。

(2)负载拼接过程

为了能够进行拼接,除了检测同一连接和报文连续的要求外,还需要对标志位进行检测来判断当前tcp报文是否可以进行拼接。根据前文对tcp控制标志位的介绍,8位的标志位用来表征tcp报文的类型。根据tcp协议,连接一旦建立后,在正常的数据传输过程中其控制标志位只有psh位或ack位可能为1。psh为1表示请求接收端一旦收到数据后立刻将数据送交应用程序;而ack为1表示确认序号有效。通常情况下,几乎所有的报文都会用到ack标志位,且在连接建立后的数据传输时,一般仅有ack位为1。

正常的拼接过程可以描述如下:在拼接开始之后,对于要拼接的tcp报文,首先从tcp/ip头中提取出一些相关信息,包括负载序号、确认序号、窗口大小以及控制标志位,并存储在以太网控制器中;这些相关信息除了用于记录拼接过程的状态,还会在拼接结束后重新计算tcp/ip头等;然后剥离掉该报文的尾部,即以太网帧的crc校验和,只保留头和负载部分,等待后续可拼接数据的到来。

类似地,当下一个满足拼接条件的tcp报文到达时,其tcp/ip头部的相关信息同样会被记录,但整个头部和尾部会被剥离,只保留负载部分。剥离了头部和尾部的负载会直接拼接在前一个tcp报文负载的尾端,合并成为一个负载。以此类推,对于后续到达的tcp报文,本方法采用同样的方式进行拼接。

步骤3,拼接结束

拼接结束机制为该方法中的关键部分,包括结束的原因以及相应的tcp/ip头计算方法。

1)拼接结束原因包括客观原因和主观原因,概述如下(1)、报文乱序到达;(2)、tcp传输完成或重置;(3)、拼接后的帧达到最大拼接长度;(4)、接收bd的使用量超过拼接阈值;(5)、拼接定时器超时。上述5个原因只要有一个触发,本方法中的拼接便结束拼接;上述方法中有主观原因和客观原因,主观原因为前两个,客观原因为后三个,下面具体阐述。

·客观原因

tcp报文在进行拼接时,其自身需要满足一定的拼接条件。当这些条件不满足时,本方法会结束当前的拼接。造成拼接结束的客观原因主要包括:(1)报文乱序到达;(2)tcp传输完成或重置。

为了保证拼接数据的可靠性,在发生乱序现象时,本方法会结束当前的拼接。除此之外,本方法在对接收到的tcp报文进行检测时,一旦发现除ack和psh之外,有其他的标志位为1时,本方法同样会结束当前的拼接;因为其他的标志位为1表示tcp的传输进入了其他的状态。如当rst位为1时,表明需要重置该tcp连接;当fin位为1时,表明发送端已经没有数据要传输了,即接下来需要释放连接;urg位为1表示该报文为高优先级的报文,且tcp头部的紧急指针字段有效。

·主观原因

本方法在拼接过程中需要考虑多方面的主观因素,如拼接后帧的长度,拼接是否会造成延时等,因此即使在拼接条件始终满足的情况下,本方法也不能一直进行拼接。造成本方法拼接结束的主观原因主要有3个,分别为最大拼接长度、拼接阈值以及拼接定时器。

首先,本方法需要控制拼接后帧的最大长度,简称为最大拼接长度。因为该方法采用了超长帧技术,所以最大拼接长度不能超过超长帧的长度。尽管不同厂商定义的超长帧的最大长度不尽相同,但通常来说都超过了8000字节。在整个拼接过程中,本方法需要监控当前已经拼接了的帧的长度。当下一个帧到来时,本方法首先需要判断若将该帧拼接后总帧长是否会超过最大拼接长度。若超过,则本方法不能对该帧进行拼接,并结束拼接过程。

拼接阈值和拼接定时器这两个主观原因均与是否会造成延时有关。根据以太网控制器的工作机制,当接收bd(bufferdescription,缓存描述符)的使用量达到了设置的中断阈值时,以太网控制器会产生中断,将接收到的数据一次性交付给主机处理。因此,本方法必须确保拼接在中断产生之前结束才不会产生延时。出于这个目的,本方法定义了一个拼接阈值,并设置其为中断阈值大小的一半,本方法规定当以太网控制器所使用的bd数达到拼接阈值时,结束拼接过程。这样一来,由于拼接阈值小于中断阈值,因此本方法总是会在以太网控制器产生中断前结束拼接。

拼接定时器与拼接阈值的原理类似。为了确保拼接可以在中断定时器超时之前完成,本方法还定义了一个拼接定时器。同样地,拼接定时器的时长也为中断定时器的一半。与中断定时器一样,拼接定时器在每次中断后都会恢复到设定值,并开始递减。当拼接定时器超时,本方法结束拼接过程。

综上所述,本方法的主观结束拼接原因可表述为:(1)拼接后的帧达到最大拼接长度;(2)接收bd的使用量超过拼接阈值;(3)拼接定时器超时。

2)tcp/ip头的计算

在结束拼接后,本方法需要对拼接后的tcp报文计算新的tcp/ip头。具体的计算方式如图4所示,可表述如下:

保持不变的域:ip头版本、ip头长度、ip头服务类型、ip头协议、源ip地址、目的ip地址、tcp源端口、tcp目的端口、tcp头长度、tcp头控制标志位、tcp头紧急指针。

重新计算的域:ip头总长度、ip头校验和、tcp头校验和。

采用最新值的域:ip头标识、ip头片偏移、ip头生存时间、tcp头确认序号、tcp头窗口大小。

采用初始值的域:tcp头序号。

上述整个拼接过程中涉及到两个机制,分别为延时消除机制和并行拼接机制。

·延时消除机制

由于本方法是在以太网控制器内部对接收到的tcp报文进行拼接,这个过程势必会消耗时间。本方法的出发点是为了减缓cpu负担,加速tcp/ip的接收处理过程,但若由于本方法的拼接而造成tcp报文不能及时从以太网控制器送达主机,产生额外的延时,这是完全不可接受的。因此,本方法能否具有实际应用价值的关键就是其是否能够保证不产生额外的延时。

针对此问题,我们基于中断聚合技术为本方法设计一种延时消除机制,使本方法拼接过程产生的时间被“隐藏”起来,从而保证数据能够及时从以太网控制器送达主机,不产生额外的延时。

在拼接开始机制中,要求本方法在一次中断处理完成后进行拼接开始的判断。在拼接结束机制中,我们定义了拼接阈值以及拼接定时器,其分别对应于中断聚合中的中断阈值和中断定时器。拼接阈值和拼接定时器可以保证本方法拼接过程总是在中断产生之前结束。因此,从时间的角度考虑,本方法的拼接只能在两次连续的中断之间进行,我们称两次连续中断之间的时间段为拼接区间。

由于本方法只能在拼接区间中进行,那么无论什么原因造成拼接结束,本方法均不会再开始拼接,直到进入下一个拼接区间。换句话说,本方法在一个拼接区间中只进行一次拼接,即只拼接出一个tcp报文。这样做的目的是为了保证本方法有只够的时间将数据从以太网控制器传输到主机。若在一个拼接区间内进行多次拼接,那么除了第一次拼接外,后面的拼接出的tcp报文都无法保证有足够的时间能够传输到主机。在中断产生前,本方法必须结束拼接,并且留够传输时间。本方法的延时消除机制如图5所示。从图中可以看出,拼接阈值和拼接定时器决定了以太网控制器拥有多少的时间将拼接后的tcp报文传送到主机。通常情况下,设定拼接阈值和拼接定时器的值为中断阈值和中断定时器的一半,可以保证最小传输时间满足需求。

本方法利用了中断聚合技术中的中断产生条件,保证了拼接只在连续的两次中断间进行,巧妙地将拼接过程的耗时隐藏了起来,从而不造成任何额外的延时,且整个操作对主机透明。

·并行拼接机制

考虑到硬件设计的复杂度和资源开销,并行拼接数通常是有限的。由于本方法在以太网控制器中采用硬件实现,因此并行拼接数每增加一倍,意味着硬件资源开销也需要增加一倍。

本方法提出的并行拼接机制是:根据应用的需求,提前设定好需要进行拼接的tcp/ip连接,从而实现多个tcp/ip连接的并行拼接。这种方式的好处是不仅可以确定拼接数,而且可以加快拼接过程。

本方法通过一种面向以太网控制器接收链路的tcp报文拼接系统实现上述拼接过程,如图6所示,图6中灰色模块为本方法所涉及的硬件电路模块,而其余模块为以太网控制器中的其他模块;该系统集成在以太网控制器中。

通过图6可以看出,该系统包括规则检测模块,接收队列分配模块、tcp拼接模块和拼接模块。

规则检测模块,用于对接收到的tcp报文进行判断,决定其是否为tcp报文以及是否可以进行拼接,并将判断结果发送到接收队列分配模块。

接收队列分配模块,用于根据规则检测模块的判断结果,将tcp报文分配到不同的路径,对于可以进行拼接的tcp报文,将其发送到tcp拼接模块;对于不能够进行拼接的模块,将其直接发送到以太网控制器中的接收缓存中。

tcp拼接模块,用于完成对tcp报文的拼接,并将拼接后的tcp报文发送到拼接缓存中。tcp拼接模块中包含了多个拼接模块(图中所示1~n),每个拼接模块功能相同,负责实现对具体的一个tcp/ip连接进行拼接;拼接模块的数量决定了并行拼接数,可以根据硬件开销情况和实际需求具体设定;图7为拼接模块正常工作时的状态跳转图。

拼接缓存模块主要用来存放拼接完成后的帧,其主要由双口ram组成。

实施例

根据上述方案,采用verilog语言对本发明中各个模块的逻辑设计进行描述,并将其集成在自主研发的以太网控制器芯片中进行系统级的验证。本方法中的一些基本参数需要根据以太网控制器芯片的实际情况来决定。具体来说,由于以太网控制器所支持的巨型帧最大长度为9600字节,因此在实施例中设定最大拼接长度为9000字节。类似地,由于一个bd环的数量为256,中断阈值的默认值为200,中断定时器默认值为128us,因此拼接阈值的默认值为100,拼接定时器的默认值为64us。通过仿真和fpga验证,结果表明,本发明实现了设计功能,且性能满足预期。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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