一种报文分片发送的方法、装置和网络设备的制作方法

文档序号:7768740阅读:210来源:国知局
专利名称:一种报文分片发送的方法、装置和网络设备的制作方法
技术领域
本发明涉及计算机网络通信技术领域,尤其涉及一种报文分片发送的方法、装 置和网络设备。
背景技术
分片是指一个IP数据报文被分成几个IP分片报文进行传输,然后接收端会根据 收到的分片报文进行IP报文重组。因为每种物理网络设备接口一般会规定链路层数据帧 的最大长度,称之为最大传输单元(Maximum TransmissionUnit,MTU)。实际上IP协议 工作时,如果IP数据域和IP帧头的总长度超过MTU的数值时,则将这个数据报文分成 若干分片包进行传输,并会在目标系统中进行重组。分片重组解决了异构网络数据传输 问题,但也引入很多其他方面的问题。IP报文的分片和重组过程对于传输层是透明的,需要IP层参与完成。对于TCP/IP协议来说,一般使用一种称之为套接字缓冲区(socket buffer,skb) 的形式来组织数据报文,在IP层对报文进行分片过程大体有如下几个步骤1、当IP层当收到传输层的报文时,根据输出网络接口的MTU,将超过MTU长
度的应用数据分割开,并根据需要分片的数量,申请多个skb,将这些skb放入套接字发 送缓冲队列。2、随后IP层的处理函数会将套接字发送缓冲队列中的所有skb,组织成链表的 形式挂接到第一个skb的分片队列(fragjist),再给第一个skb中加入IP帧头,这个时候 并未执行真正的分片操作,所有的应用数据都还在第一个skb中。3、将第一个skb的应用数据分别拷贝至分片队列中的各skb中,并在各skb中分 别加入IP帧头,形成分片后的IP报文,然后将带有IP帧头的分片报文压入通信接口的发 送队列,由网络接口将各分片报文挂接并执行发送的步骤。分片措施有利于IP报文的传输,但是现有的分片过程不仅复杂还会给网络设备 的系统性能带来影响;在网络接口数据高速收发时,如果同时在IP层进行报文分片操 作,该操作涉及从一个较长报文到小于MTU的多个报文的内存之间的多次拷贝,假设一 个长包需要分片为三个等于MTU的报文(最后一个可能小于MTU),且网络接口为以太 接口的话,其MTU—般是1500字节,所以这个长报文需要CPU进行字节拷贝的次数为 1500*3 = 4500次;如果传输层向下传输的报文都为这种长包的话,则需要拷贝的次数将 很高;这在网络设备高吞吐率和高转发率情况下,占用CPU和存储器的带宽是相当可观 的,势必和系统的报文收发抢占CPU和总线带宽,这样可能会导致网络设备收发包的延 迟,丢包率增高;如果在设备中进行这种大量的分片报文操作,系统的性能可能会受到 比较严重的影响。

