一种通用路由封装隧道报文发送方法和装置的制作方法

文档序号:7858012阅读:196来源:国知局
专利名称:一种通用路由封装隧道报文发送方法和装置的制作方法
技术领域
本申请涉及通信领域,特别涉及一种通用路由封装隧道报文发送方法和装置。
背景技术
通用路由封装(Generic Routing Encapsulation GRE)协议是一种隧道封装协议,它提供了将某种网络层协议(如IP、IPv6、MPLS等)的报文封装在另外一种网络层协议(如IP、IPv6)报文中的机制,使报文能够在异种网络中传输。在某些情况下,系统需要传输一个有效载荷包,需要将它封装并发送至某个目的地,而该有效载荷包使用的协议不同于该网络所支持的协议,这时需要将有效载荷进行GRE封装,然后将此GRE包封装在其它协议中进行转发,该外层协议即为封装协议,为该网络上使用的协议。
请参考图I,当用户网络改造为IPv6网络而骨干网络依然是IPv4网络,用户网络的IPv6用户要访问远端的IPv6服务时,GRE提供了一种隧道封装技术,以使得用户的IPv6报文能够穿越IPv4骨干网络。封装和解封装都是在IPv4网络边缘设备进行的,当IPv6用户的原始IPv6报文到达IPv4网络边缘设备Rl进行转发时,查找转发路由表,将IPv6报文导入GRE隧道进行GRE封装封装GRE头和外层IPv4头,封装后的IPv4报文穿越IPv4网络到达IPv4网络另一个边缘设备R2,在R2设备上进行解封装,剥去外层封装的IPv4头和GRE头,还原出原始的IPv6报文进行IPv6转发到达IPv6目的地。当封装后的IPv4报文长度大于GRE隧道出接口 MTU (Maximum Transmission Unit最大传输单元)或者中间转发设备出口 MTU时,封装后的IPv4报文将进行分片,分片后传输的报文在GRE解封装节点要先重组后才能进行解封装并继续转发。当GRE隧道MTU设置不合理时,封装后的GRE报文就会在GRE隧道出接口或者中间转发设备上分片,分片后的GRE报文要在GRE解封装节点上重组后才能转发,这增加了GRE隧道解封装节点的重组处理负担,当有大量用户接入GRE隧道并且存在大量分片的情况下,解封装节点的处理能力将成为网络传输的瓶颈。另外,重组需要占用大量的重组池资源,如果解封装节点的重组池资源有限,大量分片到达解封装节点时会导致部分分片申请不到重组池资源而丢包。

