检测路径最大传输单元的方法和系统的制作方法

文档序号:7972300阅读:345来源:国知局
专利名称:检测路径最大传输单元的方法和系统的制作方法
技术领域
本发明涉及通讯技术领域,特别涉及一种检测路径最大传输单元的方法和系统。
背景技术
VPN(Virtual Private Network,虚拟专用网络)的基本原理是利用隧道技术,把VPN报文封装在隧道中,利用VPN骨干网建立专用数据传输通道,实现私网报文在公网上的透明传输。VPN具有良好的扩展能力和QOS(Quality Of Service,服务质量)特性,正逐渐得到广泛的应用,GRE(Generic Routing Encapsulation,通用路由封装)、L2TP(Layer 2TunnelingProtocol,二层隧道协议)、IPSec(Internet Protocol Security,互联网加密协议)是三种重要的隧道特性。
IP报文在网络中传输时,网络设备对IP报文的长度都有一个最大的限制,该最大长度就称为网络设备的MTU(Maximum Transmission Unit,最大传输单元)。在IPv4网络中,当IP报文长度超过网络设备的MTU值(如路由器的某个出接口链路的MTU值)时,就需要对IP报文进行分片再转发,即将IP报文分成若干片,使得每一片的长度都小于该路由器的出接口链路的MTU值。当一条链路中的各个网络设备的MTU值不相同时,链路上最小的MTU值将决定IP报文是否在路由器转发时被分片,该最小MTU被称为路径MTU(Path MTU),即构成源到目的之间路径的各段链路的MTU的最小值。
现有技术中一种检测路径MTU的方法原理如下参见图1,路由器A首先向路由器D发送IP报文,在IP报文头中将标志位DF(Don’t Fragment,禁止分片)置为1,则路由器在转发IP报文时,无论IP报文长度是否超过了路由器的出接口链路的MTU值都禁止对IP报文分片。如果中途某个路由器的出接口链路的MTU值小于IP报文长度,则该路由器会返回一个ICMP(Internet Control Message Protocol,互联网控制消息协议)不可达差错报文给路由器A,且在ICMP不可达差错报文中复用了第二个长字的低16位,用来表示该路由器的出接口链路的MTU值,如表1所示

表1路由器A收到ICMP不可达差错报文后,调整发送报文的长度后重新发送。经过不断的调整,当发送的报文长度等于路径MTU时,将不再返回ICMP不可达差错报文。通过上述方法,路由器A就能得到由路由器A到路由器D的路径MTU值。例如假设路由器A的出接口链路的MTU值是1500,路由器B的出接口链路的MTU值是1000,路由器C的出接口链路的MTU值是1500,路由器A会先发送一个长度为1500的IP报文给路由器B,根据路由器B返回的ICMP不可达差错报文路由器A将IP报文的长度调整为1000,IP报文顺利到达路由器D,则由路由器A到路由器D的路径MTU为1000。
上述现有技术的缺点是1、在VPN网络中无法准确地检测出路径MTU值。
参见图2,R1和R4是私有网络的路由器,它们属于同一个VPN,通过在公网的路由器R2和R3之间建立的GRE隧道实现互访。如果采用上面的方法,路由器R1发出的IP报文在路由器R2上会进入公网透明传输,即路由器R2不会对私网报文进行处理,而是把私网报文当作负载直接传输到对端的路由器R3,因此无法正确检测出路由器R2和R3之间的公网的路径MTU值。例如假设路由器R1的出接口链路的MTU值是1500,路由器R2和R3之间的路径MTU值是1000,路由器R3的出接口链路的MTU值是1500,则采用上述方法实际检测出的路径MTU值将会是1500。
2、有可能出现报文分片的情况,报文分片会降低公网上传输时的性能,当流量较大时,会给核心路由器带来较大的额外负担,严重占用网络资源。
参见图2和图3,IP报文在从路由器R2进入GRE隧道以及从路由器R3出GRE隧道时封装格式会发生变化。在IP报文进入GRE隧道时,需要在原IP报文头部添加新的GRE封装头和公网IP头,这样IP报文的长度就变为原报文长度与EL(Encapsulation Length,封装头的长度)之和。当添加封装头之后新报文的长度超出公网路径MTU值时,公网内的路由器就会对报文进行分片处理。
目前的分片处理方式有两种第一种是首先对私网报文进行分片,然后再给每一片重新打上新的外层封装(包括公网IP头和GRE头)。分片后的每片报文在到达路由器R3时,路由器R3可以直接进行解封装后进行IP转发,但是仍然不能保证打上封装后的分片报文不被中间路由器再次分片,一旦再次分片路由器R3就需要对报文进行重组。第二种是首先对私网报文打上新的外层封装(包括公网IP头和GRE头),然后对封装后的报文进行分片。分片报文在到达路由器R3时,由于除第一片报文外其它报文中不含有公网IP头、GRE头和私网IP头,路由器R3无法直接解封装处理,它需要缓存第一片报文等待其它分片报文的到来,收到所有分片报文后将它们重组成一个报文后进行解封装后转发。这种方式报文重组时,转发性能将会非常低,并且重组后的报文顺序无法恢复为报文的正常发送顺序,无法满足对报文顺序有严格要求的应用场合,另外路由器需要缓存先到达的分片报文,占用路由器资源。
如果路由器R2和R3之间建立的隧道是L2TP隧道或IPSec隧道时,同样存在上述缺点。

