发明内容
本发明提供一种TCP连接建立的方法和设备,以在Initiator与Target之间部署NAT设备时,实现TCP连接的建立过程。
为了达到上述目的,本发明提供一种传输控制协议TCP连接建立的方法,应用于包括连接发起设备Initiator、连接接收设备Target和网络地址转换NAT设备的基于互联网的小型计算机系统接口iSCSI网络中,该方法包括以下步骤:
所述Target确定所述Initiator和所述Target的位置情况;
当确定结果为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,所述Target向所述Initiator发送TCP连接请求报文,以建立所述Target与所述Initiator之间的TCP连接。
所述Target确定所述Initiator和所述Target的位置情况,具体包括:
所述Target接收来自所述Initiator的发现会话请求报文,所述发现会话请求报文中封装有会话请求内容,且所述会话请求内容中携带有所述Initiator在发送所述发现会话请求报文时的源地址和目的地址;
当所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址不同时,所述Target确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址不同时,所述Target确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址相同,且所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址相同时,所述Target确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
在所述Target接收来自所述Initiator的发现会话请求报文与所述Target向所述Initiator发送TCP连接请求报文之间,所述方法还包括:
当所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,所述Target向所述Initiator发送发现会话的响应报文,所述响应报文中携带由所述Target使能反向TCP连接的信息;
由所述Initiator利用所述Target使能反向TCP连接的信息确定TCP连接过程由所述Target发起,并等待所述Target发送的TCP连接请求报文,以建立所述Target与所述Initiator之间的TCP连接。
所述Target确定所述Initiator和所述Target的位置情况,具体包括:
所述Target接收来自所述Initiator的发现会话请求报文,并向所述Initiator发送发现会话的响应报文,所述响应报文中封装有会话响应内容,且所述会话响应内容中携带有所述Target在发送所述响应报文时的源地址和目的地址;
由所述Initiator利用所述响应报文的报文头中的源地址和目的地址以及所述会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况;
当确定结果为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,所述Target接收来自所述Initiator的位置情况的通知消息,并利用所述通知消息确定所述Initiator和所述Target的位置情况。
所述Initiator利用所述响应报文的报文头中的源地址和目的地址以及所述会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况,具体包括:
当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址不同时,所述Initiator确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址不同时,所述Initiator确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址相同,且所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址相同时,所述Initiator确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
所述Target向所述Initiator发送TCP连接请求报文,具体包括:
所述Target利用IP地址与Target的绑定关系选择出口IP地址,并通过所述出口IP地址向所述Initiator发送TCP连接请求报文。
一种传输控制协议TCP连接建立的方法,应用于包括连接发起设备Initiator、连接接收设备Target和网络地址转换NAT设备的基于互联网的小型计算机系统接口iSCSI网络中,该方法包括以下步骤:
所述Initiator将所述Initiator和所述Target的位置情况的信息通知给所述Target,由所述Target利用该信息确定所述Initiator和所述Target的位置情况;
当所述Initiator获知位置情况为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,所述Initiator确定TCP连接过程由所述Target发起,并等待所述Target发送的TCP连接请求报文,以建立所述Target与所述Initiator之间的TCP连接。
所述Initiator将所述Initiator和所述Target的位置情况的信息通知给所述Target,由所述Target利用该信息确定所述Initiator和所述Target的位置情况,具体包括:
所述Initiator向所述Target发送发现会话请求报文,所述发现会话请求报文中封装有会话请求内容,且所述会话请求内容中携带有所述Initiator在发送所述发现会话请求报文时的源地址和目的地址;
由所述Target利用所述发现会话请求报文的报文头中的源地址和目的地址以及所述会话请求内容中的源地址和目的地址确定所述Initiator和所述Target的位置情况。
所述Target利用所述发现会话请求报文的报文头中的源地址和目的地址以及所述会话请求内容中的源地址和目的地址确定所述Initiator和所述Target的位置情况,具体包括:
当所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址不同时,所述Target确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址不同时,所述Target确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址相同,且所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址相同时,所述Target确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
所述Initiator获知位置情况为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备,包括:
在向所述Target发送发现会话请求报文之后,所述Initiator接收来自所述Target的发现会话的响应报文,且在所述Target确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,所述响应报文中携带由所述Target使能反向TCP连接的信息;
所述Initiator通过所述由所述Target使能反向TCP连接的信息获知位置情况为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备。
所述Initiator将所述Initiator和所述Target的位置情况的信息通知给所述Target,由所述Target利用该信息确定所述Initiator和所述Target的位置情况,具体包括:
所述Initiator向所述Target发送发现会话请求报文,并接收来自所述Target的发现会话的响应报文,所述响应报文中封装有会话响应内容,且所述会话响应内容中携带有所述Target在发送所述响应报文时的源地址和目的地址;
所述Initiator利用所述响应报文的报文头中的源地址和目的地址以及所述会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况;
当确定结果为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,所述Initiator向所述Target发送位置情况的通知消息,由所述Target利用所述通知消息确定所述Initiator和所述Target的位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备。
所述Initiator利用所述响应报文的报文头中的源地址和目的地址以及所述会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况,具体包括:
当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址不同时,所述Initiator确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址不同时,所述Initiator确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址相同,且所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址相同时,所述Initiator确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
所述Initiator等待所述Target发送的TCP连接请求报文,具体包括:
所述Initiator等待所述Target通过出口IP地址向所述Initiator发送的TCP连接请求报文,且所述出口IP地址为所述Target利用IP地址与Target的绑定关系选择的出口IP地址。
一种连接接收设备Target,应用于包括连接发起设备Initiator、所述Target和网络地址转换NAT设备的基于互联网的小型计算机系统接口iSCSI网络中,所述Target包括:
确定模块,用于确定所述Initiator和所述Target的位置情况;
通信模块,用于当确定结果为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,向所述Initiator发送传输控制协议TCP连接请求报文,以建立所述Target与所述Initiator之间的TCP连接。
所述通信模块,还用于接收来自所述Initiator的发现会话请求报文,所述发现会话请求报文中封装有会话请求内容,且所述会话请求内容中携带有所述Initiator在发送所述发现会话请求报文时的源地址和目的地址;
所述确定模块,具体用于当所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址不同时,确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址不同时,确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址相同,且所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址相同时,确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
所述通信模块,还用于当所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,向所述Initiator发送发现会话的响应报文,所述响应报文中携带由所述Target使能反向TCP连接的信息;
由所述Initiator利用所述Target使能反向TCP连接的信息确定TCP连接过程由所述Target发起,并等待所述Target发送的TCP连接请求报文,以建立所述Target与所述Initiator之间的TCP连接。
所述通信模块,还用于接收来自所述Initiator的发现会话请求报文,并向所述Initiator发送发现会话的响应报文,所述响应报文中封装有会话响应内容,且所述会话响应内容中携带有所述Target在发送所述响应报文时的源地址和目的地址;
由所述Initiator利用所述响应报文的报文头中的源地址和目的地址以及所述会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况;当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址不同时,确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;当所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址不同时,确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址相同,且所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址相同时,确定位置情况为:所述Target与所述Initiator之间没有NAT设备;
当确定结果为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,接收来自所述Initiator的位置情况的通知消息;
所述确定模块,具体用于利用所述通知消息确定所述Initiator和所述Target的位置情况。
所述通信模块,具体用于利用IP地址与Target的绑定关系选择出口IP地址,并通过所述出口IP地址向所述Initiator发送TCP连接请求报文。
一种连接发起设备Initiator,应用于包括所述Initiator、连接接收设备Target和网络地址转换NAT设备的基于互联网的小型计算机系统接口iSCSI网络中,所述Initiator包括:
通信模块,用于将所述Initiator和所述Target的位置情况的信息通知给所述Target,由所述Target利用所述信息确定所述Initiator和所述Target的位置情况;
处理模块,用于当获知位置情况为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,确定传输控制协议TCP连接过程由所述Target发起,并等待所述Target发送的TCP连接请求报文,以建立所述Target与所述Initiator之间的TCP连接。
所述通信模块,具体用于向所述Target发送发现会话请求报文,所述发现会话请求报文中封装有会话请求内容,且所述会话请求内容中携带有所述Initiator在发送所述发现会话请求报文时的源地址和目的地址;
由所述Target利用所述发现会话请求报文的报文头中的源地址和目的地址以及所述会话请求内容中的源地址和目的地址确定所述Initiator和所述Target的位置情况;当所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址不同时,确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址不同时,确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址相同,且所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址相同时,确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
所述通信模块,还用于在向所述Target发送发现会话请求报文之后,接收来自所述Target的发现会话的响应报文,且在所述Target确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,所述响应报文中携带由所述Target使能反向TCP连接的信息;
所述处理模块,具体用于通过所述由所述Target使能反向TCP连接的信息获知位置情况为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备。
所述通信模块,具体用于向所述Target发送发现会话请求报文,并接收来自所述Target的发现会话的响应报文,所述响应报文中封装有会话响应内容,且所述会话响应内容中携带有所述Target在发送所述响应报文时的源地址和目的地址;
当所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,向所述Target发送位置情况的通知消息,由所述Target利用所述通知消息确定所述Initiator和所述Target的位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
所述处理模块,还用于利用所述响应报文的报文头中的源地址和目的地址以及所述会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况。
所述处理模块,具体用于当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址不同时,确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址不同时,确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址相同,且所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址相同时,确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
所述TCP连接请求报文为所述Target通过出口IP地址向所述Initiator发送的TCP连接请求报文,且所述出口IP地址为所述Target利用IP地址与Target的绑定关系选择的出口IP地址。
与现有技术相比,本发明至少具有以下优点:在确定Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备时,由Target主动发起TCP连接过程,从而可以保证TCP连接的正常建立,并使得Initiator与Target间可以正常进行报文传输。
具体实施方式
本发明提出一种TCP连接建立的方法,该方法应用于包括Initiator和Target的iSCSI网络中,此外,根据实际网络部署情况,还可以在网络中部署NAT设备,网络中Initiator和Target的位置情况分为以下情况:
(1)Target位于私网,Initiator位于私网,且Target与Initiator之间不存在NAT设备;或,Target位于公网,Initiator位于公网,且Target与Initiator之间不存在NAT设备。上述情况下,由于Target与Initiator之间不存在NAT设备,因此NAT设备不会对Target与Initiator造成隔离,不存在通信障碍,也不存在NAT穿越的问题。
(2)Initiator位于私网,Target位于公网,且Target与Initiator之间存在NAT设备。上述情况下,虽然NAT设备对Target与Initiator造成隔离,但由于Initiator为协议交互过程的主动发起者,Initiator可以通过NAT映射访问到Target,Target与Initiator之间不存在通信障碍,也不存在NAT穿越的问题。
(3)Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备。上述情况下,NAT设备对Target与Initiator造成隔离,且由于Initiator为协议交互过程的主动发起者,因此Target与Initiator之间存在通信障碍,即存在NAT穿越的问题,其原因在于:
A、由于Initiator位于公网,Target位于私网,则Initiator不能直接到达私网内的Target,其只能到达NAT设备。
B、即使Initiator发送的报文可以通过NAT设备映射到Target,但由于协议交互过程包括Discover会话过程(用于发现Target)和Normal会话过程(用于连接Target),在Discover会话过程中,Target将自身的IP地址(私网地址)发送给Initiator;在Normal会话过程中,Initiator会使用该IP地址连接到Target。但是Normal会话过程之前,Target不会使用该IP地址向Initiator发送报文,NAT设备也就不会记录该IP地址所对应的地址映射表项,因此在Initiator使用该IP地址连接Target时,通信过程会失败,无法建立TCP连接。
综上所述,针对上述情况(3),会存在Initiator与Target间无法建立TCP连接,继而无法进行报文传输的问题,针对上述存在的问题,当Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备时,本发明中,需要由Target主动发起TCP连接过程,以保证TCP连接的正常建立。
以图3为本发明应用场景示意图,Target(即Host)位于私网,Initiator(即存储系统)位于公网,且Target与Initiator之间存在NAT设备。实际应用中,可以由Target确定位置情况为:Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备;也可以由Initiator确定位置情况为:Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备。
当Target确定位置情况为:Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备时,如图4所示,该TCP连接建立的方法包括:
步骤401,Initiator向Target发送发现会话请求报文,该发现会话请求报文中封装有会话请求内容,且会话请求内容中携带有Initiator在发送发现会话请求报文时的源地址和目的地址(即报文头的源地址和目的地址)。
在Discover会话过程中,Initiator需要向Target发送发现会话请求报文;本发明中,为了实现Initiator与Target的通信,可以将NAT设备的公网IP地址配置给所有Initiator,各Initiator在需要发起Discover会话过程时,均会向配置的公网IP地址发送发现会话请求报文。
以图3的应用场景为例,可将NAT设备的公网IP地址20.1.1.1配置给各Initiator,而Initiator在发送发现会话请求报文时,发现会话请求报文的报文头中,源地址为自身的IP地址1.1.1.1,目的地址为公网IP地址20.1.1.1。此外,发现会话请求报文中还封装有会话请求内容(即具体的数据),该会话请求内容中同样携带源地址为1.1.1.1,目的地址为20.1.1.1的信息;实际应用中可将源地址和目的地址的信息封装在发现会话请求报文的Datasegment字段。
步骤402,NAT设备接收Initiator发送给Target的发现会话请求报文,对报文头的目的地址进行转换,并将转换后的发现会话请求报文发送给Target。
需要说明的是,内部服务器功能是NAT设备上使外网设备主动访问内网服务器的功能,用于完成地址映射。在具体实现时,首先配置IP地址A、PORTA、协议iSCSI、IP地址B、PORTB的五元组,当通过IP地址A和PORTA接收到报文,且报文的协议为iSCSI时,则NAT设备需要建立地址映射,将报文从IP地址B和PORTB转发出去。为了方便描述,后续对端口不再赘述。
本发明中,需要在NAT设备上使能内部服务器功能,并将IP地址A配置给Initiator;以图3的应用场景为例,则NAT设备上可以配置20.1.1.1为地址A,且Initiator的发现会话请求报文的目的地址为20.1.1.1;当NAT设备接收到发现会话请求报文后,查询五元组对应关系,将发现会话请求报文发送至IP地址B(IP地址B设置为Target对应的某个接口地址,图3中IP地址B为192.168.1.1),从而使得NAT设备可以通过IP地址B(192.168.1.1)将发现会话请求报文发送给Target。
需要说明的是,由于发现会话请求报文的目的地址为NAT设备的公网IP地址(20.1.1.1),因此NAT设备还需要将发现会话请求报文的目的地址转换为Target的私网IP地址(192.168.1.4),并将转换后的发现会话请求报文发送给Target;通过上述处理,可以将发现会话请求报文传输到Target上。
步骤403,Target接收来自Initiator的发现会话请求报文,该发现会话请求报文中封装有会话请求内容,且会话请求内容中携带有Initiator在发送发现会话请求报文时的源地址和目的地址。
步骤404,Target根据发现会话请求报文的报文头中的目的地址和源地址以及会话请求内容中的目的地址和源地址确定Initiator和Target的位置情况。
情况一、当发现会话请求报文的报文头中的目的地址与会话请求内容中的目的地址不同时,则Target确定位置情况为:Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备。以图3的应用场景为例,在接收到发现会话请求报文后,报文头中的目的地址为192.168.1.4,源地址为1.1.1.1;而会话请求内容中的目的地址为20.1.1.1,源地址为1.1.1.1;通过对比发现二者的目的地址不同,因此可以确定位置情况为:Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备。
情况二、当发现会话请求报文的报文头中的源地址与会话请求内容中的源地址不同时,则Target确定位置情况为:Target位于公网,Initiator位于私网,且Target与Initiator之间存在NAT设备。
情况三、当发现会话请求报文的报文头中的源地址与会话请求内容中的源地址相同,且发现会话请求报文的报文头中的目的地址与会话请求内容中的目的地址相同时,则Target确定位置情况为:Target与Initiator之间没有NAT设备,可以为Target与Initiator均位于私网或者均位于公网。
步骤405,Target向Initiator发送发现会话的响应报文。
针对上述情况一、当Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备时,对于Target向Initiator发送的发现会话的响应报文,该响应报文中需要携带由Target使能反向TCP连接的信息(该信息表示需要由Target主动发起TCP连接过程);之后,由Initiator利用Target使能反向TCP连接的信息确定TCP连接过程由Target发起,并等待Target发送的TCP连接请求报文。
一种优选的实施方式中,在发送发现会话的响应报文时,在该响应报文中增加字段REVERSE-CONN,当REVERSE-CONN置为1时表示由Target使能反向TCP连接,否则,不通过Target使能反向TCP连接。此外,还可以在响应报文中增加字段IN-NAT,当IN-NAT置为1时表示Target位于私网,否则,表示Target不位于私网。
针对上述情况二和情况三,不需要由Target主动发起TCP连接过程,仍是由Initiator主动发起TCP连接过程,因此不会造成Initiator访问Target时出现困难;对于Target向Initiator发送的发现会话的响应报文,按照现有方式进行处理即可,本发明中不再赘述。
步骤406,Initiator接收来自Target的发现会话的响应报文;对于NAT设备的转发过程,在此不再赘述。
本发明中,当发现会话的响应报文中携带由Target使能反向TCP连接的信息时,则Initiator可以利用Target使能反向TCP连接的信息确定TCP连接过程由Target发起,并等待Target发送的TCP连接请求报文。具体的,在Normal会话过程中,Initiator将不再主动发起TCP连接过程,而是等待Target主动发起TCP连接过程,从而建立Initiator与Target之间的TCP连接。
此外,当发现会话的响应报文中没有携带由Target使能反向TCP连接的信息时,该响应报文中会携带Target返回的IP地址,且Initiator可通过响应报文得知Target并不在私网,或者Target与Initiator均在私网中,该情况下不需要等待Target主动发起TCP连接过程,而是由Initiator主动发起TCP连接过程,并进行后续的Login请求等过程。
本发明中,当确定结果为Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备时,在Normal会话过程中,将由Target主动发起TCP连接过程,该过程进一步包括以下步骤:
步骤407,Target向Initiator发送TCP连接请求报文,以建立Target与Initiator之间的TCP连接。
本发明中,Target向Initiator发送TCP连接请求报文具体包括:Target利用IP地址与Target的绑定关系选择出口IP地址(即反向连接的出口IP地址),并通过出口IP地址向Initiator发送TCP连接请求报文。
具体的,由于存储系统(如IPSAN等设备)有很多网卡和很多出接口IP地址,分配给每个Target的IP地址为多个出接口IP地址中的一个;因此,Target需要利用IP地址与Target的绑定关系选择出口IP地址。例如,Initiator需要连接的Target为Target1,通过查询Target-IP绑定关系列表,发现Target1绑定的IP地址为10.10.10.1;因此选择的出口IP地址为10.10.10.1。
Target主动发起TCP连接的过程为:Target使用10.10.10.1向Initiator的公网地址1.1.1.1发送TCP连接请求报文(源地址为10.10.10.1,目的地址为1.1.1.1)。此外,还可增加1个iSCSI协议的内容(如增加iSCSI login message报文),在TCP连接建立完成后,Target发送该报文,且该报文的内容用于通知Target在私网中,且报文中也可包含2个字段IN-NAT和REVERSE-CONN,2个字段都置为1则表示Target在私网,并且使能反向TCP连接。
本发明中,Initiator在接收到TCP连接请求报文后,则Initiator可建立TCP连接并发起iSCSI login请求,以及执行后续相关处理。Initiator与Target建立TCP连接的过程不再详加赘述;当Initiator接收到iSCSI login message报文后,即可得知在私网(即NAT内部)的Target的反向TCP连接已经建立完成。
需要注意的是,假设Target发起的反向TCP连接的源/目的IP地址和端口为10.10.10.1:3260/1.1.1.1:15151,在经过NAT设备转换后,变为20.1.1.1:25000/1.1.1.1:15151,源地址和端口发生变化;之后,Initiator会采用变化后的源地址20.1.1.1:25000作为Target的目的地址进行Login请求,且由于NAT设备地址映射关系已建立,则该Login请求会到达Target的10.10.10.1的IP地址和接口上,Target正常响应即可,相应处理本发明中不再赘述。
当Initiator确定位置情况为:Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备时,如图5所示,该TCP连接建立的方法包括:
步骤501,Initiator向Target发送发现会话请求报文。该发现会话请求报文中封装有会话请求内容,且该场景下,会话请求内容中可以不携带Initiator在发送发现会话请求报文时的源地址和目的地址。
在Discover会话过程中,Initiator需要向Target发送发现会话请求报文;本发明中,为了实现Initiator与Target的通信,可以将NAT设备的公网IP地址配置给所有Initiator,各Initiator在需要发起Discover会话过程时,均会向配置的公网IP地址发送发现会话请求报文。
以图3的应用场景为例,可将NAT设备的公网IP地址20.1.1.1配置给各Initiator,而Initiator在发送发现会话请求报文时,发现会话请求报文的报文头中,源地址为自身的IP地址1.1.1.1,目的地址为公网IP地址20.1.1.1。
步骤502,NAT设备接收Initiator发送给Target的发现会话请求报文,对报文头的目的地址进行转换,并将转换后的发现会话请求报文发送给Target。
由于发现会话请求报文的目的地址为NAT设备的公网IP地址(20.1.1.1),因此NAT设备需要将发现会话请求报文的目的地址转换为Target的私网IP地址(192.168.1.4),并将转换后的发现会话请求报文发送给Target;本步骤与上述步骤402的处理相同,在此不再重复赘述。
步骤503,Target接收来自Initiator的发现会话请求报文,该发现会话请求报文中封装有会话请求内容。
步骤504,Target向Initiator发送发现会话的响应报文,该响应报文中封装有会话响应内容,且会话响应内容中携带有Target在发送响应报文时的源地址和目的地址;由Initiator利用响应报文的报文头中的源地址和目的地址以及会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况。
在Discover会话过程中,当接收到来自Initiator的发现会话请求报文后,Target需要向Initiator发送发现会话的响应报文,在响应报文的报文头中,源地址为自身的IP地址,目的地址为Initiator的IP地址;此外,该响应报文中还会封装有会话响应内容(即具体的数据),且该会话响应内容中同样需要携带源地址和目的地址的信息。
步骤505,Initiator接收来自Target的发现会话的响应报文,该响应报文中封装有会话响应内容,且会话响应内容中携带有Target在发送响应报文时的源地址和目的地址;对于NAT设备的转发过程,在此不再赘述。
步骤506,Initiator利用响应报文的报文头中的源地址和目的地址以及会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况。
情况一、当响应报文的报文头中的源地址与会话响应内容中的源地址不同时,则Initiator确定位置情况为:Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备。
情况二、当响应报文的报文头中的目的地址与会话响应内容中的目的地址不同时,Initiator确定位置情况为:则Target位于公网,Initiator位于私网,且Target与Initiator之间存在NAT设备。
情况三、当响应报文的报文头中的源地址与会话响应内容中的源地址相同,且响应报文的报文头中的目的地址与会话响应内容中的目的地址相同时,则Initiator确定位置情况为:Target与Initiator之间没有NAT设备,可以为Target与Initiator均位于私网或者均位于公网。
针对上述情况二和情况三,不需要由Target主动发起TCP连接过程,仍是由Initiator主动发起TCP连接过程,因此不会造成Initiator访问Target时出现困难,按照现有方式进行处理即可,本发明中不再赘述。
针对上述情况一、当Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备时,该方法还包括以下步骤:
步骤507,Initiator向Target发送位置情况的通知消息(用于通知Initiator和Target的位置情况的信息),即通知Target当前位置情况为Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备,且通知Target使能反向TCP连接。
当Initiator获知位置情况为Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备时,则Initiator确定TCP连接过程需要由Target发起,向Target发送位置情况的通知消息,并等待Target发送的TCP连接请求报文,以建立Target与Initiator之间的TCP连接。具体的,在Normal会话过程中,Initiator将不再主动发起TCP连接过程,而是等待Target主动发起TCP连接过程,从而建立Initiator与Target之间的TCP连接。
步骤508,Target接收来自Initiator的位置情况的通知消息,并利用通知消息确定Initiator和Target的位置情况,即确定Target位于私网,Initiator位于公网,且Target与Initiator之间存在NAT设备。
步骤509,Target向Initiator发送TCP连接请求报文,以建立Target与Initiator之间的TCP连接。
需要说明的是,Initiator在Target返回响应报文的基础上,需要向Target发送Login message消息(该消息的内容包含reverse-conn字段,1为使能);在Target接收到该Login message消息后,Target采用Target所绑定的IP地址向Initiator发起反向TCP连接,并由Initiator经过反向TCP连接向Target发起Normal login会话等后续过程。
本发明中,Target向Initiator发送TCP连接请求报文具体包括:Target利用IP地址与Target的绑定关系选择出口IP地址(即反向连接的出口IP地址),并通过出口IP地址向Initiator发送TCP连接请求报文。
具体的,由于存储系统(如IPSAN等设备)有很多网卡和很多出接口IP地址,分配给每个Target的IP地址为多个出接口IP地址中的一个;因此,Target需要利用IP地址与Target的绑定关系选择出口IP地址。例如,Initiator需要连接的Target为Target1,通过查询Target-IP绑定关系列表,发现Target1绑定的IP地址为10.10.10.1;因此选择的出口IP地址为10.10.10.1。
Target主动发起TCP连接的过程为:Target使用10.10.10.1向Initiator的公网地址1.1.1.1发送TCP连接请求报文(源地址为10.10.10.1,目的地址为1.1.1.1)。本发明中,Initiator在接收到TCP连接请求报文后,则Initiator可建立TCP连接并发起iSCSI login请求,以及执行后续相关处理。Initiator与Target建立TCP连接的过程不再详加赘述。
需要注意的是,假设Target发起的反向TCP连接的源/目的IP地址和端口为10.10.10.1:3260/1.1.1.1:15151,在经过NAT设备转换后,变为20.1.1.1:25000/1.1.1.1:15151,源地址和端口发生变化;之后,Initiator会采用变化后的源地址20.1.1.1:25000作为Target的目的地址进行Login请求,且由于NAT设备地址映射关系已建立,则该Login请求会到达Target的10.10.10.1的IP地址和接口上,Target正常响应即可,相应处理本发明中不再赘述。
基于与上述方法同样的发明构思,本发明还提出了一种连接接收设备Target,应用于包括连接发起设备Initiator、所述Target和网络地址转换NAT设备的基于互联网的小型计算机系统接口iSCSI网络中,如图6所示,所述Target包括:
确定模块11,用于确定所述Initiator和所述Target的位置情况;
通信模块12,用于当确定结果为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,向所述Initiator发送传输控制协议TCP连接请求报文,以建立所述Target与所述Initiator之间的TCP连接。
所述通信模块12,还用于接收来自所述Initiator的发现会话请求报文,所述发现会话请求报文中封装有会话请求内容,且所述会话请求内容中携带有所述Initiator在发送所述发现会话请求报文时的源地址和目的地址;
所述确定模块11,具体用于当所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址不同时,确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址不同时,确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址相同,且所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址相同时,确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
所述通信模块12,还用于当所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,向所述Initiator发送发现会话的响应报文,所述响应报文中携带由所述Target使能反向TCP连接的信息;由所述Initiator利用所述Target使能反向TCP连接的信息确定TCP连接过程由所述Target发起,并等待所述Target发送的TCP连接请求报文,以建立所述Target与所述Initiator之间的TCP连接。
所述通信模块12,还用于接收来自所述Initiator的发现会话请求报文,并向所述Initiator发送发现会话的响应报文,所述响应报文中封装有会话响应内容,且所述会话响应内容中携带有所述Target在发送所述响应报文时的源地址和目的地址;
由所述Initiator利用所述响应报文的报文头中的源地址和目的地址以及所述会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况;当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址不同时,确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;当所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址不同时,确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址相同,且所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址相同时,确定位置情况为:所述Target与所述Initiator之间没有NAT设备;
当确定结果为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,接收来自所述Initiator的位置情况的通知消息;
所述确定模块11,具体用于利用所述通知消息确定所述Initiator和所述Target的位置情况。
所述通信模块12,具体用于利用IP地址与Target的绑定关系选择出口IP地址,并通过所述出口IP地址向所述Initiator发送TCP连接请求报文。
其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
基于与上述方法同样的发明构思,本发明还提出了一种连接发起设备Initiator,应用于包括所述Initiator、连接接收设备Target和网络地址转换NAT设备的基于互联网的小型计算机系统接口iSCSI网络中,如图7所示,所述Initiator包括:
通信模块21,用于将所述Initiator和所述Target的位置情况的信息通知给所述Target,由所述Target利用所述信息确定所述Initiator和所述Target的位置情况;
处理模块22,用于当获知位置情况为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,确定传输控制协议TCP连接过程由所述Target发起,并等待所述Target发送的TCP连接请求报文,以建立所述Target与所述Initiator之间的TCP连接。
所述通信模块21,具体用于向所述Target发送发现会话请求报文,所述发现会话请求报文中封装有会话请求内容,且所述会话请求内容中携带有所述Initiator在发送所述发现会话请求报文时的源地址和目的地址;
由所述Target利用所述发现会话请求报文的报文头中的源地址和目的地址以及所述会话请求内容中的源地址和目的地址确定所述Initiator和所述Target的位置情况;当所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址不同时,确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址不同时,确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;当所述发现会话请求报文的报文头中的源地址与所述会话请求内容中的源地址相同,且所述发现会话请求报文的报文头中的目的地址与所述会话请求内容中的目的地址相同时,确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
所述通信模块21,还用于在向所述Target发送发现会话请求报文之后,接收来自所述Target的发现会话的响应报文,且在所述Target确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,所述响应报文中携带由所述Target使能反向TCP连接的信息;
所述处理模块22,具体用于通过所述由所述Target使能反向TCP连接的信息获知位置情况为所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备。
所述通信模块21,具体用于向所述Target发送发现会话请求报文,并接收来自所述Target的发现会话的响应报文,所述响应报文中封装有会话响应内容,且所述会话响应内容中携带有所述Target在发送所述响应报文时的源地址和目的地址;
当所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备时,向所述Target发送位置情况的通知消息,由所述Target利用所述通知消息确定所述Initiator和所述Target的位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
所述处理模块22,还用于利用所述响应报文的报文头中的源地址和目的地址以及所述会话响应内容中的源地址和目的地址确定Initiator和Target的位置情况。
所述处理模块22,具体用于当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址不同时,确定位置情况为:所述Target位于私网,所述Initiator位于公网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址不同时,确定位置情况为:所述Target位于公网,所述Initiator位于私网,且所述Target与所述Initiator之间存在所述NAT设备;
当所述响应报文的报文头中的源地址与所述会话响应内容中的源地址相同,且所述响应报文的报文头中的目的地址与所述会话响应内容中的目的地址相同时,确定位置情况为:所述Target与所述Initiator之间没有NAT设备。
所述TCP连接请求报文为所述Target通过出口IP地址向所述Initiator发送的TCP连接请求报文,且所述出口IP地址为所述Target利用IP地址与Target的绑定关系选择的出口IP地址。
其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。