发明内容
本发明实施例提供了一种报文分片发送的方法、装置和网络设备,用以解决现有对报文分片进行传输的方法所带来的过度占用CPU和存储器的带宽导致影响系统性能 的问题。本发明实施例提供的一种报文分片发送的方法,包括在IP层对传输层传递过来的报文进行处理,并在处理过程中避免对报文进行分 片操作;将IP层处理完成的报文经由数据链路层处理后,送达发送该报文的通信接口 ;将数据链路层处理后的报文的长度值与该接口的最大传输单元MTU的值进行比 较·’并在所述长度值大于所述MTU的值时,将所述数据链路层处理后的报文按照MTU 的值进行分片后经由通信接口发送。本发明实施例提供的一种报文分片发送的装置,包括IP层处理单元,用于在IP层对传输层传递过来的报文进行处理,并在处理过程 中避免对报文进行分片操作;报文传递单元,用于将IP层和数据链路层处理完成后的报文,送达发送该报文 的通信接口;报文发送单元,用于将数据链路层处理后的报文的长度值与该接口的最大传输 单元MTU的值进行比较;并在所述长度值大于所述MTU的值时,将所述数据链路层处 理后的报文按照MTU的值进行分片后经由通信接口发送。本发明实施例提供的一种网络设备,包括本发明实施例提供的上述报文分片发 送的装置。本发明实施例的有益效果包括本发明实施例提供的报文分片发送的方法、装置和网络设备,在IP层对传输报 文进行处理时,避免对报文进行分片操作,在IP层处理完成的报文经数据链路层处理 后,送达该报文的通信接口,在该报文的长度大于该接口的MTU值时,将该报文按照 MTU的值进行分片后经由通信接口发送,本发明实施例在IP层直接将完整的报文直接 传递到数据链路层,避免由CPU参与的占用较多存储器带宽的拷贝操作,在通信接口再 将报文进行分片操作后发送,与现有技术相比,一方面简化了对较长报文分片发送的流 程,另外一方面避免了 IP层分片对CPU和存储带宽的过度占用所带来影响系统性能的问 题。并且,对于传输出现错误的报文,在接收端的通信接口不需要进行报文重组就可以 监测到,提高了报文重发的效率,减少了重发的时延。