发明内容
为了解决在VPN网络中无法准确地检测出路径MTU值以及报文分片降低转发性能、占用网络资源的问题,本发明提供了一种检测路径最大传输单元的方法,具体包括以下步骤步骤A公网边缘路由器检测出所述公网的路径最大传输单元值,并根据公网隧道的配置计算出报文进入所述公网隧道需要添加的封装头长度;步骤B所述公网边缘路由器设置所述公网隧道的最大传输单元值为不高于所述公网的路径最大传输单元值减去所述封装头长度后的差值,并将所述公网隧道的最大传输单元值发送给私网中的与所述公网边缘路由器直连的路由器;步骤C所述私网中的与所述公网边缘路由器直连的路由器比较自己出接口链路的最大传输单元值和收到的所述公网隧道的最大传输单元值,取二者中最小值作为自己出接口链路的最大传输单元值;步骤D私网中的路由器根据各自的出接口链路的最大传输单元值获得相应路径最大传输单元值。
所述步骤B中将所述公网隧道的最大传输单元值发送给私网中的与所述公网边缘路由器直连的路由器的步骤具体为所述公网边缘路由器发送携带所述公网隧道的最大传输单元值的互联网控制消息协议不可达差错报文给私网中的与所述公网边缘路由器直连的路由器。
所述步骤B中将所述公网隧道的最大传输单元值发送给私网中的与所述公网边缘路由器直连的路由器的步骤具体为
所述公网边缘路由器发送携带所述公网隧道的最大传输单元值的IPv4协议报文给私网中的与所述公网边缘路由器直连的路由器。
所述步骤D中在检测路径最大传输单元值的过程中,所述私网中的与所述公网边缘路由器直连的路由器收到私网中与自己直连的上游路由器发来的IP报文后,判断所述IP报文的长度是否超出自己更新后的出接口链路的最大传输单元值,如果是,则将所述更新后的出接口链路的最大传输单元值传递给所述直连的上游路由器,否则将所述IP报文转发给所述公网边缘路由器。
所述私网中的与所述公网边缘路由器直连的路由器将所述更新后的出接口链路的最大传输单元值传递给所述直连的上游路由器的步骤具体为所述私网中的与所述公网边缘路由器直连的路由器发送携带所述更新后的出接口链路的最大传输单元值的互联网控制消息协议不可达差错报文或IPv4协议报文给所述直连的上游路由器。
所述公网隧道具体为通用路由封装隧道、二层隧道协议隧道或互联网加密协议隧道。
本发明还提供了一种检测路径最大传输单元的系统,具体包括公网边缘路由器和与其直连的私网路由器,所述公网边缘路由器包括(1)检测模块,用于检测出所述公网的路径最大传输单元值;(2)计算模块,用于根据公网隧道的配置计算出报文进入所述公网隧道需要添加的封装头长度,还用于设置所述公网隧道的最大传输单元值为不高于所述检测模块检测出的公网路径最大传输单元值减去所述封装头长度后的差值;(3)发送模块,用于将所述计算模块得出的公网隧道的最大传输单元值发送给所述私网路由器;所述私网路由器包括接收更新模块,用于接收所述发送模块发来的公网隧道的最大传输单元值,还用于比较自己出接口链路的最大传输单元值和收到的公网隧道的最大传输单元值,还用于取二者中最小值作为自己出接口链路的最大传输单元值。
所述发送模块可以为不可达差错报文发送模块,用于发送携带所述公网隧道最大传输单元值的互联网控制消息协议不可达差错报文给所述私网路由器。
所述发送模块还可以为
IPv4发送模块,用于发送携带所述公网隧道最大传输单元值的IPv4协议报文给所述私网路由器。
所述私网路由器还包括检测模块,用于在检测路径最大传输单元值的过程中接收由上游路由器发来的IP报文,还用于比较所述IP报文的长度和所述接收更新模块更新的出接口链路最大传输单元值,还用于根据比较结果转发所述IP报文给所述公网边缘路由器或返回所述接收更新模块更新的出接口链路最大传输单元值给所述上游路由器。
本发明的有益效果是1、在VPN网络中能够准确地检测出路径MTU值;2、避免了报文在进入公网传输时被分片,从而提高了网络转发性能,并且避免了隧道末端路由器重组报文的情形。


