1.一种可靠的软件定义网络实现方法,其特征在于,所述网络包括控制器和交换机;一个控制器具有唯一的坐标,一个交换机具有唯一的坐标;一个控制器由控制器ID唯一标识,该控制器ID等于该控制器的坐标;一个交换机由交换机ID唯一标识,该交换机ID等于该交换机的坐标;控制器分布在所述网络中,所述网络构建成两个以上的域,一个域由一个控制器和两个以上的交换机构成,其中,一个域中的交换机在网络中所有控制器中与相同域中的控制器距离最近;
每个控制器或者交换机配置两个以上的接口,每个接口由接口ID唯一标识,该接口ID预先配置;一个控制器与所在域中的一个交换机的一个接口相连,该交换机的其余接口与其他控制器链路相连,该交换机称为主交换机;
每个交换机保存一个控制器表,一个控制器表项由控制器ID域和路径集合域构成;控制器执行下述步骤建立控制器表项:步骤101:开始;
步骤102:控制器从与交换机相连的接口发送一个发布消息,该发布消息的负载为路径集合和自己的控制器ID,路径集合为空集;
步骤103:交换机从自己的接口f1接收到该发布消息后,如果该交换机与接收到的发布消息负载中的控制器ID距离最近,即属于该控制器ID所标识的控制器所在的域,则执行步骤104,否则执行步骤108;
步骤104:从接口f1接收到发布消息的交换机将接口f1加入到发布消息的路径集合中且作为该路径集合的第一个元素;如果该交换机的控制器表为空,则执行步骤105,否则执行步骤106;
步骤105:交换机创建一个控制器表项,该控制器表项的控制器ID域值设置为该发布消息中的控制器ID,路径集合设置为该发布消息负载中的路径集合,交换机从除了接口f1以外的接口路由该发布消息,执行步骤103;
步骤106:交换机判断控制器表项的路径集合元素个数是否大于接收到的发布消息负载中的路径集合的元素个数,如果是,则执行步骤107,否则执行步骤108;
步骤107:交换机将控制器表项的路径集合设置为该发布消息负载中的路径集合,交换机从除了接口f1以外的接口路由该发布消息,执行步骤103;
步骤108:结束;
一个移动节点由节点ID唯一标识,节点ID包括三个部分,控制器ID、交换机ID和设备ID,设备ID为该移动节点的硬件ID,具有网络唯一性;一个移动节点的硬件ID不变化;一个移动节点配置一个家乡节点ID和一个临时节点ID;每个交换机维护一个地址表,每个地址表项包含节点ID域、类型域、接口ID域和生命周期域,其中类型域值为0时,表明该节点ID为家乡节点ID,类型域值为1时,表明该节点ID为临时节点ID;
如果一个地址表项的生命周期衰减为0,则删除该地址表项;
移动节点M1启动后,与交换机SW1关联,交换机SW1所在域的控制器为C1,移动节点M1执行下述步骤获取家乡节点ID:步骤201:开始;
步骤202:移动节点M1发送家乡请求消息,家乡请求消息负载为自己的设备ID和生命周期值;
步骤203:交换机SW1从自己的接口f2接收到家乡请求消息后,构建一个节点ID,该节点ID的控制器ID为控制器C1的控制器ID,交换机ID为自己的交换机ID,设备ID为家乡请求消息中的设备ID;交换机SW1创建一个地址表项,该地址表项的节点ID域值为构建的节点ID,类型域值为0,接口ID为f2,生命周期域值为接收到的家乡请求消息负载中的生命周期值;
交换机SW1从接口f2发送家乡响应消息,该家乡响应消息的负载为构建的节点ID;
步骤204:移动节点M1接收到家乡响应消息后,将负载中的节点ID设置为自己的家乡节点ID;
步骤205:结束;
移动节点M1获取家乡节点ID后,如果与交换机SW4关联,交换机SW4所在域的控制器为C4,移动节点M1执行下述步骤获得临时节点ID:步骤301:开始;
步骤302:移动节点M1发送临时请求消息,消息负载为自己的设备ID和生命周期值;
步骤303:交换机SW4从自己的接口f3接收到临时请求消息后,构建一个节点ID,该节点ID的控制器ID为控制器C4的控制器ID,交换机ID为自己的交换机ID,设备ID为临时请求消息中的设备ID;交换机SW4创建一个地址表项,该地址表项的节点ID域值为构建的节点ID,类型域值为1,接口ID为f3,生命周期域值为接收到的临时请求消息负载中的生命周期值;
交换机SW4从接口f3发送临时响应消息,该临时响应消息的负载为构建的节点ID;
步骤304:移动节点M1接收到临时响应消息后,将负载中的节点ID设置为自己的临时节点ID;
步骤305:结束;
每个交换机包含一个路由表,路由表的表名为交换机自己的坐标,每个路由表项包含交换机ID域和路径集合域;如果交换机SW1所在域的控制器为C1,则执行下述步骤建立路由表:步骤401:开始;
步骤402:交换机发送一个路由消息,该路由消息的负载为控制器C1的坐标,交换机自己的坐标和路径集合;路径集合为空;
步骤403:交换机从自己的接口f4接收到该路由消息后,如果该交换机的坐标在所有控制器中与控制器C1距离最近,则执行步骤404,否则执行步骤410;
步骤404:交换机将接口f4加入到该路由消息的路径集合中且接口f4作为路径集合的第一个元素,如果该交换机的一个接口与控制器相连,则执行步骤406,否则执行步骤405;
步骤405:交换机从除了接口f4以外的所有接口发送该路由消息,执行步骤403;
步骤406:交换机查看路由表,如果存在一个路由表项,该路由表项的交换机ID域值等于该路由消息中的坐标,则执行步骤408,否则执行步骤407;
步骤407:交换机创建一个路由表项,该路由表项的交换机ID域值等于该路由消息中的坐标,路径集合域值等于该路由消息中的路径集合,执行步骤410;
步骤408:交换机选择一个路由表项,该路由表项的交换机ID域值等于该路由消息中的坐标,如果该路由表项的路径集合元素个数大于该路由消息中的路径集合元素个数,则执行步骤409,否则执行步骤410;
步骤409:交换机选择一个路由表项,该路由表项的交换机ID域值等于该路由消息中的坐标,将该路由表项的路径集合更新为该路由消息中的路径集合;
步骤410:结束;
如果交换机SW3为主交换机,与控制器C3相连,则执行下述步骤执行上传操作:
步骤501:开始;
步骤502:交换机SW3构建一个上传消息,该上传消息的负载为交换机SW3的路由表;交换机SW3选择一个接口,该接口与控制器C3相连,然后从该接口发送上传消息;
步骤503:控制器接收到该上传消息后,保存该上传消息负载中的路由表;
步骤504:结束;
每个控制器包含一个控制器路由表,控制器路由表的名称为该控制器的坐标,每个控制器路由表项包含控制器ID域和路径集合域;控制器执行下述步骤建立控制器路由表:步骤601:开始;
步骤602:控制器从除了与交换机相连的接口以外的所有接口发送一个发布消息,该发布消息的负载为自己的坐标和路径集合;路径集合为空;
步骤603:除了步骤602中发送发布消息的控制器以外的其他控制器从自己的接口f6接收到该发布消息后,将接口f6加入到该发布消息的路径集合中且接口f6作为路径集合的第一个元素,查看控制器路由表,如果存在一个控制器路由表项,该控制器路由表项的控制器ID域值等于该发布消息中的坐标,则执行步骤605,否则执行步骤604;
步骤604:从接口f6接收到发布消息的控制器创建一个控制器路由表项,该控制器路由表项的控制器ID域值等于接收到的发布消息中的坐标,路径集合域值等于该发布消息中的路径集合;然后从除了接口f6以及与交换机相连的接口以外的所有接口发送该发布消息,执行步骤603;
步骤605:从接口f6接收到发布消息的控制器选择一个控制器路由表项,该控制器路由表项的控制器ID域值等于该发布消息中的坐标,如果该控制器路由表项的路径集合元素个数大于该发布消息中的路径集合的元素个数,则执行步骤606,否则执行步骤607;
步骤606:控制器选择一个控制器路由表项,该控制器路由表项的控制器ID域值等于该发布消息中的坐标,将该控制器路由表项的路径集合更新为该发布消息中的路径集合,然后从除了接口f6以及与交换机相连的接口以外的所有接口发送该发布消息,执行步骤603;
步骤607:结束;
在每个控制器维护一个映射表,每个映射表项包含家乡节点ID域、临时节点ID域和生命周期域,移动节点M1位于域O1中,域O1的控制器为C1,交换机SW1和SW2位于域O1内,移动节点M1与交换机SW1关联的条件下,如果移动节点M1位置发生移动,移动节点M1与交换机SW2关联,则执行下述域内更新步骤:步骤701:开始;
步骤702:移动节点M1执行步骤301~305从交换机SW2获取临时节点ID,移动节点M1发送一条更新消息,该更新消息的负载为移动节点M1的家乡节点ID和临时节点ID;
步骤703:交换机SW2接收到该更新消息后,查看控制器表项,将该控制器表项的路径集合加入到该更新消息的负载中,选择一个接口,该接口的接口ID等于该更新消息负载中的路径集合的第一个元素,然后从该更新消息负载中的路径集合中删除第一个元素,从选中的接口发送该更新消息;
步骤704:判断是交换机还是控制器C1接收到该更新消息,如果是交换机则执行步骤
705,否则执行步骤706;
步骤705:交换机接收到更新消息后,选择一个接口,该接口的接口ID等于该更新消息负载中的路径集合的第一个元素,然后交换机从该更新消息负载中的路径集合中删除第一个元素,从选中的接口发送该更新消息,执行步骤704;
步骤706:控制器C1接收到更新消息后,查看映射表,如果存在一个映射表项,该映射表项的家乡节点ID等于更新消息中的家乡节点ID,将该映射表项的临时节点ID更新为该更新消息中的临时节点ID;否则,控制器C1创建一个映射表项,该映射表项的家乡节点ID等于更新消息中的家乡节点ID,临时节点ID等于该更新消息中的临时节点ID;
步骤707:结束;
在移动节点M1位于域O1中,域O1的控制器为C1,交换机SW1位于域O1内,交换机SW3位于域O3内,域O3的控制器为C3,移动节点M1与交换机SW1关联的条件下,如果移动节点M1位置发生移动与交换机SW3关联,则执行下述域间更新步骤:步骤801:开始;
步骤802:移动节点M1执行步骤301~305从交换机SW3获取临时节点ID,移动节点M1发送一条更新消息,该更新消息的负载为移动节点M1的家乡节点ID和临时节点ID;
步骤803:交换机SW3接收到该更新消息后,查看控制器表项,将该控制器表项的路径集合加入到该更新消息的负载中,交换机SW3选择一个接口,该接口的接口ID等于该更新消息负载中的路径集合的第一个元素,然后从该更新消息负载中的路径集合中删除第一个元素,从选中的接口发送该更新消息;
步骤804:判断是交换机还是控制器C1接收到该更新消息,如果是交换机则执行步骤
805,否则执行步骤806;
步骤805:交换机接收到更新消息后,选择一个接口,该接口的接口ID等于该更新消息负载中的路径集合的第一个元素,然后从该更新消息负载中的路径集合中删除第一个元素,从选中的接口发送该更新消息,执行步骤804;
步骤806:控制器C1接收到更新消息后,查看控制器路由表,选择一个控制器路由表项,该控制器路由表项中的控制器ID域值等于该更新消息中家乡节点ID中的控制器ID,将该控制器路由表项的路径集合加入到该更新消息中,选择一个接口,该接口的接口ID等于该更新消息负载中的路径集合的第一个元素,然后从该更新消息负载中的路径集合中删除第一个元素,从选中的接口发送该更新消息;
步骤807:除步骤806中的控制器C1以外的其他控制器接收到该更新消息后,如果该更新消息的家乡节点ID中的控制器ID等于该控制器的控制器ID,则执行步骤809,否则执行步骤808;
步骤808:控制器接收到该更新消息后,选择一个接口,该接口的接口ID等于该更新消息负载中的路径集合的第一个元素,然后从该更新消息负载中的路径集合中删除第一个元素,从选中的接口发送该更新消息,执行步骤807;
步骤809:控制器查看映射表,如果存在一个映射表项,该映射表项的家乡节点ID等于更新消息中的家乡节点ID,则将该映射表项的临时节点ID更新为该更新消息中的临时节点ID;否则,该控制器创建一个映射表项,该映射表项的家乡节点ID等于更新消息中的家乡节点ID,临时节点ID等于该更新消息中的临时节点ID;
步骤810:结束;
在移动节点M1位于域O1中,域O1的控制器为C1,交换机SW1位于域O1内,移动节点M1与交换机SW1关联,移动节点M5位于域O5中,域O5的控制器为C5,交换器SW5位于域O5中,移动节点M5与交换机SW5关联的条件下,移动节点M1与移动节点M5通过下述过程实现通信:步骤901:开始;
步骤902:移动节点M1发送一条请求消息,该请求消息的负载为源地址和目的地址,源地址为移动节点M1的临时节点ID,目的地址为移动节点M5的家乡节点ID;交换机SW1接收到该请求消息后,查看控制器表项,将该控制器表项的路径集合加入到该更新消息的负载中,交换机SW1选择一个接口,该接口的接口ID等于该请求消息负载中的路径集合的第一个元素,然后从该请求消息负载中的路径集合中删除第一个元素,从选中的接口发送该请求消息;
步骤903:判断是交换机还是控制器C1接收到该更新消息,如果是交换机执行步骤904,否则执行步骤905;
步骤904:交换机接收到请求消息后,选择一个接口,该接口的接口ID等于该请求消息负载中的路径集合的第一个元素,然后从该请求消息负载中的路径集合中删除第一个元素,从选中的接口发送该请求消息,执行步骤903;
步骤905:控制器C1接收到请求消息后,查看控制器路由表,选择一个控制器路由表项,该控制器路由表项的控制器ID域值等于该请求消息的目的节点ID的控制器ID,控制器C1将该控制器路由表项的路径集合加入到该请求消息中,选择一个接口,该接口的接口ID等于该请求消息负载中的路径集合的第一个元素,然后从该请求消息负载中的路径集合中删除第一个元素,从选中的接口发送该请求消息;
步骤906:除步骤905中控制器C1以外的其他控制器接收到该请求消息后,如果它的控制器ID等于该请求消息中的目的节点ID的控制器ID,则执行步骤908,否则执行步骤907;
步骤907:控制器接收到该请求消息后,选择一个接口,该接口的接口ID等于该请求消息负载中的路径集合的第一个元素,然后从该请求消息负载中的路径集合中删除第一个元素,从选中的接口发送该请求消息,执行步骤906;
步骤908:控制器查看映射表,如果存在一个映射表项,该映射表项的家乡节点ID等于请求消息的目的节点ID,则执行步骤909,否则执行步骤910;
步骤909:控制器选择一个映射表项,该映射表项的家乡节点ID等于请求消息中的目的节点ID,控制器将该请求消息中的目的节点ID更新为该映射表项中的临时节点ID,该控制器查看控制器路由表,控制器选择一个控制器路由表项,该控制器路由表项的控制器ID域值等于该请求消息的目的节点ID的控制器ID,将该控制器路由表项的路径集合加入到该请求消息中,控制器选择一个接口,该接口的接口ID等于该请求消息负载中的路径集合的第一个元素,然后从该请求消息负载中的路径集合中删除第一个元素,从选中的接口发送该请求消息,执行步骤906;
步骤910:控制器查看路由表,选择一个路由表项,该路由表项的交换机ID域值等于该请求消息中的目的节点ID的交换机ID值,控制器将该路由表项的路径集合加入到该请求消息负载中,从与交换机相连的接口发送该请求消息;
步骤911:交换机接收到该请求消息后,如果该交换机的交换机ID等于该请求消息的目的节点ID的交换机ID,则执行步骤913,否则执行步骤912;
步骤912:交换机选择一个接口,该接口的接口ID等于该请求消息负载中的路径集合的第一个元素,然后从该请求消息负载中的路径集合中删除第一个元素,从选中的接口发送该请求消息,执行步骤911;
步骤913:交换机查看分配表,选择一个分配表项,该分配表项的节点ID等于该请求消息的目的节点ID,然后从该分配表项的接口ID域值所标识的接口发送该请求消息;移动节点M5接收到该请求消息后,发送一个响应消息,该响应消息包括源节点ID,目的节点ID以及响应数据,其中,源节点ID等于接收到的请求消息中的目的节点ID,目的节点ID等于接收到的请求消息中的源节点ID;与移动节点M5关联的交换机SW5接收到响应消息后,选择控制器路由表项,将该控制器路由表项的路径集合加入到该响应消息的负载中,交换机SW5选择一个接口,该接口的接口ID等于该响应消息负载中的路径集合的第一个元素,然后从该响应消息负载中的路径集合中删除第一个元素,从选中的接口发送该响应消息;
步骤914:控制器C5接收到响应消息后,查看控制器路由表,选择一个控制器路由表项,该控制器路由表项的控制器ID域等于该响应消息的目的节点ID的控制器ID,将该控制器路由表项的路径集合加入到该响应消息中,控制器C5选择一个接口,该接口的接口ID等于该响应消息负载中的路径集合的第一个元素,然后从该响应消息负载中的路径集合中删除第一个元素,从选中的接口发送该响应消息;
步骤915:除步骤914中的控制器C5以外的其他控制器接收到该响应消息后,如果该响应消息的目的节点ID的控制器ID等于该控制器的控制器ID,则执行步骤917,否则执行步骤
916;
步骤916:控制器选择一个接口,该接口的接口ID等于该响应消息负载中的路径集合的第一个元素,然后从该响应消息负载中的路径集合中删除第一个元素,从选中的接口发送该响应消息,执行步骤915;
步骤917:控制器查看路由表,选择一个路由表项,该路由表项的交换机ID域值等于该响应消息的目的节点ID的交换机ID,将该路由表项的路径集合加入到该响应消息负载中,从与交换机相连的接口发送该响应消息;
步骤918:交换机接收到该响应消息后,如果该响应消息的目的节点ID的交换机ID等于该交换机的交换机ID,则执行步骤920,否则执行步骤919;
步骤919:交换机选择一个接口,该接口的接口ID等于该响应消息负载中的路径集合的第一个元素,然后从该响应消息负载中的路径集合中删除第一个元素,从选中的接口发送该响应消息,执行步骤918;
步骤920:交换机查看分配表,选择一个分配表项,该分配表项的节点ID等于该响应消息的目的节点ID,然后从该分配表项的接口ID域值所标识的接口发送该响应消息;移动节点M1接收到该响应消息后,保存该响应消息中的数据;
步骤921:结束。