发明内容
本发明要解决的主要技术问题是,提供一种通用路由封装隧道报文发送方法和装置,实现另一种方式发送通用路由封装隧道报文。为解决上述技术问题,本发明采用的技术方案如下一种通用路由封装隧道报文发送方法,包括以下步骤确定通用路由封装隧道报文分片值;根据所述报文分片值,判断待发送报文是否需要分片;若需要,则对所述待发送报文进行分片;对分片后的待发送报文或者不需要分片的待发送报文使用通用路由封装协议封装后发送。进ー步地,所述报文分片值为预设的固定值。进ー步地,所述报文分片值的获取方式是发送探测报文,根据反馈的报文信息计算得到所述通用路由封装隧道的最大传输单元值,将该值作为所述报文分片值。更进一歩地,利用探測报文设置所述通用路由封装隧道报文分片值的具体过程为获取通用路由封装隧道的第一最大传输单元值,设置为初始报文分片值;根据所述第一最大传输单元值,构造探测报文;封装并发送所述探测报文;所述探測报文为不可分片报文;若接收的回应报文为丢弃所述探测报文的回应报文,则根据该回应报文计算得到 实时所述通用路由封装隧道的第二最大传输单元值,并用所述第二最大传输单元值更新所述初始报文分片值;将第二最大传输单元值更新为报文分片值。更进一歩地,获取通用路由封装隧道的第一最大传输单元值的具体过程为获取通用路由封装隧道出接ロ的最大传输单元值,并用该最大传输单元值减去封装头长度得到通用路由封装隧道的所述第一最大传输单元值;所述封装头长度包括外层IP头长度和外层通用路由封装包头长度。更进一歩地,所述探测报文定期或者不定期的进行重复发送。本发明还提供ー种通用路由封装隧道报文发送装置,包括分片值获取単元、报文分片单元、报文封装単元和报文发送単元;所述分片值获取単元用于确定通用路由封装隧道报文分片值;所述报文分片单元用于根据所述报文分片值,判断待发送报文是否需要分片;若需要,则对所述待发送报文进行分片;所述报文封装単元用于将分片后的待发送报文或者不需要分片的待发送报文根据通用路由封装协议进行封装;所述报文发送单元用于将所述报文封装単元封装完成的待发送报文进行发送。进ー步地,所述的分片值获取単元还用于自定义所述报文分片值。更进一歩地,分片值获取单元还包括探测报文模块和分片值设定模块;所述探测报文模块用于生成探测所述通用路由封装隧道最大传输单元值的探測报文;并将所述探测报文发送给报文封装单元进行封装后,由报文发送単元进行发送;所述分片值设定模块用于根据反馈的报文信息计算所述通用路由封装隧道的最大传输単元值,并将该值设定为所述报文分片值。更进一歩地,所述分片值设定模块还用于获取通用路由封装隧道的第一最大传输单元值,并将该值设置为初始报文分片值;所述探测报文模块还用于根据所述分片值设定模块获取的所述第一最大传输单元值,构造探测报文;并将构造好的所述探测报文发送给报文封装单元进行封装后,由报文发送单元进行发送;所述探测报文为不可分片报文;所述分片值设定模块还用于判断反馈报文是否为丢弃所述探测报文的回应报文,若是,则根据该回应报文计算得到实时所述通用路由封装隧道的第二最大传输单元值,并将所述第二最大传输单元值更新设置为报文分片值。更进一步地,所述分片值设定模块通过获取通用路由封装隧道出接口的最大传输单元值,并用该最大传输单元值减去封装头长度得到通用路由封装隧道的所述第一最大传输单元值;所述封装头长度包括外层IP头长度和外层通用路由封装包头长度。更进一步地,所述探测报文模块还用于定期或者不定期的重复发送所述探测报文。本发明的有益效果是通过设置一个报文分片值,使待发送的报文与该值进行对比判断是否进行分片,使较大的报文在封装之前进行分片处理,减小了报文在封装后进行分片的概率,进一步减少因重组对解封装节点资源的占用,提高网络传输能力。进一步的,本发明的通用路由封装隧道报文发送方法和装置,还通过使用探测报文的方式动态的探测通用路由封装隧道的MTU值,并通过该值动态设置报文分片值,使对 报文的分片更具实效性和精确性;同时利用探测所得的MTU值对要经过GRE隧道发送或者转发的报文进行分片处理,进一步减少封装后的GRE报文分片的概率,分散重组节点以降低GRE隧道解封装节点重组的负担,减少因重组对解封装节点资源的占用,提高网络传输能力。