图1是现有技术一种检测路径MTU的方法原理图;图2是现有技术检测路径MTU的方法在VPN网络中应用的示意图;图3是现有技术报文进出GRE隧道时封装格式变化示意图;图4是本发明检测路径MTU的方法的一个实施例流程图;图5是本发明检测路径MTU的系统的一个实施例结构图。
具体实施例方式
下面结合附图和具体实施例对本发明作进一步说明,但不作为对本发明的限定。
在本发明中公网边缘路由器首先检测出公网的路径MTU值,并根据公网隧道的配置计算出报文进入公网隧道需要添加的封装头长度EL,然后设置公网隧道MTU值为不高于公网路径MTU值减去封装头长度EL后的差值,并发送给直连的私网路由器;直连的私网路由器比较自己出接口链路的MTU值和收到的公网隧道MTU值,取二者中最小值作为自己出接口链路的MTU值;私网中的路由器根据各自的出接口链路的MTU值获得相应路径MTU值。
结合图2本实施例以公网中的路由器R2和R3之间建立GRE隧道为例进行说明,GRE封装头结构如表2所示,GRE封装头中有四个选项,即C、R、K和S四个标志位,GRE封装头的长度会根据标志位的设置不同而不同。当C置1时表示GRE封装头中有Checksum和Offset域,长度为4个字节;当R置1时表示GRE封装头中有Routing域,长度为4个字节;当K置1时表示GRE封装头中有Key域,长度为4个字节;当S置1时表示GRE封装头中有Sequence Number域,长度为4个字节;如果所有选项都不支持即四个标志位全置为0时,GRE封装头的长度就仅有4个字节。

