发明内容
本发明提供一种基于DVPN的数据传输方法和设备,以通过较小的路径开销传输数据,并降低数据的转发延迟。
为了达到上述目的,本发明实施例提供一种基于动态虚拟专用网络DVPN的数据传输方法,应用于包括多个Spoke的网络中,各Spoke上维护有邻居开销Cost表,所述邻居Cost表中记录了本设备与邻居Spoke之间的Cost值,该方法包括以下步骤:
Spoke向邻居Spoke发送开销请求CostRequest报文,所述CostRequest报文中携带了目的Spoke的信息;由所述邻居Spoke在收到所述CostRequest报文之后,利用所述目的Spoke的信息查询本地维护的邻居Cost表,获得本设备与所述目的Spoke之间的Cost值;
所述Spoke接收邻居Spoke返回的开销响应CostResponse报文,所述CostResponse报文中携带了所述邻居Spoke与所述目的Spoke之间的Cost值;
所述Spoke比较本设备与所述目的Spoke之间的Cost值和本设备至所述邻居Spoke至所述目的Spoke之间的Cost值,并在需要向所述目的Spoke发送数据时,通过Cost值最小的路径向所述目的Spoke发送数据。
所述网络中还包括有服务器,各Spoke维护邻居Cost表的过程,进一步包括:各Spoke在向所述服务器发起注册的过程中,接收来自所述服务器的注册应答报文,所述注册应答报文中携带了生存时间TTL值N;
各Spoke均向本设备的邻居Spoke发送保活Keepalive报文,所述Keepalive报文中携带了所述TTL值N;
各Spoke在收到来自邻居Spoke的Keepalive报文后,获得Keepalive报文中携带的TTL值M,并确定本设备与邻居Spoke之间的Cost值为(N-M);
各Spoke在本地维护的邻居Cost表中记录所述邻居Spoke的信息与所述Cost值(N-M)之间的对应关系。
所述目的Spoke的信息包括目的Spoke的公网地址;所述Spoke向邻居Spoke发送开销请求CostRequest报文的过程,进一步包括:
所述Spoke在需要向目的Spoke发送数据时,向邻居Spoke发送携带所述目的Spoke的公网地址的CostRequest报文。
所述Spoke通过Cost值最小的路径向所述目的Spoke发送数据,具体包括:所述Spoke在Cost值最小的路径为所述Spoke至邻居Spoke至目的Spoke时,通过所述Spoke与目的Spoke之间的direct隧道地址对所述数据进行第一层封装,并通过所述Spoke与邻居Spoke之间的direct隧道地址对第一层封装后的数据进行第二层封装,并将第二层封装后的数据发送给所述邻居Spoke;
由所述邻居Spoke在收到第二层封装后的数据时,解第二层封装得到第一层封装后的数据,并将第一层封装后的数据发送给所述目的Spoke。
所述Spoke通过Cost值最小的路径向所述目的Spoke发送数据,具体包括:所述Spoke在Cost值最小的路径为所述Spoke至邻居Spoke至目的Spoke时,通过所述Spoke与邻居Spoke之间的direct隧道地址对所述数据进行封装,并在封装后的数据的指定字段中携带所述目的Spoke的公网地址,并将封装后的数据发送给所述邻居Spoke;
由所述邻居Spoke在收到封装后的数据时,如果发现指定字段中携带的公网地址不是本设备的公网地址,则将封装后的数据的目的地址修改为所述指定字段中携带的公网地址,并将修改后的数据发送给所述目的Spoke。
本发明实施例提供一种基于动态虚拟专用网络DVPN的数据传输设备,作为Spoke应用于包括多个Spoke的网络中,所述设备包括:
维护模块,用于维护邻居开销Cost表,所述邻居Cost表中记录了本设备与邻居Spoke之间的Cost值;
报文发送模块,用于向邻居Spoke发送开销请求CostRequest报文,所述CostRequest报文中携带了目的Spoke的信息;由所述邻居Spoke在收到所述CostRequest报文之后,利用所述目的Spoke的信息查询本地维护的邻居Cost表,获得本设备与所述目的Spoke之间的Cost值;
接收模块,用于接收邻居Spoke返回的开销响应CostResponse报文,所述CostResponse报文中携带了所述邻居Spoke与目的Spoke之间的Cost值;
比较模块,用于比较本设备与所述目的Spoke之间的Cost值和本设备至所述邻居Spoke至所述目的Spoke之间的Cost值;
数据发送模块,用于在需要向所述目的Spoke发送数据时,通过Cost值最小的路径向所述目的Spoke发送数据。
所述网络中还包括有服务器;所述维护模块,进一步用于在向所述服务器发起注册的过程中,接收来自所述服务器的注册应答报文,且所述注册应答报文中携带了生存时间TTL值N;向本设备的邻居Spoke发送保活Keepalive报文,所述Keepalive报文中携带了所述TTL值N;在收到来自邻居Spoke的Keepalive报文后,获得Keepalive报文中携带的TTL值M,并确定本设备与邻居Spoke之间的Cost值为(N-M);在本地维护的邻居Cost表中记录所述邻居Spoke的信息与所述Cost值(N-M)之间的对应关系。
所述目的Spoke的信息包括所述目的Spoke的公网地址;所述报文发送模块,具体用于在需要向目的Spoke发送数据时,向邻居Spoke发送携带所述目的Spoke的公网地址的CostRequest报文。
所述数据发送模块,进一步用于在Cost值最小的路径为本设备至邻居Spoke至目的Spoke时,通过本设备与目的Spoke之间的direct隧道地址对所述数据进行第一层封装,并通过本设备与邻居Spoke之间的direct隧道地址对第一层封装后的数据进行第二层封装,并将第二层封装后的数据发送给所述邻居Spoke;由所述邻居Spoke在收到第二层封装后的数据时,解第二层封装得到第一层封装后的数据,并将第一层封装后的数据发送给所述目的Spoke。
所述数据发送模块,进一步用于在Cost值最小的路径为本设备至邻居Spoke至目的Spoke时,通过本设备与邻居Spoke之间的direct隧道地址对所述数据进行封装,并在封装后的数据的指定字段中携带所述目的Spoke的公网地址,并将封装后的数据发送给所述邻居Spoke;由所述邻居Spoke在收到封装后的数据时,如果发现指定字段中携带的公网地址不是本设备的公网地址,则将封装后的数据的目的地址修改为所述指定字段中携带的公网地址,并将修改后的数据发送给所述目的Spoke。
与现有技术相比,本发明实施例至少具有以下优点:本发明实施例中,能够确定DVPN中各Spoke之间转发数据的最短路径,并可以通过最短路径传输数据,从而以较小的路径开销传输数据,并降低数据的转发延迟。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
针对现有技术中存在的问题,本发明实施例提出了一种基于DVPN的数据传输方法,该方法可以应用在DVPN的Full-Mesh网络中;且在Full-Mesh网络中,可以至少包括服务器(Server)和多个Spoke(包含Hub和Spoke)。
本发明实施例中,各Spoke上维护有邻居Cost表,且该邻居Cost表中记录了本设备与邻居Spoke之间的Cost值(即转发跳数或者策略优先级等)。假设Full-Mesh网络中包括Spoke1、Spoke2和Spoke3,则:Spoke1上记录Spoke1与Spoke2之间的Cost值、Spoke1与Spoke3之间的Cost值;Spoke2上记录Spoke2与Spoke1之间的Cost值、Spoke2与Spoke3之间的Cost值;Spoke3上记录Spoke3与Spoke1之间的Cost值、Spoke3与Spoke2之间的Cost值。
具体的,各Spoke上为了维护邻居Cost表,则一种优选的实施方式为:
各Spoke在向服务器发起注册的过程中,接收来自服务器的注册应答报文(Registerreplay报文),该注册应答报文中携带了TTL(TimeToLive,生存时间)值N;该TTL值N为Full-Mesh网络的TTL值,且服务器向该Full-Mesh网络中的每个Spoke所发送的注册应答报文中,均携带了相同的TTL值N。
各Spoke从服务器上获得TTL值N之后,如果各Spoke建立起Full-Mesh的隧道连接(即所有Spoke之间建立direct隧道),则各Spoke均向本设备的邻居Spoke发送Keepalive(保活)报文(Keepalive报文可以定时发送),且该Keepalive报文的IP头中携带了TTL值N;例如,Spoke1向Spoke2发送携带TTL值N的Keepalive报文,并向Spoke3发送携带TTL值N的Keepalive报文;Spoke2向Spoke1发送携带TTL值N的Keepalive报文,并向Spoke3发送携带TTL值N的Keepalive报文;Spoke3向Spoke1发送携带TTL值N的Keepalive报文,并向Spoke2发送携带TTL值N的Keepalive报文。
各Spoke在收到来自邻居Spoke的Keepalive报文之后,获得Keepalive报文中携带的TTL值M,并确定本设备与邻居Spoke之间的Cost值为(N-M);以Spoke1和Spoke2之间的处理为例,Spoke1通过本设备与Spoke2之间的direct隧道向Spoke2发送携带TTL值N的Keepalive报文,且Spoke2通过本设备与Spoke1之间的direct隧道向Spoke1发送携带TTL值N的Keepalive报文;Spoke1在收到来自Spoke2的Keepalive报文后,从Keepalive报文的IP头中获得TTL值M,并确定Spoke1与Spoke2之间的Cost值为(N-M);Spoke2在收到来自Spoke1的Keepalive报文后,从Keepalive报文的IP头中获得TTL值M,并确定Spoke2与Spoke1之间的Cost值为(N-M)。
各Spoke在本地所维护的邻居Cost表中记录邻居Spoke的信息(如邻居Spoke的公网地址)与Cost值(N-M)之间的对应关系。例如,在Spoke1的邻居Cost表上,将记录Spoke2的公网地址与Cost值(N-M)之间的对应关系,并记录Spoke3的公网地址与Cost值(N-M)之间的对应关系;在Spoke2的邻居Cost表上,将记录Spoke1的公网地址与Cost值(N-M)之间的对应关系,并记录Spoke3的公网地址与Cost值(N-M)之间的对应关系;在Spoke3的邻居Cost表上,将记录Spoke1的公网地址与Cost值(N-M)之间的对应关系,并记录Spoke2的公网地址与Cost值(N-M)之间的对应关系。
本发明实施例中,由于是针对Full-Mesh网络的处理,因此Full-Mesh网络的各Spoke按照上述方式进行处理后,均可以在本地维护的邻居Cost表中记录邻居Spoke的信息与Cost值(N-M)之间的对应关系。
基于本地维护的邻居Cost表,如图6所示,本发明实施例所提出的基于DVPN的数据传输方法可以包括以下步骤:
步骤601,Spoke向邻居Spoke(即目的Spoke之外的其它邻居Spoke)发送CostRequest(开销请求)报文,该CostRequest报文中携带了目的Spoke的信息;该目的Spoke的信息包括但不限于该目的Spoke的公网地址。
本发明实施例中,Spoke向邻居Spoke发送CostRequest报文的过程,进一步包括:Spoke在需要向目的Spoke发送数据时,向邻居Spoke发送携带目的Spoke的公网地址的CostRequest报文;例如,Spoke1在需要向Spoke2发送数据时,向邻居Spoke发送携带Spoke2的公网地址的CostRequest报文;或者,Spoke定时触发向邻居Spoke发送携带目的Spoke的公网地址的CostRequest报文;例如,Spoke1定时触发向邻居Spoke发送携带Spoke2的公网地址的CostRequest报文和携带Spoke3的公网地址的CostRequest报文。
以图7为本发明实施例的应用场景示意图,则对于Spoke1来说,当有数据需要通过Spoke1转发给Spoke2时,该Spoke1需要向所有邻居Spoke(即Spoke3、SpokeN和Hub)发送CostRequest报文;其中,该CostRequest报文中携带了Spoke2的公网地址,且该CostRequest报文用于使各邻居Spoke查询本设备到达Spoke2的direct隧道的Cost值。
步骤602,邻居Spoke在收到CostRequest报文之后,利用目的Spoke的信息查询本地维护的邻居Cost表,获得本设备与目的Spoke之间的Cost值。
具体的,由于邻居Spoke本地维护的邻居Cost表中记录了邻居Spoke的信息与Cost值(N-M)之间的对应关系,因此邻居Spoke在收到CostRequest报文之后,可以直接利用目的Spoke的信息查询到目的Spoke对应的Cost值,该目的Spoke对应的Cost值为本设备与目的Spoke之间的Cost值。
步骤603,邻居Spoke向Spoke返回CostResponse(开销响应)报文,该CostResponse报文中携带了邻居Spoke与目的Spoke之间的Cost值。
步骤604,Spoke在收到CostResponse报文之后,比较本设备与目的Spoke之间的Cost值和本设备至邻居Spoke至目的Spoke之间的Cost值,并在需要向目的Spoke发送数据时,通过Cost值最小的路径向目的Spoke发送数据。
如图7所示,Spoke1向所有邻居Spoke(即Spoke3、SpokeN和Hub)发送CostRequest报文之后,能够收到来自所有邻居Spoke的CostResponse报文;来自Spoke3的CostResponse报文中携带了Cost值2(即Spoke3与Spoke2之间的Cost值为2);来自SpokeN的CostResponse报文中携带了Cost值5(即SpokeN与Spoke2之间的Cost值为5);来自Hub的CostResponse报文中携带了Cost值4(即Hub与Spoke2之间的Cost值为4)。
基于上述邻居Spoke向Spoke返回的CostResponse报文以及Spoke本地维护的邻居Cost表,Spoke1可以获知:Spoke1与Spoke2之间的Cost值为8,Spoke1至Spoke3至Spoke2之间的Cost值为4(2+2),Spoke1至SpokeN至Spoke2之间的Cost值为7(2+5),Spoke1至Hub至Spoke2之间的Cost值为6(2+4);通过比较本设备与目的Spoke之间的Cost值和本设备至邻居Spoke至目的Spoke之间的Cost值,Cost值最小的路径为Spoke1至Spoke3至Spoke2,因此Spoke1在需要向Spoke2发送数据时,可以通过Cost值最小的路径:Spoke1至Spoke3至Spoke2的路径向目的Spoke发送数据。
综上所述,本发明实施例能够优化隧道转发路径,并降低数据转发延迟。例如,Spoke1至Spoke3至Spoke2的Cost值为4,是最短路径;此时Spoke1可以将PC1发送给PC2的数据从direct隧道切换到Spoke1至Spoke3至Spoke2的隧道上进行转发,由于减小了转发路径的跳数,从而可以降低转发延迟。
本发明实施例中,Spoke在收到邻居Spoke向Spoke返回的CostResponse报文之前,如果Spoke需要向目的Spoke发送数据,则Spoke可以直接通过Spoke和目的Spoke之间的direct隧道转发数据;或者,Spoke还可以通过Spoke至Hub至目的Spoke之间的路径转发数据。
本发明实施例中,Spoke通过Cost值最小的路径向目的Spoke发送数据的方式,具体包括但不限于如下方式:
方式一、Spoke在Cost值最小的路径为Spoke至邻居Spoke至目的Spoke时,通过Spoke与目的Spoke之间的direct隧道地址对数据进行第一层封装,并通过Spoke与邻居Spoke之间的direct隧道地址对第一层封装后的数据进行第二层封装,并将第二层封装后的数据发送给邻居Spoke;进一步的,邻居Spoke在收到第二层封装后的数据时,可以解第二层封装,以得到第一层封装后的数据,并将第一层封装后的数据发送给目的Spoke。
如图7所示,Spoke1通过Spoke1与Spoke2之间的direct隧道地址对数据(PC1发送给PC2的数据)进行第一层封装,但不发送,并通过Spoke1与Spoke3之间的direct隧道地址对第一层封装后的数据进行第二层封装,并将第二层封装后的数据发送给Spoke3;Spoke3在收到第二层封装后的数据时,解掉第二层封装,还原为通过Spoke1与Spoke2之间的direct隧道地址进行封装的第一层封装后的数据,并将第一层封装后的数据发送给Spoke2。
方式二、Spoke在Cost值最小的路径为Spoke至邻居Spoke至目的Spoke时,通过Spoke与邻居Spoke之间的direct隧道地址对数据进行封装,并在封装后的数据的指定字段中携带目的Spoke的公网地址,并将封装后的数据发送给邻居Spoke;由邻居Spoke在收到封装后的数据时,如果发现指定字段中携带的公网地址不是本设备的公网地址,则将封装后的数据的目的地址修改为指定字段中携带的公网地址,并将修改后的数据发送给目的Spoke。
如图7所示,Spoke1通过Spoke1与Spoke3之间的direct隧道地址对数据(PC1发送给PC2的数据)进行封装,在封装后的数据的指定字段(如私有协议报文头)中携带Spoke2的公网地址,并将封装后的数据发送给Spoke3;Spoke3在收到封装后的数据时,如果发现私有协议报文头中携带的公网地址不是本设备的公网地址,则保留数据的源地址,将封装后的数据的目的地址修改为私有协议报文头中携带的公网地址,并将修改后的数据发送给Spoke2。
基于与上述方法同样的发明构思,本发明实施例还提出了一种基于动态虚拟专用网络DVPN的数据传输设备,作为Spoke应用于包括多个Spoke的网络中,如图8所示,所述设备(即Spoke)包括:
维护模块11,用于维护邻居开销Cost表,所述邻居Cost表中记录了本设备与邻居Spoke之间的Cost值;
报文发送模块12,用于向邻居Spoke发送开销请求CostRequest报文,所述CostRequest报文中携带了目的Spoke的信息;由所述邻居Spoke在收到所述CostRequest报文之后,利用所述目的Spoke的信息查询本地维护的邻居Cost表,获得本设备与所述目的Spoke之间的Cost值;
接收模块13,用于接收邻居Spoke返回的开销响应CostResponse报文,所述CostResponse报文中携带了邻居Spoke与目的Spoke之间的Cost值;
比较模块14,用于比较本设备与所述目的Spoke之间的Cost值和本设备至所述邻居Spoke至所述目的Spoke之间的Cost值;
数据发送模块15,用于在需要向所述目的Spoke发送数据时,通过Cost值最小的路径向所述目的Spoke发送数据。
所述网络中还包括有服务器;所述维护模块11,进一步用于在向所述服务器发起注册的过程中,接收来自所述服务器的注册应答报文,且所述注册应答报文中携带了生存时间TTL值N;向本设备的邻居Spoke发送保活Keepalive报文,所述Keepalive报文中携带了所述TTL值N;在收到来自邻居Spoke的Keepalive报文后,获得Keepalive报文中携带的TTL值M,并确定本设备与邻居Spoke之间的Cost值为(N-M);在本地维护的邻居Cost表中记录所述邻居Spoke的信息与所述Cost值(N-M)之间的对应关系。
所述目的Spoke的信息包括所述目的Spoke的公网地址;所述报文发送模块12,具体用于在需要向目的Spoke发送数据时,向邻居Spoke发送携带所述目的Spoke的公网地址的CostRequest报文。
所述数据发送模块15,进一步用于在Cost值最小的路径为本设备至邻居Spoke至目的Spoke时,通过本设备与目的Spoke之间的direct隧道地址对所述数据进行第一层封装,并通过本设备与邻居Spoke之间的direct隧道地址对第一层封装后的数据进行第二层封装,并将第二层封装后的数据发送给所述邻居Spoke;由所述邻居Spoke在收到第二层封装后的数据时,解第二层封装得到第一层封装后的数据,并将第一层封装后的数据发送给所述目的Spoke。
所述数据发送模块15,进一步用于在Cost值最小的路径为本设备至邻居Spoke至目的Spoke时,通过本设备与邻居Spoke之间的direct隧道地址对所述数据进行封装,并在封装后的数据的指定字段中携带所述目的Spoke的公网地址,并将封装后的数据发送给所述邻居Spoke;由所述邻居Spoke在收到封装后的数据时,如果发现指定字段中携带的公网地址不是本设备的公网地址,则将封装后的数据的目的地址修改为所述指定字段中携带的公网地址,并将修改后的数据发送给所述目的Spoke。
其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。