一种基于软件定义网络的域间链路快速故障恢复方法

文档序号:8003546阅读:234来源:国知局
一种基于软件定义网络的域间链路快速故障恢复方法
【专利摘要】本发明公开了一种基于软件定义网络的域间链路快速故障恢复方法,该方法在域间链路出现故障的时候,根据存储在OpenFlow交换机本地的邻接节点表选择绕过故障链路的路径而不是由控制器根据最新的拓扑来选择一条新路径。本发明与由控制器介入的链路故障恢复方法相比,有恢复速度快的优点,能减少丢包率,其实现方法简便,灵活性好,具有可扩展性。
【专利说明】 一种基于软件定义网络的域间链路快速故障恢复方法
【技术领域】
[0001]本发明涉及计算机网络【技术领域】,尤其涉及一种基于软件定义网络的域间链路快速故障恢复方法。
【背景技术】
[0002]经过数十年的发展之后,互联网无论是在商业方面还是在通信领域都取得了十分巨大的成功,也为人类的生活与生产方式带来了自工业革命以来最有影响力的变革。然而规模巨大的网络同时也限制了它的发展,导致了网络体系结构的“僵化”。软件定义网络(SDN)通过把路由器中的控制面与数据面分离开来并把控制面放到中心控制器上实现网络的可编程性,控制器根据所承载网络业务的路由策略来决定如何转发数据包并把转发规则通过控制器与转发设备(OpenFlow交换机)间的通信标准(如OpenFlow协议)写入转发设备的流表中。
[0003]分布式SDN控制器改进了单一 SDN控制器控制底层转发设备的可伸缩性,将整个网络分割成多个域,每个域的转发设备由各自的控制器来控制,域间物理链路状态存储到一致的网络视图(Network View,由各个控制器通过一致性分布式算法来维护,如分布式哈希表等)上。当域间的链路发生故障的时候,发往故障链路的数据包都将丢弃。链路的恢复需要控制器的参与,控制器收到拓扑变化的消息后,首先要把故障链路状态存储至网络视图中,然后重新为发往故障链路的数据包计算一条路径并写入相应的转发设备,以确保发往故障链路的数据包从新的路径转发而不被丢弃。这种域间故障链路恢复的方法需要控制器的参与,因此速度比较慢,会使更多的数据包被丢弃,而且控制器的参与会占用控制器与交换设备之间的带宽。

【发明内容】

