1.一种基于多路径的软件定义网络实现方法,其特征在于,所述网络包括一个核心控制器,两个以上的本地控制器,交换机和设备;本地控制器用于管理交换机,核心控制器用于管理本地控制器,设备为末端设备;设备通过交换机实现通信;
一个核心控制器具有两个以上的接口,每个接口与一个本地控制器链路相连;一个本地控制器具有上游接口和两个以上的下游接口,上游接口与核心控制器链路相连,下游接口与交换机链路相连;
一个交换机具有两个以上的上游接口和两个以上的下游接口,每个上游接口与一个交换机或者本地控制器链路相连,每个下游接口与一个交换机或者一个设备链路相连;
交换机包括骨干交换机和接入交换机,骨干交换机的下游接口与交换机链路相连,接入交换机的下游接口与设备链路相连;
一个设备具有一个接口,该接口与接入交换机链路相连;
骨干交换机SW1的上游接口如果链接另一个骨干交换机SW2,且骨干交换机SW2与本地控制器LC2多跳可达,那么骨干交换机SW2与本地控制器LC2的距离小于骨干交换器SW1与本地控制器LC2的距离;
一个设备或者接入交换机由一个地址标识,一个地址由路由前缀和硬件ID构成;每个接入交换机的地址的硬件ID为0;接入交换机的路由前缀预先设置;
接入交换机定期发送信标消息,该信标消息的源地址为该接入交换机的地址,目的地址为广播地址,广播地址的每个比特位为1;设备接收到信标消息后,如果该信标消息的源地址的硬件ID为0,该设备则将自己的硬件ID与该信标消息的源地址的路由前缀相结合构建成一个地址;
接入交换机保存一个邻居表,一个邻居表项包括地址域,接口ID域和生命周期域;
一个接口由接口ID唯一标识,接口ID为f的接口可以简写为接口f;
设备D1与接入交换机ES1链路相连,设备D1获取地址后,执行下述过程建立邻居表:步骤101:开始;
步骤102:设备D1发送一个信标消息,该信标消息的源地址为设备D1的地址,目的地址为接入交换机ES1的地址;
步骤103:接入交换机ES1从接口f1接收到信标消息后,查看邻居表,如果存在一个邻居表项,该邻居表项的接口ID为f1,接入交换机ES1则将该邻居表项的地址域更新为该信标消息的源地址,将该邻居表项的生命周期设置为最大值;否则,接入交换机ES1创建一个邻居表项,该邻居表项的接口ID为f1,该邻居表项的地址域为该信标消息的源地址,该邻居表项的生命周期设置为最大值;
步骤104:结束。
2.根据权利要求1所述的一种基于多路径的软件定义网络实现方法,其特征在于,一个本地控制器维护一个本地控制器前缀表,本地控制器前缀表项包含路由前缀域,接口ID集合域和生命周期域;
一个核心控制器维护一个核心控制器前缀表,核心控制器前缀表项包含路由前缀域和接口域;
接入交换机ES1定期执行下述操作以建立前缀表:
步骤201:开始;
步骤202:接入交换机ES1设置一个接口ID集合参数s1,参数s1的初始值为空,接入交换机ES1从每个上游接口发送一个发布消息,该发布消息的源地址为接入交换机ES1的地址,目的地址为空,负载为参数s1;
步骤203:判断是本地控制器从接口x2还是交换机从接口x1接收到发布消息,如果是本地控制器则执行步骤205,否则执行步骤204;
步骤204:交换机从接口x1接收到发布消息后,将接口x1加入到该发布消息负载中的参数s1中并作为最后一个元素存在,从每个上游接口转发该发布消息,执行步骤203;
步骤205:本地控制器从接口x2接收到发布消息后,将接口x2加入到该发布消息负载中的参数s1中并作为最后一个元素存在;该本地控制器查看本地控制器前缀表,判断是否存在一个本地控制器前缀表项,该本地控制器前缀表项的路由前缀等于该发布消息源地址的路由前缀,且接口ID集合等于该发布消息负载中的参数s1,如果存在则本地控制器将该前缀表项的生命周期设置为最大值;否则,该本地控制器创建一个前缀表项,该前缀表项的路由前缀等于该发布消息源地址的路由前缀,接口ID集合等于该发布消息负载中的参数s1,将该前缀表项的生命周期设置为最大值;
步骤206:接收到发布消息的本地控制器查看本地控制器前缀表,判断是否只有一个本地控制器前缀表项的路由前缀域值等于该发布消息的源地址的路由前缀,如果是则执行步骤207,否则执行步骤208;
步骤207:接收到发布消息的本地控制器从上游接口发送一个前缀发布消息,该前缀发布消息的源地址和目的地址均为空,负载为接收到的发布消息的源地址的路由前缀;核心控制器从接口x3接收到该前缀发布消息后,创建一个核心控制器前缀表项,该核心控制器前缀表项的路由前缀域值等于该前缀发布消息负载中的路由前缀,接口ID域值等于x3;
步骤208:结束。
3.根据权利要求2所述的一种基于多路径的软件定义网络实现方法,其特征在于,如果本地控制器LC1检测到前缀表项E1的生命周期衰减为0,则执行下述操作:步骤301:开始;
步骤302:本地控制器LC1查看本地控制器前缀表,判断是否至少存在两个前缀表项,这两个前缀表项的路由前缀等于前缀表项E1的路由前缀,如果是则执行步骤303,否则执行步骤304;
步骤303:本地控制器LC1从前缀表中删除前缀表项E1,执行步骤306;
步骤304:本地控制器LC1从上游接口发送一个删除消息,该删除消息的源地址和目的地址为空,负载为前缀表项E1的路由前缀,本地控制器LC1然后删除前缀表项E1;
步骤305:核心控制器从接口x4接收到删除消息后,选择一个前缀表项,该前缀表项的路由前缀等于该删除消息负载中的路由前缀且接口ID等于x4,删除选中的前缀表项;
步骤306:结束。
4.根据权利要求3所述的一种基于多路径的软件定义网络实现方法,其特征在于,设备D1与接入交换机ES1链路相连,设备D2与接入交换机ES2链路相连;设备D1通过下述过程实现与设备D2的通信:步骤401:开始;
步骤402:设备D1发送请求消息,该请求消息的源地址为设备D1的地址,目的地址为设备D2的地址,负载为随机数R1;接入交换机ES1接收到该请求消息后,从每个上游接口转发该请求消息;
步骤403:如果本地控制器接收到该请求消息,则执行步骤405,否则执行步骤404;
步骤404:从下游接口接收到请求消息的交换机从每个上游接口转发该请求消息,执行步骤403;
步骤405:本地控制器从一个下游接口接收到该请求消息后,查看前缀表,判断是否至少存在一个前缀表项,该前缀表项的路由前缀等于该请求消息的目的地址的路由前缀,如果是则执行步骤406,否则执行步骤407;
步骤406:接收到请求消息的本地控制器选择所有路由前缀等于该请求消息目的地址的路由前缀的前缀表项,针对每个选中的前缀表项,该本地控制器将该前缀表项的接口ID集合域值加入到该请求消息负载中,选择该接口ID集合最后一个元素标识的接口,从该接口ID集合删除最后一个元素,从选中的接口转发该请求消息,执行步骤408;
步骤407:接收到请求消息的本地控制器从上游接口转发该请求消息,核心控制器接收到请求消息后,选择路由前缀等于该请求消息目的地址的路由前缀的所有前缀表项,针对每个前缀表项,该核心控制器从该前缀表项的接口ID域值所标识的接口转发该请求消息;
本地控制器从上游接口接收到请求消息后,选择路由前缀等于该请求消息目的地址的路由前缀的所有前缀表项,针对每个选中的前缀表项,该本地控制器将该前缀表项的接口ID集合域值加入到该请求消息负载中,选择该接口ID集合最后一个元素标识的接口,从该接口ID集合删除最后一个元素,从选中的接口转发该请求消息;
步骤408:判断是否设备D2接收到请求消息,如果是则执行步骤412,否则执行步骤409;
步骤409:判断是否接入控制器ES2接收到请求消息,如果是则执行步骤410,否则执行步骤411;
步骤410:接入控制器ES2接收到请求消息后,选择一个邻居表项,该邻居表项的地址域值等于该请求消息的目的地址,从该邻居表项的接口ID域值所标识的接口转发该请求消息,执行步骤408;
步骤411:交换机从上游接口接收到该请求消息后,选择该请求消息负载中的接口ID集合中的最后一个元素所标识的接口,从该接口ID集合中删除最后一个元素,从选中的接口转发该请求消息,执行步骤408;
步骤412:判断设备D2是否在预定时间PT1内接收到具有相同随机数,相同源地址和相同目的地址的请求消息,如果是,则执行步骤423,否则执行步骤413;
步骤413:设备D2保存接收到的请求消息,发送一个响应消息,该响应消息的源地址为该请求消息的目的地址,该响应消息的目的地址为该请求消息的源地址,负载为响应数据以及该请求消息负载中的随机数;接入交换机ES2接收到该响应消息后,从每个上游接口转发该响应消息;
步骤414:判断是否本地控制器接收到该响应消息,如果是则执行步骤416,否则执行步骤415;
步骤415:从下游接口接收到响应消息的交换机从每个上游接口转发该响应消息,执行步骤414;
步骤416:本地控制器从一个下游接口接收到该响应消息后,查看前缀表,判断是否至少存在一个前缀表项,该前缀表项的路由前缀等于该响应消息的目的地址的路由前缀,如果是则执行步骤417,否则执行步骤418;
步骤417:接收到响应消息的本地控制器选择所有路由前缀等于该响应消息目的地址的路由前缀的前缀表项,针对每个选中的前缀表项,该本地控制器将该前缀表项的接口ID集合域值加入到该响应消息负载中,选择该接口ID集合最后一个元素标识的接口,从该接口ID集合删除最后一个元素,从选中的接口转发该响应消息,执行步骤419;
步骤418:接收到响应消息的本地控制器从上游接口转发该响应消息,核心控制器接收到响应消息后,选择路由前缀等于该响应消息目的地址的路由前缀的所有前缀表项,针对每个前缀表项,该核心控制器从该前缀表项的接口ID域值所标识的接口转发该响应消息;
本地控制器从上游接口接收到响应消息后,选择路由前缀等于该响应消息目的地址的路由前缀的所有前缀表项,针对每个选中的前缀表项,该本地控制器将该前缀表项的接口ID集合域值加入到该响应消息负载中,选择该接口ID集合最后一个元素标识的接口,从该接口ID集合删除最后一个元素,从选中的接口转发该响应消息;
步骤419:判断是否设备D1接收到响应消息,如果是则执行步骤423,否则执行步骤420;
步骤420:判断是否接入控制器ES1接收到响应消息,如果是则执行步骤421,否则执行步骤422;
步骤421:接入控制器ES1接收到响应消息后,选择一个邻居表项,该邻居表项的地址域值等于该响应消息的目的地址,从该邻居表项的接口ID域值所标识的接口转发该响应消息,执行步骤419;
步骤422:交换机从上游接口接收到该响应消息后,选择该响应消息负载中的接口ID集合中的最后一个元素所标识的接口,从该接口ID集合中删除最后一个元素,从选中的接口转发该响应消息,执行步骤419;
步骤423:判断设备D1是否在预定时间PT1内接收到具有相同随机数,相同源地址和相同目的地址的响应消息,如果是则执行步骤425,否则执行步骤424;
步骤424:设备D1保存接收到的响应消息中的响应数据,执行步骤426;
步骤425:设备D1丢弃接收到的响应消息;
步骤426:结束。