1.一种基于区块链技术的分布式SDN同步方法,其特征在于,在分布式的SDN环境中,让每一个交换机连接超过3f+1个控制器,然后按照如下方法进行同步:SYN阶段,即主节点发送同步SYN数据给其他节点;
SYN-ACK阶段,即其他节点接收到同步SYN数据,并检查同步SYN数据的正确性,若正确则发送确认ACK消息;
FIN阶段,即当主节点接收到其他节点发送的接收到同步SYN数据的确认ACK消息,检查该消息的正确性,若正确则保存该消息;若接收到超过f+1个节点的该消息,则将该接收到的超过f+1个节点的该消息作为FIN信息的数据部分,并将FIN信息发送给其他节点;
FIN-ACK阶段,其他节点接收到FIN信息后,检查其正确性,若正确则将该接收到的FIN信息的数据部分取出并依次检查数据部分中每个确认ACK消息,若所有确认ACK消息正确,则回复一个关于FIN信息的确认ACK消息给主节点,完成同步;
若节点在发送关于同步SYN数据的确认ACK消息后一段时间未收到FIN信息、或者收到的FIN信息的数据部分中的确认ACK消息数量不足f+1、或者收到的FIN信息的数据部分有错误,则触发副主节点协议,副主节点协议包括:确定一个节点为副主节点;收到主节点发送的同步SYN数据的节点将同步SYN数据放置在前同步PRE‑SYN数据消息中,并发给副主节点;
副主节点若之前收到主节点发送的同步消息,则将收到的同步消息作为同步SYN数据发送给其他节点,并忽略掉其他节点发送的前同步PRE‑SYN数据消息;否则将其他节点发送的前同步PRE‑SYN数据消息作为同步SYN数据发送给其他节点;
若该副主节点为恶意节点,并在FIN阶段和FIN-ACK阶段作恶,则重新选择副主节点,直到选出的副主节点能够完成数据同步;
完成同步后,没有完成同步的节点将被降低可信度,并将副主节点释放为原来的状态。
2.根据权利要求1所述的一种基于区块链技术的分布式SDN同步方法,其特征在于,每个节点为其他节点发送的同步SYN数据设定一个计时器,若计时器结束未收到FIN信息,则开启副主节点协议。
3.根据权利要求1所述的一种基于区块链技术的分布式SDN同步方法,其特征在于,副主节点的选择包括:比较节点的可信度,可信度最大的作为副主节点;
若节点可信度一样,将当选副主节点次数较少的节点作为副主节点;
若节点当选副主节点的次数一样,则将负载小的作为副主节点;
若节点负载一样,则将节点的唯一标识uid较小的作为副主节点。
4.根据权利要求1所述的一种基于区块链技术的分布式SDN同步方法,其特征在于,SDN网络初期,每个节点都需要发送同步消息,若节点不发送同步消息则直接将这个节点删掉;后续的同步为触发性更新,即当有节点发现交换机的链路down、端口down、主机down、负载较之前数倍,则会发送同步SYN数据;由于节点对于其他节点下的交换机的连接状态为slave,即可以收到除了packetout包外的数据包,如果节点不发送有关于这些消息的同步消息,则取缔该节点;当节点下发流表时,其他的节点会去查询,如果其他节点发现流表不对,则取缔该节点;其中slave表示控制器对于交换机只有只读权利。
5.根据权利要求1所述的一种基于区块链技术的分布式SDN同步方法,其特征在于,每个节点为其他节点维持一个存活计时器,若节点A收到节点B的保活消息时,将节点B的存活计时器重置,若节点A在存活计时器结束还没收到节点B的保活消息,则节点A将节点B视为不可用节点,将不可用的节点从交换机层面删除。
6.根据权利要求1所述的一种基于区块链技术的分布式SDN同步方法,其特征在于,在同步过程中,让每个交换机连接超过3f+1个控制器,若有f+1个节点认为某一个节点为不可用节点,且该被认为不可用的节点对其管理的交换机的连接状态为master,则这f+1个节点与交换机的连接状态改为equal;
在master状态下,控制器对于交换机拥有读写权限,交换机只能和某一个控制器的连接状态为master;在equal状态下,控制器对于交换机拥有读写权限,交换机能与多个控制器的连接状态为equal。
7.根据权利要求6所述的一种基于区块链技术的分布式SDN同步方法,其特征在于,当交换机的连接管理器的结构体与其管理的控制器中,与超过f+1个控制器的ofconn结构体连接状态为equal时,交换机切断与连接状态为master的控制器的连接。
8.根据权利要求6所述的一种基于区块链技术的分布式SDN同步方法,其特征在于,若交换机检测到与之连接的控制器中,有一个控制器与该交换机的连接状态为master且与该交换机连接的连接状态为equal的控制器的数量不超过f+1时,与该交换机连接状态为equal的控制器的权限为只读。
9.根据权利要求1所述的基于区块链技术的分布式SDN同步方法,其特征在于,节点之间发送的消息的格式为{state,uid,time,privatekeyhash,miwenhash,publickey},其中,state表示当前状态,当值为1时,表示正常的同步,当值为2时,表示正在使用副主节点协议,当值为3时,表示正在发送删除恶意节点的状态;uid为当前节点的唯一标识;time表示当前发送的消息的产生时间;privatekeyhash表示非对称算法的私钥hash;miwenhash包括使用对称密钥加密的密文数据以及非对称密钥加密的对称密钥;publickey表示非对称算法的公钥。