动态发现IPsec隧道PMTU的方法

文档序号:7550679阅读:305来源:国知局
专利名称:动态发现IPsec隧道PMTU的方法
技术领域
本发明涉及计算机领域,尤其涉及计算机系统中的信息安全技术。
背景技术
随着计算机系统在各个领域中得到日益广泛的应用,随着互联网日益深入到社会生活的各个层面,对于计算机系统和互联网的安全问题,也日益成为一个受到广泛关注的问题。一般情况下,在Internet上使用IPsec(IPSecurity,因特网安全协议)部署VPN(Virtual Private Network,虚拟专用网)时,需要使用IPsec协议为VPN网关之间穿越公共网的IP隧道提供加密和认证保护,IPsec协议通过AH(Authentication Head,IP认证头协议)和ESP(Encapsulating Security Payload,IP封装安全载荷协议)为IP(InternetProtocol,因特网协议)报文提供安全保护。当主机发送的IP包到达IPsec网关时,网关在本地的SPD(Security Policy Database,安全策略数据库)中查找对应的SP(Security Policy,安全策略),SP主要包括三种安全策略直接通过(Bypass)、丢弃(Drop)和应用IPsec。如果SP规定对某个IP包应用IPsec保护,就需要规定如何保护该IP包,并提供相应的一个或多个SA(Security Association,安全联盟)。SA规定了为IP包提供安全保护所使用的安全协议(AH或/和ESP)、加密和认证算法、密钥和密钥长度等信息。具体内容参见IETF(Internet Engineering Task Force,因特网工程任务组)的《RFC 2401IPsec协议体系结构》。IPsec网关根据SA提供的参数在主机发送的IP包外层添加AH报头和/或ESP报头报尾,并添加外层IP报头,其中源地址和目的地址是IPsec隧道两端的网关,这个过程称为IPsec隧道封装。如果原来IP报头的DF(Don’t Fragment,不允许分片)标志被设置时,IPsec隧道封装时外层IP报头的DF标志也应该同时设置。
IETF的《RFC 1191路径MTU发现》提出了主机动态发现PMTU(PathMaximum Transmission Unit,路径最大传输单元)的标准方法。主机发送IP包时在报头设置DF标志,如果传输路径上某个路由器发现这个IP包的长度大于它的下一跳MTU(Maximum Transmission Unit,最大传输单元),就丢弃当前IP包,并向源地址发送一个ICMP(Internet Control MessageProtocol,因特网控制消息协议)报文。这个ICMP报文的类型为3,错误代码为4,表示“需要分片,但是设置了DF标志”,此外,ICMP报头中还带有路由器下一跳的MTU,数据部分带有被丢弃IP包的IP报头和64比特的部分载荷。源主机收到这个ICMP报文后减小对PMTU的估计,重复上述过程可以动态发现PMTU。
当IP包的传输路径中存在IPsec隧道时,如果隧道内部某个路由器的下一跳MTU小于IPsec隧道封装后的报文长度,并且外层IP报头的DF标志被设置,路由器就放弃转发报文,同时向源地址(即进行IPsec隧道封装的网关)发送一个类型为3,错误代码为4的ICMP报文。由于路由器将这个ICMP报文发送给IPsec网关而不是源主机,同时IPsec网关收到的ICMP报文的数据部分只携带了被丢弃报文的外层IP报头和64比特的部分AH报头或ESP报头,这些有限的信息不足以确定被丢弃报文的源主机,因此在实际系统中,标准的PMTU动态发现机制无法有效应用在IPsec隧道环境中,目前也没有解决这一问题的有效方法。