图1为本发明实施例提供的报文分片发送的方法的流程图;图2为本发明实施例提供的报文分片的实例的示意图;图3为本发明实施例提供的DMA描述符的格式的示意图;图4为本发明实施例提供的报文分片发送装置的结构示意图。
具体实施例方式下面结合附图,对本发明实施例提供的一种报文分片发送的方法、装置和网络 设备的具体实施方式
进行详细地说明。
本发明实施例提供的报文分片发送方法,如图1所示,包括如下几个步骤SlOU在IP层对传输层传递过来的报文进行处理,并在处理过程中避免对报文 进行分片操作;S102、将IP层处理完成的报文传递到数据链路层进行相应处理;S103、将数据链路层处理完成的报文送达发送该报文的通信接口 ;S104、将数据链路层处理后的报文的长度值与该接口的MTU的值进行比较;若 数据链路层处理后的报文的长度值比MTU的值大,执行下述步骤S105;否则执行下述 步骤S106 ;S105、将数据链路层处理后的报文按照MTU的值进行分片后经由通信接口发 送;S106、将数据链路层处理后的报文不进行分片发送。上述步骤SlOl中,在IP层,除了与现有技术相同的处理流程例如增加IP帧头 等处理流程之外,不同之处在于,改变了现有IP层对报文进行分片处理的相关流程,在 IP层避免对报文长度超过MTU的报文进行分片处理。为了达到在IP层避免对报文进行分片处理的目的,本发明实施例在IP层配置命 令中增加避免对传输层传递过来的报文进行分片的设置项以及在IP层分片函数中设定不 将传输层传递过来的报文与MTU的值进行比较。这样,不论长度如何的报文到达IP层 之后,不再进行是否进行分片的判断,更不会对于长度大于MTU的报文进行分片处理。当然在IP层处理的过程中,为了避免对IP报文分片,还需要能够存储较长报文 的具有较大缓冲区(buffer)的skb作为支持。上述步骤S102中,在数据链路层对报文的处理过程与现有技术相同,执行例如 在报文之前增加链路帧头的操作等,具体流程在此不再详述。在上述步骤S104和S105中,在数据报文到达通信接口后,由驱动层执行将数据 链路层处理后的报文的长度值与该接口的MTU的值进行比较,并将长度大于MTU的报 文进行分片发送的过程。驱动层的处理过程,在判断报文的总长度大于MTU的值时,具 体来说,即根据报文的总长度值和MTU的值的大小确定需要分片的数量、分片后各数据 段的长度值以及各数据段对应的偏移量;分片后每个数据段的长度不大于该接口 MTU的 值;根据确定出来的需要分片的数量、分片后各数据段的长度值以及各数据段对应的偏 移量,将报文的各数据段依次从所在的存储器中拷贝至通信接口的缓冲区并发送。举例说明,如图2所示,假设某个经过IP层、数据链路层处理完成的报文的长 度为4200字节,该接口的MTU为1500字节,那么根据两者长度的比值可知,需要分片 的数量是3片,也就是该报文需要分为3段进行发送,较佳地,从报文头开始的第一段和 第二段的长度分别等于MTU的值1500字节,最后一段稍小为1200字节。确定了分片的数量、分片后各数据段的长度和各数据段对应的偏移量(offset), 就可以从存储该报文的存储器的相应的地址,逐个将报文中的三个数据段拷贝到通信接 口的缓冲区发送出去。上述在通信接口对报文进行分片的过程,与现有技术在IP层对报文处理的过 程并不相同,现有技术在IP层对报文进行处理时,需要针对以skb形式存在的长度大于 MTU的报文,分别按照需要分片的数量,申请多个大小不大于MTU的较小skb,然后分片函数会多次执行将数据从原来报文的Skb与申请到的Skb之间进行次数可观的拷贝操 作,这种拷贝操作不仅需要CPU参与下达复杂指令,并且需要占用较多的存储器带宽, 在分片后的IP报文(分片之后每个报文都是一个独立的IP报文,具有自己的IP帧头)到 达通信接口时,由通信接口将其从存储器中逐个拷贝到通信接口的缓冲区发送出去。本 发明实施例提供的对报文进行分片的过程,较现有技术显然更为简化,在IP层直接将完 整的报文直接传递到数据链路层,避免由CPU参与的占用较多存储器带宽的拷贝操作, 在通信接口再将报文进行分片操作后发送(并未生成多个独立的报文,是将报文分段发 送)。这一过程对资源的占用情况,与现有技术中通信接口发送多个分片后的报文对资源 的占用的情况差不多,但从报文处理的整体流程来看,本发明实施例由于没有在IP层执 行报文分片的操作,有效地避免了对报文分片发送所带来的CPU和存储器带宽的过度占 用。并且,从报文的接收端的角度来说,其在接收端需要经历一个相逆的过程,按 照现有技术的报文分片发送的方法来说,由于其在IP层进行分片,在接收端接收时,也 需要在IP层将各分片报文重组,一旦某个分片报文传输有误,整个报文需要按照现有技 术重新再发送一次,也就是需要重新经历IP层分组一链路层处理一通信接口发送的过 程。而采用本发明实施例提供的报文分片发送方法,由于在通信接口进行报文分片发 送,接收端的通信接口不需要进行报文的重组操作就可发现报文传输是否有错误,在报 文传输有误时,重新发送报文的过程显然也较现有技术要简化的多,可以及时地发现报 文传输的错误,减少报文重发的时延。较佳地,在驱动层,由通信接口的直接内存访问(Direct Memory,DMA)控制器
来完成报文数据从存储器拷贝到通信接口的缓冲区的工作。DMA技术是一种不经过CPU 而直接从内存存取数据的数据交换模式。让DMA控制器来处理数据的传送,可以更大 程度上减少通信接口对报文分片发送对系统资源的占用。DMA控制器需要依据DMA描述符(DMA descriptor)进行数据的发送工作,在
报文到达通信接口时,通常需要对DMA描述进行初始化,如图3所示的DMA描述符 的格式图,其中与报文分片发送相关的字段为数据地址字段和长度字段,数据地址字段 用来写入待发送的报文在存储器中的地址,长度字段用来指示待发送报文的长度。一个 DMA描述符只能指示DMA控制完成一次数据从存储器拷贝至缓冲区发送的操作,如果 需要在通信接口对报文进行分片,那么需要按照分片的数量,相应地初始化多个DMA描 述符。本发明实施例中,相对与现有技术对报文所在的Skb的数据结构也做了改进,在 skb的数据结构中,增加两个参数,即是否分片(frag_enable)参数以及frag_off_head参 数,在为报文创建skb时,frag_enable参数的初始值例如可以设置为0,frag_off_head参 数的初始值例如可以为空。skb数据结构中包含控制部分和数据部分,frag_enable参数和 frag_off_head参数可以相应地增加在其控制部分。在上述步骤S104和S105中,在通信接口的处理过程中,在将数据链路层处理后 的报文的长度值与MTU的值进行比较并确定所述长度值大于所述MTU的值之后,还需 要执行下述操作将报文所在的skb数据结构中预先设置的frag_enable参数的值设置为需 要分片的标识例如为1。
并且,在确定需要对分片的数量、分片后各数据段的长度以及各数据段对应的 偏移量之后,还需要执行下述操作将各数据段长度值和对应的偏移量的值连接形成链 表,挂接在报文所在的skb数据结构中预先设置的frag_0ff_head参数上。在对DMA描述进行初始化的过程中,判断frag_enable的值为1时,使用frag_ offjiead参数对各数据段对应的DMA描述符进行赋值操作,具体就是从frag_off_head参 数中依次读取各数据段的长度和偏移量,填充到发送各数据段对应的DMA描述符中;还是以前述报文实例来说明,该报文被分为3个数据段,各数据段的长度分别 为lenl、len2和len3,对应的偏移量为offsetl、offset2和offset3。以发送第一个数据段的 DMA描述符来说,赋值操作后,其数据地址字段的值为offsetl,长度字段的值为lenl, 其他两个DMA描述符的内容与此类似。通过DMA描述符,就可以控制DMA按照各数据段对应的DMA描述符的描 述,将数据链路层处理后的报文中的各数据段从所在的存储器中拷贝至通信接口的缓冲 区并发送。基于同一发明构思,本发明实施例还提供了一种报文分片发送的装置及网络设 备,由于这些装置和设备解决问题的原理与前述一种报文分片发送的方法相似,因此这 些装置的实施可以参见方法的实施,重复之处不再赘述。本发明实施例提供的报文分片发送装置,如图4所示,包括IP层处理单元401,用于在IP层对传输层传递过来的报文进行处理,并在处理 过程中避免对报文进行分片操作;上述IP层处理单元401,除了执行与现有IP协议规定的各种操作例如增加IP帧 头等操作之外,不同之处在于,在IP层不论报文的长度大小,避免对报文长度超过MTU 的报文进行分片处理。报文传递单元402,用于将IP层和数据链路层处理完成后的报文,送达发送该 报文的通信接口;报文发送单元403,用于将数据链路层处理后的报文的长度值与该接口的最大传 输单元MTU的值进行比较;并在所述长度值大于所述MTU的值时,将所述数据链路层 处理后的报文按照MTU的值进行分片后经由通信接口发送。进一步地,IP层处理单元401,用于通过预先在IP层的报文处理的配置命令中 增加避免对传输层传递过来的报文进行分片的设置项以及在IP层分片函数中设定不将传 输层传递过来的报文与MTU的值进行比较的方式实现避免对报文进行分片操作。进一步地,报文发送单元403,用于根据数据链路层处理后的报文的长度值与 MTU的值的大小,确定需要对分片的数量、分片后各数据段的长度值以及各数据段对应 的偏移量;每个所述数据段的长度值不大于所述MTU的值;根据确定的需要分片的数 量、分片后各数据段的长度值以及各数据段对应的偏移量,将数据链路层处理后的报文 的各数据段依次从所在的存储器中拷贝至通信接口的缓冲区并发送。进一步地,本发明实施例提供的报文分片发送装置中,还可以包括参数添加 单元404,用于在将数据链路层处理后的报文的长度值与MTU的值进行比较并确定所述 长度值大于所述MTU的值之后,将数据链路层处理后的报文所在的套接字缓冲区skb数 据结构中中预先设置的是否分片frag_enable参数的值设置为需要分片的标识;以及在确定需要对分片的数量、分片后各数据段的长度以及各数据段对应的偏移量之后,将各数 据段长度值和对应的偏移量的值连接形成链表,挂接在所述数据链路层处理后的报文所 在的skb数据结构中预先设置的frag_0ff_head参数上。进一步地,报文发送单元403,还用于对通信接口的DMA控制器的DMA描述 符进行初始化操作;在读取frag_enable参数为需要分片的标识时,从frag_0ff_head参数
中依次读取各数据段的长度和偏移量,填充到发送各数据段对应的DMA描述符中;控制 DMA控制器按照各数据段对应的DMA描述符的描述,将数据链路层处理后的报文中的 各数据段从所在的存储器中拷贝至通信接口的缓冲区并发送。本发明实施例还提供了一种网络设备,该网络设备包括本发明实施例提供的报 文分片发送的装置。本发明实施例提供的报文分片发送的方法、装置和网络设备,在IP层对传输报 文进行处理时,避免对报文进行分片操作,在IP层处理完成的报文经数据链路层处理 后,送达该报文的通信接口,在该报文的长度大于该接口的MTU值时,将该报文按照 MTU的值进行分片后经由通信接口发送,本发明实施例在IP层直接将完整的报文直接 传递到数据链路层,避免由CPU参与的占用较多存储器带宽的拷贝操作,在通信接口再 将报文进行分片操作后发送,与现有技术相比,一方面简化了对较长报文分片发送的流 程,另外一方面避免了 IP层分片对CPU和存储带宽的过度占用所带来影响系统性能的问 题。并且,对于传输出现错误的报文,在接收端的通信接口不需要进行报文重组就可以 监测到,提高了报文重发的效率,减少了重发的时延。更进一步地,本发明实施例提供的报文分片发送方法,由通信接口的DMA控制 器来完成报文数据从存储器拷贝到通信接口的缓冲区并发送的工作,该操作不需要CPU 的参与,更大程度上减少了通信接口对报文分片发送对系统资源的占用,进一步地提高 了系统的性能。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的 精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的 范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种报文分片发送的方法,其特征在于,包括在IP层对传输层传递过来的报文进行处理,并在处理过程中避免对报文进行分片操作;将IP层处理完成的报文经由数据链路层处理后,送达发送该报文的通信接口 ;将数据链路层处理后的报文的长度值与该接口的最大传输单元MTU的值进行比较; 并在所述长度值大于所述MTU的值时,将所述数据链路层处理后的报文按照MTU的值 进行分片后经由通信接口发送。
2.如权利要求1所述的方法,其特征在于,在IP层对传输层传递过来的报文进行处 理过程中,避免对报文进行分片操作,通过下述方式实现预先在IP层的报文处理的配置命令中增加避免对传输层传递过来的报文进行分片的 设置项,以及在IP层分片函数中设定不将传输层传递过来的报文与MTU的值进行比较。
3.如权利要求1或2所述的方法,其特征在于,在所述长度值大于所述MTU的值 时,将该报文按照MTU的值进行分片后经由通信接口发送,具体包括根据数据链路层处理后的报文的长度值与MTU的值的大小,确定需要分片的数量、 分片后各数据段的长度值以及各数据段对应的偏移量;每个所述数据段的长度值不大于 所述MTU的值;根据确定的需要分片的数量、分片后各数据段的长度值以及各数据段对应的偏移 量,将数据链路层处理后的报文的各数据段依次从所在的存储器中拷贝至通信接口的缓 冲区并发送。
4.如权利要求3所述的方法,其特征在于,将数据链路层处理后的报文的长度值与 MTU的值进行比较并确定所述长度值大于所述MTU的值之后,还包括将数据链路层处理后的报文所在的套接字缓冲区skb数据结构中预先设置的是否分片 frag_enable参数的值设置为需要分片的标识;所述确定需要对分片的数量、分片后各数据段的长度以及各数据段对应的偏移量之 后,还包括将各数据段长度值和对应的偏移量的值连接形成链表,挂接在所述数据链路层处理 后的报文所在的skb数据结构中预先设置的frag_0ff_head上。
5.如权利要求4所述的方法,其特征在于,根据需要分片的数量、各数据段的长度值 以及各数据段对应的偏移量,将报文的各数据段从所在的存储器中拷贝至通信接口的缓 冲区并发送,具体包括对通信接口的直接内存访问DMA控制器的DMA描述符进行初始化操作;在读取frag_enable参数为需要分片的标识时,从ffag_off_head参数中依次读取各数 据段的长度和偏移量,填充到发送各数据段对应的DMA描述符中;控制DMA控制器按照各数据段对应的DMA描述符的描述,将数据链路层处理后的 报文中的各数据段从所在的存储器中拷贝至通信接口的缓冲区并发送。
6.—种报文分片发送的装置,其特征在于,包括IP层处理单元,用于在IP层对传输层传递过来的报文进行处理,并在处理过程中避 免对报文进行分片操作;报文传递单元,用于将IP层和数据链路层处理完成后的报文,送达发送该报文的通信接口 ;报文发送单元,用于将数据链路层处理后的报文的长度值与该接口的最大传输单元 MTU的值进行比较;并在所述长度值大于所述MTU的值时,将所述数据链路层处理后 的报文按照MTU的值进行分片后经由通信接口发送。
7.如权利要求6所述的装置,其特征在于,所述IP层处理单元,进一步用于通过预 先在IP层的报文处理的配置命令中增加避免对传输层传递过来的报文进行分片的设置项 以及在IP层分片函数中设定不将传输层传递过来的报文与MTU的值进行比较的方式实现 避免对报文进行分片操作。
8.如权利要求6或7所述的装置,其特征在于,报文发送单元,进一步用于根据数 据链路层处理后的报文的长度值与MTU的值的大小,确定需要对分片的数量、分片后各 数据段的长度值以及各数据段对应的偏移量;每个所述数据段的长度值不大于所述MTU 的值;根据确定的需要分片的数量、分片后各数据段的长度值以及各数据段对应的偏移 量,将数据链路层处理后的报文的各数据段依次从所在的存储器中拷贝至通信接口的缓 冲区并发送。
9.如权利要求8所述的装置,其特征在于,还包括参数添加单元,用于在将数据 链路层处理后的报文的长度值与MTU的值进行比较并确定所述长度值大于所述MTU的 值之后,将数据链路层处理后的报文所在的套接字缓冲区Skb数据结构中预先设置的是否 分片frag_enable参数的值设置为需要分片的标识;以及在确定需要对分片的数量、分片 后各数据段的长度以及各数据段对应的偏移量之后,将各数据段长度值和对应的偏移量 的值连接形成链表,挂接在所述数据链路层处理后的报文所在的skb数据结构中预先设置 的 frag_off_head 参数上。
10.如权利要求9所述的装置,其特征在于,报文发送单元,进一步用于对通信接口 的直接内存访问DMA控制器的DMA描述符进行初始化操作;在读取frag_enable参数为 需要分片的标识时,从frag_0ff_head参数中依次读取各数据段的长度和偏移量,填充到 发送各数据段对应的DMA描述符中;控制DMA按照各数据段对应的DMA描述符的描 述,将数据链路层处理后的报文中的各数据段从所在的存储器中拷贝至通信接口的缓冲 区并发送。
11.一种网络设备,其特征在于,包括如权利要求6-10任一项所述的报文分片发送的装置ο
全文摘要
本发明公开了一种报文分片发送的方法、装置和网络设备,其中方法包括在IP层对传输层传递过来的报文进行处理,并在处理过程中避免对报文进行分片操作;将IP层处理完成的报文经由数据链路层处理后,送达发送该报文的通信接口;将数据链路层处理后的报文的长度值与该接口的最大传输单元MTU的值进行比较;并在所述长度值大于所述MTU的值时,将所述数据链路层处理后的报文按照MTU的值进行分片后经由通信接口发送。本发明与现有技术相比,一方面简化了对较长报文分片发送的流程,另外一方面避免了IP层分片对CPU和存储带宽的过度占用所带来影响系统性能的问题。
文档编号H04L12/56GK102014067SQ201010588189
公开日2011年4月13日 申请日期2010年12月14日 优先权日2010年12月14日
发明者徐欣 申请人:北京星网锐捷网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1