一种隧道包的分片发送方法 【技术领域】
本发明涉及一种数据包传送方法,尤其涉及一种在互联网络通讯的通信设备中,对隧道包进行分片发送的方法。
背景技术
隧道技术是一种在网络之间传递数据的方式,如图1所示,使用隧道14传递的数据可以是不同协议的数据包,隧道协议将其它协议的原始数据包11在路由器隧道入口12重新封装在新的包头中形成隧道包13发送。新的包头提供了路由信息,从而使封装的数据能够通过网络传递。被封装的数据包在隧道的两个端点之间通过网络进行路由。被封装的数据包在网络上传递时所经过地逻辑路径称为隧道。一旦到达网络终点,如图1中路由器隧道出口16,数据将被解包并转发到最终目的地(例如主机18)。
而在网络中传送IP包的MTU(Maximum Transfer Unit,最大传输单元)对数据链路层能传送的最大帧长进行了限制,如果IP包比传送它的数据链路层的MTU要大,在传送前就要将IP包分片,分片就是将一个大的IP包分成几个小段——片,以便每一个小片可以装进数据链路层的MTU中,分片包将在IP包的目的地被重组。
由于隧道技术需要对原始数据包进行重新封装包头形成隧道包,正常情况下,非常容易出现隧道IP包的长度过长,这样隧道IP包被分片的概率就大大增加了,所以使用隧道技术必须要解决好分片问题。现有技术中对隧道包的分片采用的方式是先完成隧道封装再进行IP分片,如图2所示,如果有隧道包并且需要分片,那么隧道包按照MTU的大小,分片成几个适当大小的数据包,每个数据包都有自己的隧道头并表示为分片属性,分别发送。也即,对于具有原始IP包头21和原始净荷22的原始数据包20,先将该原始数据包20进行隧道封装形成隧道包26,该隧道包26具有表征路由信息的隧道头25、原始IP包头以及原始净荷22。如果该隧道包26需要分片,则按照MTU大小,将原始净荷22分成适当大小的几个数据包,如分成221、222、223、224四个,且每个数据包都具有自己的隧道头25并表示为分片属性。由于此时外层隧道包的目的地是隧道对端设备,这样分了片的隧道包就需要在隧道的对端对IP包进行重组,而分片包的重组往往会对性能产生较大地影响,因此加重了隧道对端设备的负担,降低了隧道对端设备的性能。
【发明内容】
本发明所要解决的技术问题在于提供一种隧道包的分片发送方法,减轻隧道对端通信设备的处理负荷,使隧道分片包能够被快速、有效地处理,并将分片重组的负荷分担到目的主机上,使得网络负载更加均衡。
为了实现上述目的,本发明提供了一种隧道包的分片发送方法,应用于通信设备中的数据包发送,对需要进行隧道封装及分片的原始数据包,在通信设备的隧道入口设备上先进行原始数据包的分片处理形成多个数据分片,再对所述多个数据分片分别进行隧道封装形成隧道包,然后发送至通信设备的隧道出口设备上进行隧道拆封处理,并通过查找路由发送至目的地。
上述的隧道包的分片发送方法,其中,在隧道的入口设备上的分片处理过程包括如下步骤:
步骤一,完成原始数据包的收包处理;
步骤二,判断是否需要对该原始数据包进行隧道封装;对不需要进行隧道封装的原始数据包直接转发,对需要进行隧道封装的原始数据包,则判断该原始数据包是否需要进行分片处理;
步骤三,对不需要进行分片处理的原始数据包直接进行隧道封装形成隧道包后转发,对需要进行分片处理的原始数据包进行分片处理形成多个数据分片,再对所述多个数据分片分别进行隧道封装形成隧道包后转发。
上述的隧道包的分片发送方法,其中,在步骤一中,还包括一步骤:判断所接收到的原始数据包是否为异常包,若为异常包,则丢弃,若不是异常包,则按照一定的策略判断该数据包是否需要隧道封装。
上述的隧道包的分片发送方法,其中,在步骤二中,判断该原始数据包是否需要进行分片处理的条件是:将该原始数据包长度加上需要封装的隧道头的长度得到一总长度,计算该总长度是否大于下一段通信链路的最大传输单元值;若该总长度大于该最大传输单元值,则需要进行分片处理,反之,则不需要进行分片处理。
上述的隧道包的分片发送方法,其中,在步骤三中,对需要进行分片处理的原始数据包进行分片处理形成多个数据分片的过程包括如下步骤:
将原始数据包的净荷分成多个尽量大的片,使每个片都可装入一个数据链路层帧;
将原始数据包的报头加到每一个由净荷分成的片的前面,形成一个数据分片。
上述的隧道包的分片发送方法,其中,所述的多个片中,其中一个片可以是8字节的非整数倍,而其他每个片的大小必须是8字节的整数倍。
上述的隧道包的分片发送方法,其中,在步骤三中,对所述多个数据分片分别进行隧道封装形成隧道包的过程是在每一个数据分片的前面加上隧道头,形成隧道包。
上述的隧道包的分片发送方法,其中,在隧道出口设备上进行隧道拆封处理的过程包括如下步骤:
完成隧道包的接收;
对隧道包进行隧道拆封,还原成原始数据包或分片数据包;
根据数据包的报文信息查找路由表,转发该数据包至目的地。
上述的隧道包的分片发送方法,其中,所述分片数据包在目的地进行重组处理后还原成原始数据包。
上述的隧道包的分片发送方法,其中,所述数据包基于TCP/IP协议进行传送。
与现有技术相比,本发明通过在通信设备中先进行隧道包的分片处理,再进行封装、发送处理,使得通信设备处理分片隧道包的效率更高,并通过在目的地主机上进行分片重组,减少了隧道对端设备在处理分片隧道包重组所花费的时间,提高了通信设备的处理能力,使得网络负载更加均衡。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
【附图说明】
图1是隧道技术示例图;
图2是现有技术对隧道包分片的处理示例图;
图3是本发明对隧道包分片的处理示例图;
图4是本发明在隧道入口设备上对隧道包的处理流程图;
图5是本发明在隧道出口设备上对隧道包的处理流程图。
【具体实施方式】
本发明的隧道包的分片发送方法,应用于通信设备中的数据包发送,对需要进行隧道封装及分片的原始的数据包,在通信设备的隧道入口设备上先进行原始数据包的分片处理形成多个数据分片,再对所述多个数据分片分别进行隧道封装形成隧道包,然后发送至通信设备的隧道出口设备上进行隧道拆封处理,并通过查找路由发送至目的地。
本发明的方法在隧道的入口设备上的分片处理过程包括如下步骤:
步骤一,完成原始数据包的收包处理;
步骤二,判断是否需要对该原始数据包进行隧道封装;对不需要进行隧道封装的原始数据包直接转发,对需要进行隧道封装的数据包,则判断该原始数据包是否需要进行分片处理;
步骤三,对不需要进行分片处理的原始数据包直接进行隧道封装形成隧道包后转发,对需要进行分片处理的原始数据包进行分片处理形成多个数据分片,再对所述多个数据分片分别进行隧道封装形成隧道包后转发。
在隧道出口设备上进行隧道拆封处理的过程包括如下步骤:
完成隧道包的接收;
对隧道包进行隧道拆封,还原成原始数据包或分片数据包;
根据数据包的报文信息查找路由表,转发该数据包至目的地。
在本发明中,其传送的数据可以是不同协议的数据包,隧道协议将其他协议的数据包重新封装在新的包头中发送。
下面以基于TCP/IP协议的IP数据包为例,结合图3~图5对本发明的技术方案进行详细阐述。
请结合参考图1的隧道技术示例图,当隧道入口设备收到需要转发的IP数据报文,首先判断是否需要隧道封装;如果不需要就直接转发;如果需要,隧道入口设备即将该IP数据包的长度加上需封装的IP隧道头的长度,计算是否大于下一段链路的MTU值。如果隧道包的总长度大于MTU,就需要对该原始IP数据包进行分片处理。如图3所示,当需隧道封装的IP数据包且需要分片发送时,首先,对原始IP数据包30分片,分片的原则是保证分了片的IP包经过隧道封装后不超过MTU;从图中可以看出原始IP数据包先被分片,然后,再对每个分了片的IP数据包分别进行隧道封装形成隧道包,这样每个隧道包可正常发送。分片处理的方法是将IP原始数据包30的净荷32分成尽量大的片,如被分成了321、322、323、324四片,但要保证每个片(包括IP报头31和隧道包头35)可以装入一个数据链路层帧。片的大小必须是8字节的整数倍,因为分片后IP报头中对包的大小就是以8字节为单位计数,但最后一个片的大小不必是8字节的整数倍。然后将原始IP报头31加到每一个由净荷32分成的片的前面,从而形成一个IP分片,再进行隧道封装,即在IP分片的前面加上隧道头35,形成隧道包,最后将分了片的隧道包依次发送出去。
图4表示了隧道入口设备对收到IP数据包且需要隧道封装的处理流程。
步骤401,隧道入口设备收到一个需转发的IP数据包。
步骤402,判断该数据包是否需要进行隧道封装且分片?在此步骤中,先判断是否需要进行隧道封装,如果不需要,则直接转发数据;如果确实要隧道封装,那么再判断是否需要进行分片处理?该隧道入口设备计算隧道封装后是否会超过MTU,如果超过,则转到步骤403进行分片操作,如果不超过,则不需要进行分片处理,直接将数据包进行隧道封装后转到步骤405转发。
步骤403,隧道入口设备先对该IP数据包进行分片,分片方法如上所述。
步骤404,分片完成之后再封装隧道头,完成隧道封装。
步骤405,最后将每个分了片并完成隧道封装的隧道包依次发往隧道出口设备。
其中,在步骤401之后,还可包括一个步骤:判断如果该包是否为异常包,如果是异常包,则丢弃该数据包;如果不是异常包,隧道入口设备则按照一定的策略判断该包是否需要隧道封装,即转到步骤402;
隧道出口设备收到经过分片的隧道包后,由于分片操作是对原始IP数据包的操作,所以该隧道包对隧道出口设备来说是个正常包,而不是分片包,隧道出口设备只需对隧道包拆封,经过拆封得到的是原始包的分片包,该分片包的目的地并非是隧道对端设备,而不需进行分片包的重组。在经过正常地查路由后,分片包将会被转发到目的地,分片包的重组将在IP包的目的地进行。
如图5所示,表示了隧道出口设备对收到隧道包的处理流程。
步骤501,隧道出口设备收到非异常的隧道包。
步骤502,对隧道数据包进行拆封。在本步骤中,隧道出口设备只需按照普通隧道包的处理流程进行拆包操作,而不用去关心该隧道包是否是分片包,以及是否需要重组。拆封后的隧道包,还原为原始IP数据包(不需进行分片处理的原始数据包)或者分片数据包(经过分片处理后的包含各个分片数据的原始数据包)。
步骤503,隧道出口设备按照数据包的报文信息,查找路由表。
步骤504,按照路由表提供的输出端口,将IP数据包转发到目的地。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。