[0004]本发明的目的在于针对现有技术的不足,提供一种基于软件定义网络的域间链路快速故障恢复方法,该方法效率高,灵活性好,实现简便。
[0005]本发明的目的是通过以下技术方案来实现的:一种基于软件定义网络的域间链路快速故障恢复方法,包括以下步骤:
步骤1:初始网络中的所有的OpenFlow交换机(OFS)都和控制器相连,每个OFS有全网唯一的标识符,由同一个控制器管理的所有OFS组成一个域,域由控制器的IP地址标识。OFS在与控制器建立连接时,控制器会把域间OFS选择策略加载到0FS。
[0006]步骤2:各OFS向邻接OFS广播邻接消息(NDM),该邻接消息封装了消息类型、域ID、物理节点ID、端口 ID和端口 IP。OFS收到从邻接节点发来的NDM后将邻居OFS信息加入到自己维护的邻接节点表中。邻接节点表由邻接节点域ID、邻接节点ID、邻接节点端口ID、邻接节点端口 IP、与邻接节点相连的本OFS的端口 ID和定时器项组成。
[0007]步骤3:每个OFS把用OpenFlow消息封装的节点信息消息(NM)发送给控制器。该节点信息消息封装了消息类型、OFS信息和邻接OFS信息。控制器收到各OFS发来的封装了 NM的OpenFlow消息后,就获得了本域的物理拓扑信息以及与本域相连的其他域的边界OFS信息(如果一个域的OFS与其他域的OFS相连,则该OFS为边界0FS),控制器将本域的物理拓扑存储到本地,把域间的物理拓扑存储至网络视图,每个控制器根据网络视图获取全网域间拓扑。
[0008]步骤4:维护域间链路,快速恢复故障链路。该步骤通过以下子步骤来实现:
(4.DOFS周期性地向邻接OFS广播NDM,0FS收到NDM后,提取出物理节点ID字段,并与邻接节点表中的邻接节点ID项匹配,如果匹配成功,就重置命中表项的定时器;如果匹配不成功,表示有新的OFS与之相连,则更新邻接节点表,为刚连入的OFS增加一个表项,并由OFS发送一个封装了 NIM的OpenFlow消息给控制器,以告知新节点的加入以及网络拓扑的变化。
[0009](4.2)每个OFS定期检查邻接节点表中的定时器项,如果某个表项的定时器超过预先设定的最大值,表示此OFS在一定时间内没有收到表项中OFS发来的NDM,表项中的OFS为不可达。
[0010](4.3)如果OFS检测到某个邻接OFS不可达,说明两个OFS之间的链路发生了故障。OFS从邻接节点表中找出邻接节点域ID为与不可达OFS域ID相同的候选表项,如果有多个候选表项,根据域间OFS选择策略从多个候选表项中选择一个最佳表项,转到步骤
(4.4);若没有找到,转到步骤(4.5)。
[0011](4.4) OFS根据最佳表项修改流表:先找出流表项中数据包发出端口为与不可达OFS相连的端口的流表项,再修改这些流表项把发出端口修改为最佳表项中的与邻接节点相连的本OpenFlow交换机的端口 ID,从而把发往不可达OFS的流量定向到与不可达OFS在同一个域中的边界OFS。
[0012](4.5) OFS采用洪泛法发送寻找路径消息(FPM)以找到此OFS到不可达OFS所在域的路径。该寻找路径消息封装了消息类型、不可达OFS的域D_ID和源OFS的域S_ID和路径。FPM每到达一个OFS的时候需要把OFS的ID和收到FPM的端口 ID写入路径,以方便FPM回复消息的发送,每从OFS的端口发送前,需要把发出端口 ID写入到路径中,以方便随后流表更新消息的发送。OFS首先向除了与不可达OFS相连的端口外的其他端口发送FPM,当邻接OFS收到FPM后,查找邻接节点表以确定邻接节点表中是否存在邻接节点域ID为D_ID的0FS,如果找到,根据FPM中的路径发送FPM回复消息;如果没有找到,OFS把FPM从除了收到FPM端口之外的端口发送出去直到找到通往域D_ID的一条路径。当源OFS收到FPM回复消息后,提取出FPM回复消息中的路径,若OFS收到多条FPM消息,则从所有路径中选择出跳数最少的路径为最佳路径,如果有多条跳数相同且最少的路径,则随机从多条跳数最少的路径中选择一条为最佳路径。
[0013](4.6) OpenFlow交换机找到发往不可达OpenFlow交换机的最佳路径后,往最佳路径发送流表更新消息(FUM),以往最佳路径上的OpenFlow交换机增加流表项使发往不可达OpenFlow交换机的数据包往最佳路径发送;该流表更新消息封装了消息类型、不可达OpenFlow交换机的域ID、路径和匹配域;路径为从寻找路径回复消息中提取出的最佳路径,匹配域为在OpenFlow交换机流表中找出的数据包发出端口为与不可达OpenFlow交换机相连的端口的流表项中的匹配域,匹配域有一个或多个;0penFlOW交换机根据FUM中的路径来发送流表更新消息,每到达一个OpenFlow交换机的时候,为OpenFlow交换机增加流表项,如果FUM中有多个匹配域,则增加多个流表项,流表项的匹配域为流表更新消息中的匹配域,从FUM的路径中提取下一跳的发出端口并写入流表项的行为部分,并把该流表项的优先级设为最高。这样就为发往不可达OpenFlow交换机所在的域的数据包建立了一条新的路径。
[0014](4.7)0FS向控制器发送封装了 NM的OpenFlow消息报告此OFS与不可达OFS之间的链路故障,控制器更新拓扑,从而实现域间链路的故障恢复。
[0015]本发明的有益效果是:本发明提出了一种基于软件定义网络的域间链路快速故障恢复方法。由于新路由的计算不需要通过控制器,所以链路故障能快速恢复,从而减少数据包丢弃的数量。
【专利附图】

【附图说明】
[0016]图1是网络拓扑结构示意图。
[0017]图2是基于软件定义网络的域间链路快速故障恢复方法的流程图。
【具体实施方式】
[0018]下面根据附图详细描述本发明,本发明的目的和效果将变得更加明显。
[0019]本发明基于软件定义网络的域间链路的快速故障恢复方法,包括以下步骤:
步骤1:初始网络中的所有OFS都和控制器相连,每个OFS有全网唯一的标识符,由同
一个控制器管理的所有OFS组成一个域,域由控制器的IP地址标识。OFS在与控制器建立连接时,控制器会把域间OFS选择策略加载到0FS。在图1中,Sl-SlO为OpenFlow交换机,S1、S2、S3、S4组成一个域AS1,由控制器Cl控制;S5、S6、S7、S8组成一个域AS2,由控制器C2控制;S9、SlO组成一个域AS3,由控制器C3控制。
[0020]步骤2:所有OFS向邻接OFS广播邻接消息(NDM)。该邻接消息封装了消息类型、域ID、物理节点ID、端口 ID和端口 IP。OFS收到邻接消息NDM后将该OFS信息加入到自己维护的邻接节点表(邻接节点域ID、邻接节点ID、邻接节点端口 ID、邻接节点端口 IP、与邻接节点相连的本OFS的端口 ID和定时器)中。
[0021]步骤3:每个OFS把用OpenFlow消息封装的节点信息消息(NM)发送给控制器。该节点信息消息封装了消息类型、OFS信息、邻接OFS信息。控制器收到各OFS发来的封装了 NM的OpenFlow消息后,就获得了本域的物理拓扑信息以及与本域相连的其他域的边界OFS信息,控制器将本域的物理拓扑存储到本地,把域间的物理拓扑存储至网络视图,每个控制器根据网络视图获取全网域间拓扑。
[0022]步骤4:维护域间链路,快速恢复故障链路。该步骤通过以下子步骤来实现:
(4.1)0FS每隔30s向邻接OFS广播NDM,0FS收到NDM后,提取出物理节点ID字段,并与邻接节点表中的邻接节点ID项匹配,如果匹配成功,就重置命中表项的定时器。如果匹配不成功,表示有新的OFS与之相连,则更新邻接节点表,为刚连入的OFS增加一个表项,并由OFS发送一个封装了 NIM的OpenFlow消息给控制器,以告知新节点的加入以及网络拓扑的变化。
[0023](4.2)每个OFS定期检查邻接节点表中的定时器项,如果某个表项的定时器超过120s,表示此OFS在一定时间内没有收到表项中OFS发来的NDM,表项中的OFS为不可达。[0024](4.3)如果OFS检测到某个邻接OFS不可达,说明两个OFS之间的链路发生了故障。OFS从邻接节点表中找出邻接节点域ID为与不可达OFS域ID相同的候选表项,如果有多个候选表项,根据域间OFS选择策略从多个候选表项中选择一个最佳表项,转到步骤
(4.4);若没有找到,转到步骤(4.5)。
[0025](4.4) OFS根据最佳表项修改流表:先找出流表项中数据包发出端口为与不可达OFS相连的端口的流表项,再修改这些流表项把发出端口修改为最佳表项中的与邻接节点相连的本OFS的端口 ID,从而把发往不可达OFS的流量定向到与不可达OFS在同一个域中的边界0FS。在图1中,如果S5检测到S3不可达,但是S5在本地的邻接节点表中能找到与S3在同一个域ASl的S4,于是修改流表项,把发往S3的流量定向到S4。
[0026](4.5) OFS采用洪泛法发送寻找路径消息(FPM),以找到此OFS到不可达OFS所在域的路径。该寻找路径消息封装了消息类型、不可达OFS的域D_ID、源OFS的域S_ID和路径。FPM每到达一个OFS的时候需要把OFS的ID和收到FPM的端口 ID写入路径,以方便FPM回复消息的发送,每从OFS的端口发送前,需要把发出端口 ID写入到路径中,以方便随后流表更新消息的发送。OFS首先向除了与不可达OFS相连的端口外的其他端口发送FPM,当邻接OFS收到FPM后,查找邻接节点表确定邻接节点表中是否存在邻接节点域ID为D_ID的0FS,如果找到,根据FPM中的路径发送FPM回复消息;如果没有找到,OFS把FPM从除了收到FPM端口之外的端口发送出去直到找到通往域D_ID的一条路径。当源OFS收到FPM回复消息后,提取出FPM回复消息中的路径,若OFS收到多条FPM消息,则从所有路径中选择出跳数最少的路径为最佳路径,如果有多条跳数相同且最少的路径,则随机从多条跳数最少的路径中选择一条为最佳路径。在图1中,如果S3检测到S5不可达而且在S3的邻接节点表中找不到S5所在域AS2中的0FS,于是S3向除了与S5相连的端口以外的其他端口发送FPM,S2收到S3发来的FPM后,由于在S2的邻接节点表中不存在域AS2的OFS,S2就把S2和收到消息的端口加入到FPM的路径部分中再次发送出去,就这样一直发送下去,到最后S4和S9收到了 FPM,在S4和S9的邻接节点表中都存在域AS2中的0FS,于是S4和S9都会送FPM回复消息报告到达S5所在的域的路径已经找到。
[0027](4.6) OFS找到发往不可达OFS的最佳路径后,往最佳路径发送流表更新消息(FUM),以往最佳路径上的OFS增加流表项使发往不可达OFS的数据包往最佳路径发送;该流表更新消息封装了消息类型、不可达OFS的域ID、路径和匹配域;路径为从寻找路径回复消息中提取出的最佳路径,匹配域为在OpenFlow交换机流表中找出的数据包发出端口为与不可达OFS相连的端口的流表项中的匹配域,匹配域有一个或多个;0FS根据FUM中的路径来发送流表更新消息,每到达一个OFS的时候,为OFS增加流表项,如果有多个匹配域,则增加多个流表项,流表项的匹配域为流表更新消息中的匹配域,从FUM的路径中提取下一跳的发出端口并写入流表项的行为部分,并把该流表项的优先级设为最高。这样就为发往不可达OpenFlow交换机所在的域的数据包建立了一条新的路径。在图1中,S3找到到达S5所在的域的最佳路径为S3、S2、S1、S4、S5后,S3往最佳路径发送FUM,在最佳路径上的OpenFlow交换机增加流表项,使发往S5的数据包往最佳路径发送。
[0028](4.7)0FS向控制器发送封装了 NM的OpenFlow消息报告此OFS与不可达OFS之间的链路故障,控制器更新拓扑。
[0029]本发明提出的域间链路故障恢复方法在域间链路出现故障的时候,OpenFlow交换机直接根据存储在本地邻接节点表中的信息为发往不可达OpenFlow交换机的流量选择一条路径,而不用控制器的参与,不占用OpenFlow交换机与控制器之间有限的带宽,恢复速度快,减少了网络的丢包率。
【权利要求】
1.一种基于软件定义网络的域间链路快速故障恢复方法,其特征在于,包括以下步骤: 步骤1:初始网络中的所有的OpenFlow交换机都和控制器相连,每个OpenFlow交换机有全网唯一的标识符,由同一个控制器管理的所有OpenFlow交换机组成一个域,域由控制器的IP地址标识;0penFlow交换机在与控制器建立连接时,控制器会把域间OpenFlow交换机选择策略加载到OpenFlow交换机; 步骤2:各OpenFlow交换机向邻接OpenFlow交换机广播邻接消息,该邻接消息封装了消息类型、域ID、物理节点ID、端口 ID和端口 IP ;0penFlow交换机收到从邻接节点发来的邻接消息后将邻居OpenFlow交换机的信息加入到自己维护的邻接节点表中;邻接节点表由邻接节点域ID、邻接节点ID、邻接节点端口 ID、邻接节点端口 IP、与邻接节点相连的本OpenFlow交换机的端口 ID和定时器项组成; 步骤3:每个OpenFlow交换机把用OpenFlow消息封装的节点信息消息发送给控制器;该节点信息消息由消息类型、OpenFlow交换机信息和邻接OpenFlow交换机信息组成;控制器收到各OpenFlow交换机发来的封装了节点信息消息的OpenFlow消息后,就获得了本域的物理拓扑信息以及与本域相连的其他域的边界OpenFlow交换机信息(如果一个域的OpenFlow交换机与其他域的OpenFlow交换机相连,则该OpenFlow交换机为边界OpenFlow交换机),控制器将本域的物理拓扑存储到本地,把域间的物理拓扑存储至网络视图,每个控制器根据网络视图获取全网域间拓扑; 步骤4:维护域间链路,快速恢复故障链路;该步骤通过以下子步骤来实现: (4.DOpenFlow交换机周期性地向邻接OpenFlow交换机广播邻接消息,OpenFlow交换机收到邻接消息后,提取出物理节点ID字段,并与邻接节 点表中的邻接节点ID项匹配,如果匹配成功,就重置命中表项的定时器;如果匹配不成功,表示有新的OpenFlow交换机与之相连,则更新邻接节点表,为刚连入的OpenFlow交换机增加一个表项,并由OpenFlow交换机发送一个封装了节点信息消 息的OpenFlow消息给控制器,以告知新节点的加入以及网络拓扑的变化; (4.2)每个OpenFlow交换机定期检查邻接节点表中的定时器项,如果某个表项的定时器超过预先设定的最大值,表示此OpenFlow交换机在一定时间内没有收到表项中OpenFlow交换机发来的邻接消息,表项中的OpenFlow交换机为不可达; (4.3)如果OpenFlow交换机检测到某个邻接OpenFlow交换机不可达,说明两个OpenFlow交换机之间的链路发生了故障;0penFlow交换机从邻接节点表中找出邻接节点域ID为与不可达OpenFlow交换机域ID相同的候选表项,如果有多个候选表项,根据域间OpenFlow交换机选择策略从多个候选表项中选择一个最佳表项,转到步骤(4.4);若没有找至IJ,转到步骤(4.5); (4.4) OpenFlow交换机根据最佳表项修改流表:先找出流表项中数据包发出端口为与不可达OpenFlow交换机相连的端口的流表项,再修改这些流表项把发出端口修改为最佳表项中的与邻接节点相连的本OpenFlow交换机的端口 ID,从而把发往不可达OpenFlow交换机的流量定向到与不可达OpenFlow交换机在同一个域中的边界OpenFlow交换机; (4.5) OpenFlow交换机采用洪泛法发送寻找路径消息以找到此OpenFlow交换机到不可达OpenFlow交换机所在域的路径;该寻找路径消息封装了消息类型、不可达OpenFlow交换机的域0_10和源OpenFlow交换机的域S_ID和路径;寻找路径消息每到达一个OpenFlow交换机的时候需要把OpenFlow交换机的ID和收到寻找路径消息的端口 ID写入路径,以方便寻找路径回复消息的发送,每从OpenFlow交换机的端口发送前,需要把发出端口 ID写入到路径中,以方便随后流表更新消息的发送;OpenFlow交换机首先向除了与不可达OpenFlow交换机相连的端口外的其他端口发送寻找路径消息,当邻接OpenFlow交换机收到寻找路径消息后,查找邻接节点表以确定邻接节点表中是否存在邻接节点域ID为D_ID的OpenFlow交换机;如果找到,根据寻找路径消息中的路径发送寻找路径回复消息;如果没有找到,OpenFlow交换机把寻找路径消息从除了收到寻找路径消息端口之外的端口发送出去直到找到通往域D_ID的一条路径;当源OpenFlow交换机收到寻找路径回复消息后,提取出寻找路径回复消息中的路径,若OpenFlow交换机收到多条寻找路径回复消息,则从所有路径中选择出跳数最少的路径为最佳路径,如果有多条跳数相同且最少的路径,则随机从多条跳数最少的路径中选择一条为最佳路径; (4.6)0penFlow交换机找到发往不可达OpenFlow交换机的最佳路径后,往最佳路径发送流表更新消息,以往最佳路径上的OpenFlow交换机增加流表项使发往不可达OpenFlow交换机的数据包往最佳·路径发送;该流表更新消息封装了消息类型、不可达OpenFlow交换机的域ID、路径和匹配域;路径为从寻找路径回复消息中提取出的最佳路径,匹配域为在源OpenFlow交换机流表中找出的数据包发出端口为与不可达OpenFlow交换机相连的端口的流表项中的匹配域,匹配域有一个或多个;0penFlOW交换机根据流表更新消息中的路径来发送流表更新消息,每到达一个OpenFlow交换机的时候,为OpenFlow交换机增加流表项,如果流表更新消息中有多个匹配域,则增加多个流表项,流表项的匹配域为流表更新消息中的匹配域,从流表更新消息的路径中提取下一跳的发出端口并写入流表项的行为部分,并把该流表项的优先级设为最高;这样就为发往不可达OpenFlow交换机所在的域的数据包建立了一条新的路径; (4.7) OpenFlow交换机向控制器发送封装了节点信息消息的OpenFlow消息报告此OpenFlow交换机与不可达OpenFlow交换机之间的链路故障,控制器更新拓扑,从而实现域间链路的故障恢复。
【文档编号】H04L12/24GK103428031SQ201310335883
【公开日】2013年12月4日 申请日期:2013年8月5日 优先权日:2013年8月5日
【发明者】吴春明, 李徐艳, 周伯阳, 姜明 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1