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

技术编号:5411401 阅读:226 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种报文分片发送的方法、装置和网络设备,其中方法包括:在IP层对传输层传递过来的报文进行处理,并在处理过程中避免对报文进行分片操作;将IP层处理完成的报文经由数据链路层处理后,送达发送该报文的通信接口;将数据链路层处理后的报文的长度值与该接口的最大传输单元MTU的值进行比较;并在所述长度值大于所述MTU的值时,将所述数据链路层处理后的报文按照MTU的值进行分片后经由通信接口发送。本发明专利技术与现有技术相比,一方面简化了对较长报文分片发送的流程,另外一方面避免了IP层分片对CPU和存储带宽的过度占用所带来影响系统性能的问题。

【技术实现步骤摘要】

本专利技术涉及计算机网络通信
,尤其涉及一种报文分片发送的方法、装置和网络设备
技术介绍
分片是指一个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的分片队列(frag_list),再给第一个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所示,包括如下几个步骤:S101、在IP层对传输层传递过来的报文进行处理,并在处理过程中避免对报文进行分片操作;S102、将IP层处理完成的报文传递到数据链路层进行相应处理;S103、将数据链路层处理完成的报文送达发送该报文的通信接口;S104、将数据链路层处理后的报文的长度值与该接口的MTU的值进行比较;若数据链路层处理后的报文的长度值比MTU的值大,执行下述步骤S105;否则执行下述步骤S106;S105、将数据链路层处理后的报文按照MTU的值进行分片后经由通信接口发送;S106、将数据链路层处理后的报文不进行分片发送。上述步骤S101中,在IP层,除了与现有技术相同的处理流程例如增加IP帧头等处理流程之外,不同之处在于,改变了现有IP层对报文进行分片处理的相关流程,在IP层避免对报文长度超过MTU的报文进行分片处理。为了达到在IP层避免对报文进行分片处理的目的,本专利技术实施例在IP层配置命令中增加避免对传输层传递过来的报文进行分片的设置项以及在IP层分片函数中设定不将传输层传递过来的报文与MTU的值进行比较。这样,不论长度如何的报文到达IP层之后,不再进行是否进行分片的判断,更不会对于长度大于MTU的报文进行分片处理。当然在IP层处理的过程中,为了避免对IP报文分片,还需要能够存储较长报文的具有较大缓冲区(buffer)的skb作为支持。上述步骤S102中,在数据链路层对报文的处理过程与现有技术相同,执行例如在报文之前增加链路帧头的操作等,具体流程在此不再详述。在上述步骤S104和S105中,在数据报文到达通信接口后,由驱动层执行将数据链路层处理后的报文的长度值与该接口的MTU的值进行比较,并将长度大于MTU的报文进行分片发送的过程。驱动层的处理过程,在判断报文的总长度大于MTU的值时,具体来说,即根据报文的总长度值和MTU的值的大小确定需要分片的数量、分片后各数据段的长度值以及各数据段对应的偏移量;分片后每个数据段的长度不大于该接口MTU的值;根据确定出来的需要分片的数量、分片后各数据段的长度值以及各数据段对应的偏移量,将报文的各数据段依次从所在的存本文档来自技高网
...

【技术保护点】
一种报文分片发送的方法,其特征在于,包括:在IP层对传输层传递过来的报文进行处理,并在处理过程中避免对报文进行分片操作;将IP层处理完成的报文经由数据链路层处理后,送达发送该报文的通信接口;将数据链路层处理后的报文的长度值与该接口的最大传输单元MTU的值进行比较;并在所述长度值大于所述MTU的值时,将所述数据链路层处理后的报文按照MTU的值进行分片后经由通信接口发送。

【技术特征摘要】
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_off_head上。5.如权利要求4所述的方法,其特征在于,根据需要分片的数量、各数据段的长度值以及各数据段对应的偏移量,将报文的各数据段从所在的存储器中拷贝至通信接口的缓冲区并发送,具体包括:对通信接口的直接内存访问DMA控制器的DMA描述符进行初始化操作;在读取frag_enable参数为需要分片的标识时,从ffag_off_head参数中依次读取各数据段的长度和偏移量,填充到发送各数据段对应的DMA描述符中;控制DMA控制器按照各数据段对应的DMA描述符的描述,将数据链路层处理后的报文中的各数据段从所在的存储器中拷贝...

【专利技术属性】
技术研发人员:徐欣
申请(专利权)人:北京星网锐捷网络技术有限公司
类型:发明
国别省市:11

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

1