图I为现有技术中通用路由封装隧道传输的网络拓扑图;图2为本发明一实施例中通用路由封装隧道报文发送方法的方法流程图;图3为本发明一实施例中通用路由封装隧道报文发送装置的结构示意图。
具体实施例方式为使本发明的技术方案和优点更加清楚,下面通过具体实施方式
结合附图对本发明作进一步详细说明。请参考图2,本发明提供了一种通用路由封装隧道报文发送方法,其主要包括以下步骤S201 :获取GRE隧道的报文分片值;在本步骤中,获取GRE隧道的报文分片值,用该值来作为待发送图片进行分片的参照值。其中,该报文分片值的获取方式有许多种,较优的,在本实施例中,可以有两种获取方式一种是通过对该GRE隧道大致的传输能力界定,设置一个合适的分片值,该值为一个最优的固定值,当报文超过该分片值时,即进行分片操作。还有一种获取方式是通过动态的实时调控报文分片值,使报文的传输更具实效性和精确性,具体的做法为发送探测报文,根据反馈的报文信息计算得到所述通用路由封装隧道的最大传输单元值,将该值作为所述报文分片值。其通过探测报文设置报文分片值的具体过程可以分为以下几步S2011 :获取通用路由封装隧道的第一最大传输单元值,设置为初始报文分片值;在该步骤中,可以通过直接获取或者探测获取的方式获取GRE隧道的最大传输单元值。本实施例中,提供一种较优的获取方式首先根据GRE隧道所配置的目的地址查路由,从路由条目中得到所述GRE隧道的出接口,获取出接口的MTU值;根据GRE隧道的选项配置,计算出GRE包头长度,加上外层IP头长度记为封装头长度。GRE原始包头长度为4字节,GRE能够配置的选项有Checksum选项、Key选项和Sequence Number选项,姆增加一种选项,包头长度就増加4字节(Check选项长度为2字节,加上两字节的填充字段,也是4字节),由此得到的GRE包头长度为4-16字节不等。GRE外层IP头长度为20字节,外层IP头不能包含选项。然后用所述该出接ロ的MTU值减去封装头长度,计算结果作为GRE隧道第一 MTU值,并将该值设置为初始报文分片值。S2012 :根据第一最大传输单元值,构造探测报文;封装并发送所述探测报文;请參考图3,在本实施例中,探测报文可以有多种形式,较优的选择为GREKeepalive报文,填充封装后内层IP报文长度为GRE隧道第一MTU大小。GRE Keepalive报文为两层GRE封装,内层GRE头封装时对于GRE隧道选项配置的选项仅添加Key选项,不添加Checksum选项和Sequence Number选项,外层GRE头依据GRE隧道选项配置进行封装;置所述GRE Keepalive报文外层IP头中不可分片DF标志位为I,发送该Keepalive报文。GRE Ke印alive报文在网络中传输,如果GRE网络中某个节点的MTU小于GRE Keepalive报 文长度,由于外层IP头中设置了不可分片DF标志,则该节点在丢弃该Keepalive报文的同时会向源节点发送 ICMP (Internet Control Message Protocol, Internet 控制报文协议)Datagram Too Big报文,并在该ICMP报文头部下一跳MTU字段填入本节点的MTU值。ICMPDatagram Too Big报文属于ICMP目标不可达(Destination Unreachable)报文,类型字段为3 (type 3),代码字段为4 (code 4),ICMP包头后面携带产生该ICMP报文的原始IP头和8字节的数据部分;S2013:若接收的回应报文为丢弃探测报文的回应报文,则根据该回应报文计算得到实时的通用路由封装隧道的第二最大传输单元值,并用该第二最大传输单元值更新设置的初始报文分片值;在本实施例中,如果收到网络中回应的ICMP Datagram Too Big报文,说明网络中某个节点的MTU小于Keepalive报文长度,解析收到的ICMP Datagram Too Big报文,从ICMP报文携帯的原始IP头中取出源地址、目的地址和协议号,如果协议号为47,表明封装的是GRE报文,依据此源、目的IP地址查找到GRE隧道,并用ICMP报文中的下一跳MTU字段值减去封装头长度以得到第二最大传输单元值,并用该第二最大传输单元值更新设置的初始报文分片值。如果收到的是Keepalive报文的正常回应,说明GRE网络中各节点的MTU值均大于或等于Keepalive报文长度,则保持GRE隧道MTU不变,也不对报文分片值进行更新。在通过上述方法获取到报文分片值之后,进入以下步骤S202 :根据所述报文分片值,判断待发送报文是否需要分片;在本实施例中,将更新后的报文分片值下发转发面,作为转发面转发报文经过该GRE隧道时判断是否进行提前分片的依据;同时控制面发包经过该GRE隧道封装时,也以该分片值作为判断是否提前分片的依据。如果待转发或者发送的报文长度大于该报文分片值,则转入步骤S203,如果判断待转发或者发送的报文长度小于或等于该报文分片值,这直接进入步骤S204。S203 :对需要进行分片的报文进行分片处理;在该步骤中,主要对S202中判断需要进行分片的报文按照相应的分片方式进行分片处理。S204 :对处理后的报文进行GRE封装;在该步骤中,对上述经过处理的分片后的报文或者不需要进行分片的报文进行GRE封装,进入步骤S205. S205 :对封装好的报文进行发送。在本实施例中,因为GRE隧道目的地址的路由或者出接口可能会发生变化,为了保持报文分片值的实时性和有效性,较优的,可以定期或者不定期的发送探测报文,以获取最新的GRE隧道的MTU值,并更新最优的报文分片值。请参考图3,在本发明中还提供一种通用路由封装隧道报文发送装置,其主要包括分片值获取单元301、报文分片单元302、报文封装单元303和报文发送单元304 ;其中,分片值获取单元301用于获取通用路由封装隧道报文分片值;为实现较优的获取GRE隧道的报文分片值,分片值获取单元301进一步包括有探测报文模块3011和分片值设定模块3012 ;探测报文模块3011不仅可以用于自定义一个较优的报文分片值,以便GRE隧道对报文进行分片;其还可以用于生成探测通用路由封装隧道最大传输单元值的探测报文,并将所述探测报文发送给报文封装单元303进行封装后,由报文发送单元304进行发送,其通过该种方式来高效的获取报文分片值;而分片值设定模块3012用于根据反馈的报文信息计算通用路由封装隧道的最大传输单元值,并将该值设定为报文分片值。进一步地,探测报文模块3011还用于根据分片值设定模块3012获取的所述第一最大传输单元值,构造探测报文;并将构造好的探测报文发送给报文封装单元303进行封装后,由报文发送单元304进行发送;探测报文为不可分片报文;而分片值设定模块3012还用于判断反馈报文是否为丢弃所述探测报文的回应报文,若是,则根据该回应报文计算得到实时所述通用路由封装隧道的第二最大传输单元值,并将该第二最大传输单元值更新设置为最新报文分片值。在本实施例中,分片值获取单元301获取报文分片值的具体过程在上述通用路由封装隧道报文发送方法中已经进行了详细的参数,在此就不再进行赘述了。报文分片单元302主要用于根据所述报文分片值,判断待发送报文是否需要分片;若需要,则对该待发送报文进行分片;报文封装单元303用于将分片后的待发送报文或者不需要分片的待发送报文根据进行GRE封装;报文发送单元304用于将报文封装单元303封装完成的待发送报文进行发送。以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
权利要求
1.ー种通用路由封装隧道报文发送方法,其特征在于,包括以下步骤 确定通用路由封装隧道报文分片值; 根据所述报文分片值,判断待发送报文是否需要分片;若需要,则对所述待发送报文进行分片; 对分片后的待发送报文或者不需要分片的待发送报文使用通用路由封装协议封装后发送。
2.如权利要求I所述的通用路由封装隧道报文发送方法,其特征在于,所述报文分片值为预设的固定值。
3.如权利要求I所述的通用路由封装隧道报文发送方法,其特征在于,所述报文分片值的获取方式是发送探测报文,根据反馈的报文信息计算得到所述通用路由封装隧道的最大传输单元值,将该值作为所述报文分片值。
4.如权利要求3所述的通用路由封装隧道报文发送方法,其特征在于,利用探测报文设置所述通用路由封装隧道报文分片值的具体过程为 获取通用路由封装隧道的第一最大传输单元值,设置为初始报文分片值; 根据所述第一最大传输单元值,构造探测报文;封装并发送所述探测报文;所述探测报文为不可分片报文; 若接收的回应报文为丢弃所述探测报文的回应报文,则根据该回应报文计算得到实时所述通用路由封装隧道的第二最大传输单元值,并用所述第二最大传输单元值更新所述初始报文分片值; 将第二最大传输单元值更新为报文分片值。
5.如权利要求4所述的通用路由封装隧道报文发送方法,其特征在于,获取通用路由封装隧道的第一最大传输单元值的具体过程为获取通用路由封装隧道出接ロ的最大传输单元值,并用该最大传输单元值减去封装头长度得到通用路由封装隧道的所述第一最大传输单元值;所述封装头长度包括外层IP头长度和外层通用路由封装包头长度。
6.如权利要求3-5中任一项所述的通用路由封装隧道报文发送方法,其特征在于,所述探测报文定期或者不定期的进行重复发送。
7.ー种通用路由封装隧道报文发送装置,其特征在于,包括分片值获取単元、报文分片単元、报文封装単元和报文发送単元; 所述分片值获取単元用于确定通用路由封装隧道报文分片值; 所述报文分片单元用于根据所述报文分片值,判断待发送报文是否需要分片;若需要,则对所述待发送报文进行分片; 所述报文封装単元用于将分片后的待发送报文或者不需要分片的待发送报文根据通用路由封装协议进行封装; 所述报文发送单元用于将所述报文封装単元封装完成的待发送报文进行发送。
8.如权利要求7所述的通用路由封装隧道报文发送装置,其特征在干,所述的分片值获取单元还用于自定义所述报文分片值。
9.如权利要求7所述的通用路由封装隧道报文发送装置,其特征在于,分片值获取单元还包括探测报文模块和分片值设定模块; 所述探测报文模块用于生成探测所述通用路由封装隧道最大传输单元值的探测报文;并将所述探测报文发送给报文封装单元进行封装后,由报文发送单元进行发送; 所述分片值设定模块用于根据反馈的报文信息计算所述通用路由封装隧道的最大传输单元值,并将该值设定为所述报文分片值。
10.如权利要求9所述的通用路由封装隧道报文发送装置,其特征在于,所述分片值设定模块还用于获取通用路由封装隧道的第一最大传输单元值,并将该值设置为初始报文分片值; 所述探测报文模块还用于根据所述分片值设定模块获取的所述第一最大传输单元值,构造探测报文;并将构造好的所述探测报文发送给报文封装单元进行封装后,由报文发送单元进行发送;所述探测报文为不可分片报文; 所述分片值设定模块还用于判断反馈报文是否为丢弃所述探测报文的回应报文,若是,则根据该回应报文计算得到实时所述通用路由封装隧道的第二最大传输单元值,并将所述第二最大传输单元值更新设置为报文分片值。
11.如权利要求10所述的通用路由封装隧道报文发送装置,其特征在于,所述分片值设定模块通过获取通用路由封装隧道出接口的最大传输单元值,并用该最大传输单元值减去封装头长度得到通用路由封装隧道的所述第一最大传输单元值;所述封装头长度包括外层IP头长度和外层通用路由封装包头长度。
12.如权利要求9-11中任一项所述的通用路由封装隧道报文发送方法,其特征在于,所述探测报文模块还用于定期或者不定期的重复发送所述探测报文。
全文摘要
本发明提供一种通用路由封装隧道报文发送方法和装置,通过对设置一个报文分片值,使待发送的报文与该值进行对比判断是否进行分片,使较大的报文在封装之前进行分片处理,减小了报文在封装后进行分片的概率。进一步地,本发明提供的通用路由封装隧道报文发送方法和装置,还通过使用探测报文的方式动态的探测通用路由封装隧道的MTU值,并通过该值动态设置报文分片值,使对报文的分片更具实效性和精确性;进一步分散重组节点以降低GRE隧道解封装节点重组的负担,减少因重组对解封装节点资源的占用,提高网络传输能力。
文档编号H04L12/741GK102868613SQ20121028832
公开日2013年1月9日 申请日期2012年8月14日 优先权日2012年8月14日
发明者邱军, 焦欣文, 刘必振, 姜超 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1