具体实施方式
本发明中,终端连接设备与主机的关系包括两种情形:
I.终端连接设备独立于各个主机,作为隧道服务器工作在安全通信隧道的两端,这时,一个隧道服务器可以控制一个或多个主机的安全通信(如图1所示);
II.终端连接设备集成在主机上,作为其中的一个安全通信控制装置存在,这时,所述终端连接设备主要负责其所归属的主机的安全通信,根据需要,对该主机发往网卡的IP数据包和经由网卡接收到的数据包(尤其是隧道数据包)进行相关处理。
图1为基于IPSec协议族的用于经安全通信隧道进行安全通信的网络结构图。该网络包括两个隧道服务器1和2(即对应前述情形I的终端连接设备)、处于上述两个隧道服务器控制下的多个主机,为简明起见,仅示出主机a和主机b。主机a和主机b通过图中的两个隧道服务器间的安全通信隧道在互联网环境下进行基于IPSec协议族的特定安全通信。
用于主机a和主机b间的特定安全通信的安全通信隧道建立后,主机a和主机b即可开始安全通信:
-主机a向主机b发出一个IP数据包,很明显,此数据包属于其间的特定安全通信,需要基于IPSec协议族进行处理后以隧道数据包形式穿越互联网;
-主机a发出的IP数据包会首先到达图中的隧道服务器1,隧道服务器1根据该IP数据包的“目的地址-源地址”对,可以判断出该数据包属于主机a与主机b间的特定安全通信。于是,隧道服务器1根据相应的安全联盟对该数据包进行加密、封装等操作,该IP数据包便成为能够安全穿越互联网的隧道数据包,就该隧道数据包而言,隧道服务器1即为其源终端连接设备;
-因为目的主机即主机b处于隧道服务器2的控制之下,该隧道数据包经由隧道服务器1和隧道服务器2之间的属于主机a和主机b间特定安全通信的安全通信隧道到达隧道服务器2,就该隧道数据包而言,隧道服务器2即为目的终端连接设备;
-基于本发明提供的技术方案,隧道服务器2在接收到来自隧道服务器1的所述隧道数据包后,判断该数据包是否存在错误,并经由该安全通信隧道将存在错误的隧道数据包的细化错误通过错误指示消息(譬如,ICMP安全失败消息)报告给隧道服务器1。
容易理解,对应于前述情形II所述的终端连接设备,图1所示的隧道服务器1和隧道服务器2将分别位于主机a和主机b中(其它需要进行基于IPsec的安全通信的主机也会拥有各自的终端连接设备),用于控制相应主机的安全通信,其中,对数据包的处理过程与情形I下的处理过程相同,不再赘述。为简明起见,以下的描述也将主要针对情形I来展开。
区别于现有技术,本发明披露的隧道数据包错误报告方法对现有的ICMP安全失败消息进行了改进,RFC2521标准中定义的用于报告基于IPSec协议族的隧道数据包的错误的ICMP安全失败消息的格式如图2所示。
由图可见,原有ICMP安全失败消息包括6个域,分别是:
-Type域,其值为40,用于表示该消息为ICMP安全失败消息;
-Code域,表示相应隧道数据包的错误类型,前已述及,现有的ICMP安全失败消息单纯利用Code域进行错误报告,错误的细化程度低,粒度大。其中,该域各个取值对应的错误类型(即此后所述之一级错误类型)分别为,0:错误的SPI(安全策略指示);1:验证失败;2:解压缩失败;3:解密失败;4:需要验证;5:需要授权。很明显,现有ICMP安全失败消息由目的终端连接设备到达源终端连接设备后,源终端连接设备对隧道数据包的错误的定位仅能精确到上述6种类型的程度;
-Checksum域,ICMP安全失败消息的校验和;
-Reserved域(保留字段),现有的ICMP安全失败消息中,该域全部置为“0”;
-Pointer域,SPI在ICMP安全失败消息对应的隧道数据包的IP头中的偏移位置,如果没有SPI,则要求将其置“0”;
该ICMP安全失败消息对应的隧道数据包的IP头和前64位有效载荷。
采用上述ICMP安全失败消息作为隧道数据包的错误指示消息,影响了隧道数据包错误的报告粒度,源终端连接设备无法准确定位错误的具体类型,不利于对相应问题的解决。
图3为根据本发明的一个具体实施方式的在通信网络的隧道服务器中用于对基于IPSec协议族的数据包的错误进行报告的方法流程图。下面参照图3并结合图1和图5对该方法进行描述,其中,图5为根据本发明的一个具体实施方式的用于隧道数据包错误的细化报告的ICMP安全失败消息的格式示意图。该方法起始于步骤S101:
在步骤S101中,隧道服务器2接收来自隧道服务器1的用于主机a与主机b间特定安全通信的隧道数据包,该隧道数据包可能存在各种错误,进到步骤S102;
在步骤S102中,对所述接收到的数据包进行检测,判断其是否存在各种错误.以前述的Code域值为5对应的一级错误类型为例,本发明为其定义以下6种子错误类型(从属于该一级错误类型的各个二级错误类型),并用图5所示的ICMP安全失败消息中的Subcode域(属于原ICMP安全失败消息的Reserved域)来表示.在本实施例中,Subcode域为8个比特,而原ICMP安全失败消息的Reserved域共有16个比特,因此,剩余的8个空闲比特可以考虑仍然置“0”.
对应Code域值为5即一级错误类型为“需要授权”的情况,Subcode域的取值与其表示的意义的如下,
0:系统未识别错误子类型;
1:名字未经授权;
2:数据敏感等级未经授权;
3:传输层协议未经授权;
4:源端口未经授权;
5:目的端口未经授权。
很容易理解,Subcode域取值为1-5时,对应一级错误类型“需要授权”的5种子错误类型,隧道服务器1收到该ICMP安全失败消息后,根据该消息精确地定位其在先发送给隧道服务器2的隧道数据包的错误类型。
特别地,本发明中为Subcode域定义一个为“0”的取值,是因为在现有的RFC2521标准中,Reserved域的值为16比特的“0”,当隧道服务器2按照现有标准(即,不对数据包的二级错误类型进行报告)报告隧道数据包的错误时,其发送给隧道服务器1的ICMP安全失败消息中的Code域仍指示相应隧道数据包的一级错误类型,而图5中所示的Subcode域和Reserved域均为8比特“0”,这样,该ICMP安全失败消息格式就与基于现有RFC2521标准的消息格式相同,实现了对现有标准的兼容。
当该消息到达隧道服务器1后,隧道服务器1根据该消息能够得到以下信息:该ICMP安全失败消息对应的隧道数据包发生了Code域取值为5时对应的错误:“需要认证”,但具体的二级错误类型未知。
应当理解,本发明中,在ICMP安全失败消息中用于指示隧道数据包所存在的错误的二级错误类型的字段不限于上述实施例中所述的“Subcode”域,甚至可以不限于图2所示的现有标准中ICMP安全失败消息中的“Reserved”域,在实际操作中可以根据需要来在ICMP安全失败消息中选择合适的字段用于实现上述功能。
具体地,对应于Code域为5的情况,作为目的终端连接设备的隧道服务器2通过以下过程来确定如何为ICMP安全失败消息的Subcode域赋值:
I.如果隧道服务器2采用现有标准中的方案来报告隧道数据包的错误类型,则根据RFC2521的定义,进到步骤S 103中,为该出错隧道数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为0;
II.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断解封装后的IP数据包的有效载荷中的名字和SA中相应的选择符是否匹配,如果不匹配,则进到步骤S103,在步骤S103中为该数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为1;
其中,隧道数据包的封装协议有两种:AH和ESP,对于基于AH协议封装的隧道数据包,在解封装之前,该数据包的有效载荷是未经加密的明文,解封装时只需要检查数据包的数据完整性;而对于基于ESP协议封装的隧道数据包,在解封装之前,数据包的有效载荷是加密过的密文,因此需要在解封装后不仅要检查数据包的数据完整性,还要解密数据包的有效载荷;
III.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断IP数据包有效载荷中的数据敏感等级和SA中相应的选择符是否匹配,如果不匹配则进到步骤S103,为该数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为2;
IV.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断IP数据包有效载荷中的传输层协议和SA中相应的选择符是否匹配,如果不匹配则进到步骤S103,为该数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为3;
V.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断IP数据包有效载荷中的源端口和SA中相应的选择符是否匹配,如果不匹配则进到步骤S103,为该数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为4;
VI.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断IP数据包有效载荷中的目的端口和SA中相应的选择符是否匹配,如果不匹配则进到步骤S103,为该数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为5。
在步骤S103中为出错隧道数据包生成ICMP安全失败消息后,进到步骤S104,在步骤S104中,隧道服务器2将该ICMP安全失败消息发送给隧道服务器1,隧道服务器1根据该ICMP安全失败消息的指示,可以得知其之前发送的隧道数据包的具体的错误类型。
图4为根据本发明的一个具体实施方式的在通信网络中用于对基于IPSec协议族的数据包的错误进行报告的隧道服务器框图。下面参照图4并结合图1和图5对其进行描述。图1中工作在目的终端连接设备状态下的隧道服务器2包括:一个接收装置101、一个判断装置102、一个生成装置103和一个发送装置104。
来自源终端连接设备(隧道服务器1)的用于主机a与主机b间特定安全通信的隧道数据包到达后,由所述接收装置101负责接收,该隧道数据包可能存在各种错误,于是,接收装置101将其接收到的隧道数据包传递给所述判断装置102;
判断装置102通过对由接收装置101接收到的隧道数据包进行检测,判断其是否存在各种错误。以前述的Code域值为5一级错误类型为例,本发明为其定义以下6种子错误类型(从属于该一级错误类型的二级错误类型),并用图5所示的ICMP安全失败消息中的Subcode域(属于原ICMP安全失败消息的Reserved域)来表示。在本实施例中,Subcode域为8个比特,而原ICMP安全失败消息的Reserved域共有16个比特,因此,剩余的8个空闲比特可以考虑仍然置“0”。
对应Code域值为5即一级错误类型为“需要授权”的Subcode域的取值与其表示的意义的对应关系如下,0:系统未识别错误子类型;1:名字未经授权;2:数据敏感等级未经授权;3:传输层协议未经授权;4:源端口未经授权;5:目的端口未经授权。
很容易理解,Subcode域取值为1-5时,对应一级错误类型“需要授权”的5种子错误类型,隧道服务器1(源终端连接设备)收到来自隧道服务器2的该ICMP安全失败消息后,可以精确地定位其在先发送给隧道服务器2的隧道数据包的错误类型。
特别地,本发明中为Subcode域定义一个为“0”的取值,是因为在现有的RFC2521标准中,Reserved域的值为16比特的“0”,当隧道服务器2按照现有标准(即,不对数据包的二级错误类型进行报告)报告隧道数据包的错误时,由其中的发送装置104发送给隧道服务器1的ICMP安全失败消息中的Code域仍指示相应隧道数据包的一级错误类型,而图5中所示的Subcode域和Reserved域均为8比特“0”,这样,该ICMP安全失败消息格式就与基于现有RFC2521标准的消息格式相同,实现了对现有标准的兼容.
当该消息到达隧道服务器1后,隧道服务器1根据该消息能够得到以下信息:该ICMP安全失败消息对应的隧道数据包发生了Code域取值为5时对应的错误:“需要认证”,但具体的二级错误类型未知。应当理解,本发明中,在ICMP安全失败消息中用于指示隧道数据包所存在的错误的二级错误类型的字段不限于上述实施例中所述的“Subcode”域,甚至可以不限于图2所示的现有标准中ICMP安全失败消息中的“Reserved”域,在实际操作中可以根据需要来在ICMP安全失败消息中选择合适的字段用于实现上述功能。
具体地,对应于Code域为5的情况,作为目的终端连接设备的隧道服务器2通过以下过程来确定如何为ICMP安全失败消息的Subcode域赋值:
I.如果隧道服务器2采用现有标准中的方案来报告隧道数据包的错误类型,则根据RFC2521的定义,由该生成装置103为该出错隧道数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为0,Code域取值为5(下同,Code域取值情况不再赘述);
II.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断装置102需要判断解封装后的IP数据包的有效载荷中的名字和SA中相应的选择符是否匹配,如果不匹配,则由所述生成装置103为该出错隧道数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为1;
其中,隧道数据包的封装协议有两种:AH和ESP,对于基于AH协议封装的隧道数据包,在解封装之前,该数据包的有效载荷是未经加密的明文,解封装时只需要检查数据包的数据完整性;而对于基于ESP协议封装的隧道数据包,在解封装之前,数据包的有效载荷是加密过的密文,因此需要在解封装后不仅要检查数据包的数据完整性,还要解密数据包的有效载荷;
III.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断装置102需要判断IP数据包有效载荷中的数据敏感等级和SA中相应的选择符是否匹配,如果不匹配,则由该生成装置103为该出错隧道数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为2;
IV.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断IP数据包有效载荷中的传输层协议和SA中相应的选择符是否匹配,如果不匹配,则由该生成装置103为该出错隧道数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为3;
V.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断IP数据包有效载荷中的源端口和SA中相应的选择符是否匹配,如果不匹配,则由该生成装置103为该出错隧道数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为4;
VI.隧道服务器2对来自隧道服务器1的隧道数据包进行正确解封装之后,判断IP数据包有效载荷中的目的端口和SA中相应的选择符是否匹配,如果不匹配,则由该生成装置103为该数据包生成一个ICMP安全失败消息,其中,该消息的Subcode域取值为5。
生成装置103为出错隧道数据包生成ICMP安全失败消息后,将该消息传递给该发送装置104,并由发送装置104将该ICMP安全失败消息发送给隧道服务器1,隧道服务器1根据该ICMP安全失败消息的指示,可以得知其之前发送的隧道数据包的具体的错误类型。
为使作为目的终端连接设备的隧道服务器2根据接收到的上述隧道服务器1发出的错误指示消息(如,ICMP安全失败消息)能够正确定位相应出错隧道数据包的各级错误类型,本发明提供了一种在通信网络的隧道服务器中用于对基于IPSec协议族的错误指示消息进行解析的方法。
图6为根据本发明的一个具体实施方式的在通信网络的隧道服务器中用于对基于IPSec协议族的错误指示消息进行解析的方法流程图。下面参照图6并结合图1和图5对该方法进行详述,该方法起始于步骤S201:
在步骤S201中,隧道服务器1接收隧道服务器2经由安全通信隧道发来的错误指示消息(譬如,ICMP安全失败消息),不失一般性,假设该ICMP安全失败消息的Code域值为5,Subcode域值为1。接收到该ICMP安全失败消息后,进到步骤S202;
在步骤S202中,隧道服务器1从指示相应出错隧道数据包的各级错误类型的错误指示消息中获取表示各级错误类型的错误信息,具体地,在本实施例中,隧道服务器1从来自隧道服务器2的ICMP安全失败消息的Code域和Subcode域中分别获取到表示一级错误类型的错误信息“5”以及表示二级错误类型的错误信息“1”,此后,进到步骤S203;
在步骤S203中,隧道服务器1通过将步骤S202中获取的错误信息与本地保存的错误列表(包含错误信息与具体错误类型的映射关系)进行比较以判断出该出错隧道数据包存在的各级错误类型,具体地,可采用如下方式:
-将从Code域获取的“5”与该错误列表中的Code域部分进行比较,可以判断出该出错隧道数据包存在的错误的一级错误类型为“需要授权”;
-将从Subcode域获取的“1”与该错误列表中的Subcode域部分进行比较(可以结合上述从Code域获取的错误信息“5”),可以判断出具体二级错误类型为“解封装后的IP数据包有效载荷中的名字与SA中相应的选择符不匹配”。
图7为根据本发明的一个具体实施方式的在通信网络中用于对基于IPSec协议族的错误指示消息进行解析的隧道服务器框图。下面参照图7并结合图1和图5对该隧道服务器(如,图1所示的隧道服务器1)进行描述,其具体包括一个接收装置201和一个解析装置202,该解析装置202包括一个获取装置2021和一个判断装置2022。
当来自隧道服务器2的错误指示消息(譬如,ICMP安全失败消息)经安全通信隧道到达隧道服务器1后,由该接收装置201负责接收,不失一般性,假设该ICMP安全失败消息的Code域值为5,Subcode域值为1。接收到该ICMP安全失败消息后,将其传递给该获取装置2021;
接着,由获取装置2021从指示出错隧道数据包的各级错误类型的错误指示消息中获取表示各级错误类型的错误信息,具体地,在本实施例中,隧道服务器1从来自隧道服务器2的ICMP安全失败消息的Code域和Subcode域中分别获取到表示一级错误类型的错误信息“5”以及表示二级错误类型的错误信息“1”,此后将其获取到的错误信息传递给该判断装置2022;
判断装置2022通过将由该获取装置2021获取的错误信息与本地保存的错误列表(包含错误信息与具体错误类型的映射关系)进行比较以判断出该出错隧道数据包存在的各级错误类型,为保存该错误列表,隧道服务器中可能还需要配置一个存储装置,为简明起见未在图中示出。具体地,可采用如下方式:
-判断装置2022将从Code域获取的“5”与该错误列表中的Code域部分进行比较,可以判断出该出错隧道数据包存在的错误的一级错误类型为“需要授权”;
-判断装置2022将从Subcode域获取的“1”与该错误列表中的Subcode域部分进行比较(可以结合上述从Code域获取的错误信息“5”),可以判断出具体二级错误类型为“解封装后的IP数据包有效载荷中的名字与SA中相应的选择符不匹配”。
至此,采用本发明提供的技术方案,实现了对出错隧道数据包的错误类型的细化报告,便于源隧道数据包对该隧道数据包的错误进行精确定位,以便排除。
应当理解,隧道服务器1与隧道服务器2之间是相互对称的,当隧道服务器2控制下的主机b需要经由隧道服务器1与隧道服务器2之间的安全通信隧道向主机a发送属于其间安全通信的IP数据包时,隧道服务器2就成为了源终端连接设备,隧道服务器1则成为了目的终端连接设备,需要判断隧道数据包是否出错并为出错隧道数据包生成错误指示消息,报告给隧道服务器2,即:一个终端连接设备应该同时具备发送ICMP安全失败消息和解析该消息的功能。
以上主要针对出错隧道数据包的一级错误类型为“需要授权”的情形对本发明的具体实施例进行了描述,对于其它一级错误类型,可以不予细化,或者根据实际操作中的技术需要进行相应的细化。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在所附权利要求的范围内做出各种变形或修改。