发明内容
本发明的目的是克服现有技术存在的标准PMTU动态发现机制不能确定被丢弃报文的源主机,无法有效应用在IPsec隧道环境的缺点,以期提出一种能够准确确定被丢弃报文的源主机,以便更有效地保证数据安全传输的动态发现IPsec隧道PMTU的方法。
为实现上述目的,本发明提出了一种动态发现IPsec隧道PMTU的方法,其特征在于,包括以下步骤步骤一计算和保存IPsec隧道PMTU信息;步骤二传递IPsec隧道PMTU信息;步骤三更新IPsec隧道PMTU信息。
上述步骤进一步包括以下步骤第一步IPsec网关使用下一跳链路的MTU减去IPsec隧道封装需要的开销,计算结果MTU’作为对IPsec隧道PMTU的初始估计,并记录在相应的SP中;第二步主机发送的带有DF标志的IP包到来后,IPsec网关首先查找相应的SP,同时判断出该IP包的长度大于SP中记录的MTU’;
第三步IPsec网关丢弃该IP包,向源主机发送一个ICMP报文,通知下一跳MTU为MTU’;第四步源主机收到ICMP报文后,更新PMTU估计,减小发送IP包的长度;IPsec网关对其进行IPsec封装后长度小于MTU,同时将内层IP报头的DF标志复制到外层IP报头中;第五步路由器发现经过IPsec隧道封装的IP报文长度大于下一跳链路MTU,放弃转发并返回ICMP报文通知源地址其下一跳MTU是MTU2;第六步IPsec网关收到IPsec隧道内部传来的类型为3错误代码为4的ICMP报文后,使用其中的MTU2减去IPsec隧道封装开销,用计算结果MTU2’去更新相应SP中记录的MTU’;第七步主机再次发送的带有DF标志的IP包到来时,IPsec网关使用第二步和第三步中的方法通知源主机使用MTU2’更新PMTU估计;第八步IPsec网关每次在SP中记录IPsec隧道PMTU信息时,同时设置一个计时器。计时到期后从第一步开始重复上述步骤。
对于存在多层IPsec隧道嵌套的情况,在第六步中,IPsec网关首先计算外层IPsec隧道的PMTU,记录到对应的SP中,然后进一步减去内层IPsec隧道封装的开销,得到内层IPsec隧道PMTU并记录到对应的SP中。
本发明所述方法在不需要对主机和路由器进行改动的情况下,实现主机动态发现通过IPsec隧道的PMTU,避免IP包在IPsec隧道传输路径中发生分片和重组,更有效的利用网络带宽。