表2参见图2和图4,本发明提供了一种检测路径最大传输单元的方法,具体包括以下步骤步骤101公网边缘路由器即路由器R2利用设置DF标志位及ICMP不可达差错报文的方法检测出路由器R2到R3之间公网的路径MTU值并记为PMTU;步骤102路由器R2根据GRE隧道的配置计算出报文进入GRE隧道需要添加的EL;当GRE隧道不支持各种选项时,GRE封装头为四个字节,公网IP头长度为20字节,这样封装头长度最小值为ELmin=4+20=24字节,所以初始化将EL设为24字节,其它选项由路由器R2检查当前隧道状况后计算得出,由于当前路由器的实现不支持Routing选项,所以没有配置Routing的情况,则在GRE隧道中的计算方法如下(1)初始化EL为24个字节;(2)如果C置1即配置了Checksum域,则将EL加4个字节;(3)如果K置1即配置了Key域,则将EL加4个字节;(4)如果S置1即配置了Sequence Number域,则将EL加4个字节;步骤103路由器R2设置隧道MTU值TMTU(Tunnle MTU)为小于或等于得到的路径MTU值PMTU减去隧道封装头长度EL的差值,即TMTU≤PMTU-EL;步骤104路由器R2发送一个ICMP不可达差错报文给私网中的与路由器R2直连的路由器R1,将TMTU作为R2到R3之间的路径MTU值传递给路由器R1,参见表1,将ICMP不可达差错报文中的第二个长字的低16位修改为TMTU值,则TMTU值随同ICMP不可达差错报文一起传给路由器R1;路由器R1比较自己的出接口链路MTU值和收到的ICMP不可达差错报文中的TMTU值,取二者中最小值作为自己的出接口链路MTU值,此时私网内的路由器R1已经得到了公网路径MTU值并且将其更新到自己的出接口链路MTU值上,这里的公网路径MTU值已经是考虑了隧道封装头长度之后的路径MTU值,能保证报文进入隧道时不被分片;只有当路径MTU值被检测出之后,GRE隧道状态才变为连接状态;步骤105私网中的路由器根据各自的出接口链路的MTU值获得相应路径MTU值。
在隧道建立后,路由器R2定时检测隧道MTU值以便及时感知公网上路径MTU值变化的情况,实际使用中路径MTU值不会频繁变化,因此路由器R2不应过于频繁发送报文来试探R2、R3之间路径MTU值。
实际使用中,路由器R2上游节点可能比较多,但是R2只将隧道MTU值TMTU通告给与它直连的私网路由器R1,如果其它上游路由器Rx要通过公网隧道访问,即路由器Rx和R1相连接,则路由器Rx在检测链路MTU值时,路由器R2会将更新后的出接口链路的MTU值通过ICMP不可达差错报文向前传递,从而保证了路由器Rx检测出的路径MTU值不会大于隧道的MTU值。
在以后的数据传输中,路由器R1转发出的IP报文,能保证其IP报文长度不大于R2和R3之间隧道MTU值TMTU,这样IP报文在从路由器R2进入隧道时,打上外层GRE封装之后的报文长度仍然小于R2和R3之间的路径MTU值,IP报文在路由器R2和R3之间的公网进行传输时不会再度分片,从而保证了公网传输效率。
本实施例中的GRE隧道也可以由L2TP隧道或IPSec隧道来替换,相应地步骤102中根据L2TP隧道或IPSec隧道的配置计算出的隧道封装头长度略有不同。
本实施例中通过改造ICMP不可达差错报文的方法传递隧道MTU值,实际上也可以通过发送IPv4协议报文来传递隧道MTU值。
本实施例中得到的路径MTU值为从路由器R2到路由器R3方向的,同理从路由器R3到路由器R2方向路径MTU值由路由器R3负责检测,并传递给路由器R4,路由器R4更新其出接口链路的MTU,即比较自己的出接口链路MTU值和收到的TMTU值,取二者中最小值做为自己的出接口链路MTU值。
本发明中公网边缘路由器在以发送ICMP不可达差错报文方式传递公网边缘路由器更新后的出接口链路MTU值时,要求公网边缘路由器支持扩展ICMP,相应地私网中与公网边缘路由器直连的路由器也支持扩展ICMP;如果上游节点中还有需要检测公网路径MTU值的路由器,在以发送ICMP不可达差错报文方式传递公网边缘路由器更新后的出接口链路MTU值时,也需要该路由器支持扩展ICMP。
参见图5,本发明还提供了一种检测路径最大传输单元的系统,具体包括公网边缘路由器和与其直连的私网路由器,公网边缘路由器包括(1)检测模块,用于检测出公网的路径最大传输单元值;(2)计算模块,用于根据公网隧道的配置计算出报文进入公网隧道需要添加的封装头长度,还用于设置公网隧道的最大传输单元值为不高于检测模块检测出的公网路径最大传输单元值减去封装头长度后的差值;(3)发送模块,用于将计算模块得出的公网隧道的最大传输单元值发送给所述私网路由器;私网路由器包括接收更新模块,用于接收发送模块发来的公网隧道的最大传输单元值,还用于比较自己出接口链路的最大传输单元值和收到的公网隧道的最大传输单元值,还用于取二者中最小值作为自己出接口链路的最大传输单元值。
发送模块可以为不可达差错报文发送模块,用于发送携带公网隧道最大传输单元值的互联网控制消息协议不可达差错报文给所述私网路由器。
发送模块还可以为IPv4发送模块,用于发送携带公网隧道最大传输单元值的IPv4协议报文给所述私网路由器。
当私网中还存在与私网路由器直连的上游路由器时,上游路由器在检测路径MTU值时会向私网路由器发送IP报文,所以私网路由器还包括检测模块,用于在检测路径最大传输单元值的过程中接收由上游路由器发来的IP报文,还用于比较所述IP报文的长度和所述接收更新模块更新的出接口链路最大传输单元值,还用于根据比较结果转发所述IP报文给所述公网边缘路由器或返回所述接收更新模块更新的出接口链路最大传输单元值给所述上游路由器。
以上所述的实施例,只是本发明较优选的具体实施方式
的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
权利要求
1.一种检测路径最大传输单元的方法,其特征在于,所述方法具体包括以下步骤步骤A公网边缘路由器检测出所述公网的路径最大传输单元值,并根据公网隧道的配置计算出报文进入所述公网隧道需要添加的封装头长度;步骤B所述公网边缘路由器设置所述公网隧道的最大传输单元值为不高于所述公网的路径最大传输单元值减去所述封装头长度后的差值,并将所述公网隧道的最大传输单元值发送给私网中的与所述公网边缘路由器直连的路由器;步骤C所述私网中的与所述公网边缘路由器直连的路由器比较自己出接口链路的最大传输单元值和收到的所述公网隧道的最大传输单元值,取二者中最小值作为自己出接口链路的最大传输单元值;步骤D私网中的路由器根据各自的出接口链路的最大传输单元值获得相应路径最大传输单元值。
2.根据权利要求1所述的检测路径最大传输单元的方法,其特征在于,所述步骤B中将所述公网隧道的最大传输单元值发送给私网中的与所述公网边缘路由器直连的路由器的步骤具体为所述公网边缘路由器发送携带所述公网隧道的最大传输单元值的互联网控制消息协议不可达差错报文给私网中的与所述公网边缘路由器直连的路由器。
3.根据权利要求1所述的检测路径最大传输单元的方法,其特征在于,所述步骤B中将所述公网隧道的最大传输单元值发送给私网中的与所述公网边缘路由器直连的路由器的步骤具体为所述公网边缘路由器发送携带所述公网隧道的最大传输单元值的IPv4协议报文给私网中的与所述公网边缘路由器直连的路由器。
4.根据权利要求1所述的检测路径最大传输单元的方法,其特征在于,所述步骤D中在检测路径最大传输单元值的过程中,所述私网中的与所述公网边缘路由器直连的路由器收到私网中与自己直连的上游路由器发来的IP报文后,判断所述IP报文的长度是否超出自己更新后的出接口链路的最大传输单元值,如果是,则将所述更新后的出接口链路的最大传输单元值传递给所述直连的上游路由器,否则将所述IP报文转发给所述公网边缘路由器。
5.根据权利要求4所述的检测路径最大传输单元的方法,其特征在于,所述私网中的与所述公网边缘路由器直连的路由器将所述更新后的出接口链路的最大传输单元值传递给所述直连的上游路由器的步骤具体为所述私网中的与所述公网边缘路由器直连的路由器发送携带所述更新后的出接口链路的最大传输单元值的互联网控制消息协议不可达差错报文或IPv4协议报文给所述直连的上游路由器。
6.根据权利要求1至5中任一权利要求所述的检测路径最大传输单元的方法,其特征在于,所述公网隧道具体为通用路由封装隧道、二层隧道协议隧道或互联网加密协议隧道。
7.一种检测路径最大传输单元的系统,其特征在于,所述系统包括公网边缘路由器和与其直连的私网路由器,所述公网边缘路由器包括(1)检测模块,用于检测出所述公网的路径最大传输单元值;(2)计算模块,用于根据公网隧道的配置计算出报文进入所述公网隧道需要添加的封装头长度,还用于设置所述公网隧道的最大传输单元值为不高于所述检测模块检测出的公网路径最大传输单元值减去所述封装头长度后的差值;(3)发送模块,用于将所述计算模块得出的公网隧道的最大传输单元值发送给所述私网路由器;所述私网路由器包括接收更新模块,用于接收所述发送模块发来的公网隧道的最大传输单元值,还用于比较自己出接口链路的最大传输单元值和收到的公网隧道的最大传输单元值,还用于取二者中最小值作为自己出接口链路的最大传输单元值。
8.根据权利要求7所述的检测路径最大传输单元的系统,其特征在于,所述发送模块具体为不可达差错报文发送模块,用于发送携带所述公网隧道最大传输单元值的互联网控制消息协议不可达差错报文给所述私网路由器。
9.根据权利要求7所述的检测路径最大传输单元的系统,其特征在于,所述发送模块具体为IPv4发送模块,用于发送携带所述公网隧道最大传输单元值的IPv4协议报文给所述私网路由器。
10.根据权利要求7、8或9所述的检测路径最大传输单元的系统,其特征在于,所述私网路由器还包括检测模块,用于在检测路径最大传输单元值的过程中接收由上游路由器发来的IP报文,还用于比较所述IP报文的长度和所述接收更新模块更新的出接口链路最大传输单元值,还用于根据比较结果转发所述IP报文给所述公网边缘路由器或返回所述接收更新模块更新的出接口链路最大传输单元值给所述上游路由器。
全文摘要
本发明提供了一种检测路径最大传输单元的方法和系统,属于通讯技术领域。为了解决在VPN网络中无法准确地检测出路径最大传输单元值以及报文分片降低转发性能、占用网络资源的问题,本发明提供了一种检测路径最大传输单元的方法,包括公网边缘路由器检测出公网路径最大传输单元的步骤,计算公网隧道封装头长度的步骤和计算出公网隧道最大传输单元并发送给直连的私网路由器的步骤;本发明还提供了一种检测路径最大传输单元的系统,包括公网边缘路由器和直连的私网路由器;采用本发明所述的技术方案,不仅能在VPN网络中准确地检测出路径最大传输单元值,还可以避免报文在进入公网传输时被分片,从而提高了网络转发性能,避免了隧道末端路由器重组报文的情形。
文档编号H04L12/26GK1921440SQ20061015216
公开日2007年2月28日 申请日期2006年9月15日 优先权日2006年9月15日
发明者谢颂贤 申请人:华为数字技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1