图1是本发明所述方法的流程图。
图2是作为本发明具体实施方式
的过程图。
图3是IPsec隧道嵌套状态图。
图4是IPsec隧道封装嵌套时SP和SA的数据结构图。
具体实施例方式
本发明主要是提出了一种在IPsec隧道系统环境中动态发现PMTU的方法。
许多IPsec网关能够针对不同的TCP或UDP端口配置不同的安全策略,这种IPsec网关往往需要对所有IP包分片进行重组来得到传输层协议和端口,然后才能进一步查找安全策略。这往往造成所有经过IPsec网关的IP分片都先进行重组,执行IPsec处理后再次被分片转发,和普通路由器直接转发IP包分片相比,IPsec网关的处理负担很重,容易造成网络阻塞。使用本发明提出的方法后,主机发送的IP包在IPsec隧道中传送时很少发生分片,避免IPsec网关因为执行大量分片和重组而出现阻塞。
如图1所示,本发明提出的动态发现IPsec隧道PMTU方法,要求IPsec网关在收到来自隧道内部带有PMTU信息的ICMP报文后,计算IPsec隧道PMTU并记录在相应的SP中,然后在下一次查询SP时确定引发ICMP报文的源主机,最后构造新的ICMP报文将PMTU信息传递给源主机。这种方法不需要对Internet上的主机和路由器的标准PMTU动态发现机制进行任何改动。
图2是作为本发明具体实施方式
的过程图。动态发现IPsec隧道PMTU的过程。图中主机的下一跳链路的MTU为MTU1,IPsec网关下一跳链路的MTU为MTU2,路由器右端链路的MTU为MTU3,同时MTU1大于或等于MTU2,而MTU3小于MTU2。具体过程如下1.IPsec网关使用下一跳链路的MTU(图中是MTU2)减去IPsec隧道封装需要的开销,计算结果(记为MTU2’)作为对IPsec隧道PMTU的初始估计,并记录在相应的SP中。
2.主机发送的带有DF标志的IP包到来后,IPsec网关首先查找相应的SP,同时判断出IP包的长度大于SP中记录的MTU2’。
3.IPsec网关丢弃这个IP包,向源主机发送一个ICMP报文,通知下一跳MTU为MTU2’。
4.源主机收到ICMP报文后,更新PMTU估计(参见IETF的《RFC 1191路径MTU发现》),减小发送IP包的长度。IPsec网关对其进行IPsec封装后长度小于MTU2,同时将内层IP报头的DF标志复制到外层IP报头中。
5.路由器发现经过IPsec隧道封装的IP报文长度大于下一跳链路MTU,放弃转发并返回ICMP报文通知源地址(注外层IP报头的源地址是IPsec网关)它的下一跳MTU是MTU3(参见IETF的《RFC1191路径MTU发现》)。
6.IPsec网关收到IPsec隧道内部传来的ICMP报文后,使用其中的MTU3减去IPsec隧道封装开销,用计算结果MTU3’去更新相应SP中记录的MTU2’。
7.主机再次发送的带有DF标志的IP包到来时,IPsec网关使用步骤2、3中的方法通知源主机使用MTU3’更新PMTU估计。
8.IPsec网关每次在SP中记录IPsec隧道PMTU信息时,同时设置一个计时器。计时到期后从步骤1开始重复上述步骤。
对于存在多层IPsec隧道嵌套的情况,本发明提出的方法和系统同样有效,这时在步骤6中,IPsec网关首先计算外层IPsec隧道的PMTU,记录到对应的SP中,然后进一步减去内层IPsec隧道封装的开销,得到内层IPsec隧道PMTU并记录到对应的SP中。
综合以上步骤,结合附图1到4,可以将本发明所述的动态发现IPsec隧道PMTU方法分为IPsec隧道PMTU的计算和保存、IPsec隧道PMTU信息的传递和IPsec隧道PMTU的更新三个大的方面,具体说明如下一、IPsec隧道PMTU的计算和保存IPsec网关用下一跳链路MTU减去IPsec隧道封装的开销,计算结果作为对IPsec隧道内部实际PMTU的初始估计,然后把它保存在相应的SP中。
IPsec网关接收到来自隧道内部路由器传来的带有PMTU信息的ICMP报文后,首先从ICMP报头中取出路由器下一跳MTU,从ICMP数据部分取出IPsec隧道封装的外层IP报头和64比特部分AH报头或ESP报头。接着从外层IP报头中提取出目的地址和IPsec协议,从64比特的部分AH报头或ESP报头中提取出SPI(Security Parameter Index,安全参数索引)。对于AH报头,SPI字段范围是第33到64比特,对于ESP报头,SPI字段的范围是1到32比特。然后根据{目的地址,IPsec协议,SPI}三元组能在SAD(Security Association Database,安全联盟数据库)中唯一确定一个SA,每一个SA都有指向对应SP的反向指针,进一步找到被丢弃IP包对应的SP;最后,IPsec网关用传递来的路由器下一跳MTU减去IPsec隧道封装开销,计算出来的结果作为新的IPsec隧道PMTU估计,记录在SP中。
二、IPsec隧道PMTU信息的传递主机发送的IP包到达IPsec安全网关时,首先查看SPD,找到相应的SP。如果IP报头的DF标志被设置,同时IP包长度大于SP中记录的隧道PMTU,IPsec网关就像普通路由器那样放弃IPsec隧道封装和转发,并构造一个类型为3、错误代码为4的ICMP报文发送给被丢弃IP包的源主机。ICMP报头的下一跳MTU字段携带SP中记录的IPsec隧道PMTU。源主机收到这个ICMP报文后得到PMTU信息。
在图3所示的IPsec隧道嵌套的情况下,IPsec隧道PMTU信息是由外层IPsec隧道向内层隧道逐级传递的,下面分两个方向详细描述PMTU信息的传递过程。
主机A到主机B方向图3中主机A发往主机B的IP包分别经过IPsec网关C和D进行了两次IPsec隧道封装,如果这时的IP包长度大于路由器R的下一跳MTU,路由器R就会向IPsec网关D发送带有PMTU信息的ICMP报文。IPsec网关D计算外层IPsec隧道PMTU并保存在SP中,IPsec网关C对主机A后续发送的IP包进行IPsec隧道封装后传送到IPsec网关D,如果SP中记录的外层IPsec隧道PMTU小于IP包长度,IPsec网关D就会向IPsec网关C发送ICMP报文,通告外层IPsec隧道的PMTU,IPsec网关C收到ICMP报文后计算内层IPsec隧道PMTU并记录到相应SP中。当主机A再次发送的带DF标志的IP包到达IPsec网关C时,如果IP包长度大于内层IPsec隧道PMTU,IPsec网关C就会向主机A发送ICMP报文,将PMTU信息传递给主机A。
主机B到主机A方向图3中的主机B发往A的IP包在IPsec网关E先后进行了两次IPsec隧道封装,在SPD中对应着嵌套的安全策略,SP和SA采用如图4所示的数据结构。对应内层IPsec隧道的SP1通过指针连接对应外层IPsec隧道的SP2,同时SP2有一个反向指针指向SP1。经过两层IPsec隧道封装的IP包传送到路由器R时,如果IP包的长度大于路由器R的下一跳MTU,路由器R就会向IPsec网关E发送带有PMTU信息的ICMP报文。IPsec网关E计算出外层IPsec隧道PMTU并保存在SP2中,接着通过反向指针找到SP1,并把进一步计算出来的内层IPsec隧道PMTU保存到SP1中。当主机B再次发送的带DF标志的IP包到达IPsec网关E时,如果IP包长度大于SP1中保存的内层IPsec隧道PMTU,IPsec网关E就会向主机B发送ICMP报文,将PMTU信息传递给主机B。
通过IPsec隧道PMTU信息的传递,主机能够迅速发现IPsec隧道PMTU的减小。
三、IPsec隧道PMTU的更新IPsec网关在SP中记录IPsec隧道PMTU信息的同时设置一个计时器,计时器到期后IPsec网关用下一跳链路MTU减去IPsec隧道开销,并把计算结果更新到SP中。再经过上述IPsec隧道PMTU信息的传递过程,可以重新动态发现当前IPsec隧道PMTU。通过这种定期更新机制,能够缓慢发现IPsec隧道PMTU的增大。
权利要求
1.一种动态发现IPsec隧道PMTU的方法,其特征在于,包括以下步骤步骤一计算和保存IPsec隧道PMTU信息;步骤二传递IPsec隧道PMTU信息;步骤三更新IPsec隧道PMTU信息。
2.根据权利要求1所述的动态发现IPsec隧道PMTU的方法,其特征在于,所述步骤一包括以下步骤IPsec网关使用下一跳链路的MTU减去IPsec隧道封装需要的开销,计算结果MTU’作为对IPsec隧道PMTU的初始估计,并记录在相应的SP中。
3.根据权利要求2所述的动态发现IPsec隧道PMTU的方法,其特征在于,具体包括以下步骤(1)IPsec网关接收来自隧道内部路由器传来的带有PMTU信息的ICMP报文;(2)从ICMP报头中取出路由器下一跳MTU,从ICMP数据部分取出IPsec隧道封装的外层IP报头和64比特部分AH报头或ESP报头;(3)从外层IP报头中提取出目的地址和IPsec协议,从64比特的部分AH报头或ESP报头中提取出SPI;(4)根据{目的地址,IPsec协议,SPI}三元组在SAD中唯一确定一个SA,每一个SA都有指向对应SP的反向指针,进一步找到被丢弃IP包对应的SP;(5)IPsec网关用传递来的路由器下一跳MTU减去IPsec隧道封装开销,计算出来的结果作为新的IPsec隧道PMTU估计,记录在SP中。
4.根据权利要求1所述的动态发现IPsec隧道PMTU的方法,其特征在于,所述步骤二包括以下步骤第一步主机发送的带有DF标志的IP包到来后,IPsec网关首先查找相应的SP,同时判断出该IP包的长度大于SP中记录的MTU’;第二步IPsec网关丢弃该IP包,向源主机发送一个ICMP报文,通知下一跳MTU为MTU’;第三步源主机收到ICMP报文后,更新PMTU估计,减小发送IP包的长度;IPsec网关对其进行IPsec封装后长度小于MTU,同时将内层IP报头的DF标志复制到外层IP报头中;第四步路由器发现经过IPsec隧道封装的IP报文长度大于下一跳链路MTU,放弃转发并返回ICMP报文通知源地址其下一跳MTU是MTU2;第五步IPsec网关收到IPsec隧道内部传来的类型为3、错误代码为4的ICMP报文后,使用其中的MTU2减去IPsec隧道封装开销,用计算结果MTU2’去更新相应SP中记录的MTU’;第六步主机再次发送的IP包到来时,IPsec网关使用第一步和第二步中的方法通知源主机使用MTU2’更新PMTU估计。
5.根据权利要求4所述的动态发现IPsec隧道PMTU的方法,其特征在于,在第五步中,对于存在多层IPsec隧道嵌套的情况,IPsec网关首先计算外层IPsec隧道的PMTU,记录到对应的SP中,然后进一步减去内层IPsec隧道封装的开销,得到内层IPsec隧道PMTU并记录到对应的SP中。
6.根据权利要求1所述的动态发现IPsec隧道PMTU的方法,其特征在于,所述步骤三包括以下步骤IPsec网关每次在SP中记录IPsec隧道PMTU信息时,同时设置一个计时器,计时到期后从步骤一开始重复上述步骤。
全文摘要
本发明提出了一种动态发现IPsec隧道PMTU的方法,包括以下步骤步骤一计算和保存IPsec隧道PMTU信息;步骤二传递IPsec隧道PMTU信息;步骤三更新IPsec隧道PMTU信息。本发明能够克服现有技术存在的标准PMTU动态发现机制不能确定被丢弃报文的源主机,无法有效应用在IPsec隧道环境的缺点,实现主机动态发现通过IPsec隧道的PMTU,避免IP包在IPsec隧道传输路径中发生分片和重组,更有效的利用网络带宽。
文档编号H04L12/66GK1545253SQ20031011351
公开日2004年11月10日 申请日期2003年11月13日 优先权日2003年11月13日
发明者李卓明, 赵洁, 李亚晖, 陈海彬, 彭志威 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1