基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

一、实验内容

内容:基于于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

具体要求:

1、在链路故障后,使用最短路径算法来选取新的传输路径。

2、在网络中所有链路均正常的情况下,h1到h2的传输路径为h1às1às4às5àh2。假设此时s1às2的链路发生故障断开连接,那么此时路径h1às1às4às5àh2便不再可行。为了保证主机h1和h2之间的正常通信需要查找新的路径,在链路故障发生时,实现主机之间通过新的路径传输数据。当s1和s4之间断开连接时,h1和h2会及时发现链路故障,同时及时查找出新的路径h1às1às4às5àh2,通过新路径传输数据。

二、实验流程

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

三、实验步骤

1.网络拓扑搭建


基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

运行结果:

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

2.启动RYU

添加有关链路故障恢复功能的函数,包括删除交换机流表项和获取端口信息两个函数:

defdelete_flow(self, src_ip=None, src_port=None, dst_ip=None, dst_port=None, datapath =None):

        ofproto = datapath.ofproto

        parser = datapath.ofproto_parser

        inst =[parser.OFPInstructionActions(ofproto.OFPFC_APPLY_ACTIONS,actions)]

    mod = parser.OFPFlowMod(datapath=datapath,out_port=dst_port,

                    out_group=ofproto.OFPG_ANY,

                                    command=ofproto.OFPFC_DELETE,

                                    match=None,instructions=inst)

        datapath.send_msg(mod)

@set_ev_cls(ofp_event.EventOFPPortStatus,[CONFIG_DISPATCHER, MAIN_DISPATCHER, DEAD_DISPATCHER, HANDSHAKE_DISPATCHER])

 

    defget_OFPPortStatus_msg(self, ev):

        msg=ev.msg

        datapath=ev.msg.datapath

    dpid = msg.datapath.id

        ofproto=datapath.ofproto

        parser=datapath.ofproto_parser

    port=msg.desc.port_no

        #key1 = (dpid, port)

    #dpidPort_to_ip=self.network_monitor.DpidPort_to_ip[key1]

    reason=msg.reason

        if reason==ofproto.OFPPR_MODIFY:

        self.delete_flow(datapath=datapath,dst_port=port)

对于delete_flow函数,功能为删除交换机的流表项。调用RYU自带的parser.OFPFlowMod函数,对比add_flow函数,最主要的差别即为将内部的变量command变成ofproto.OFPFC_DELETE,代表流表删除。

对于get_OFPPortStatus_msg(self,ev)函数,功能为获取端口信息,一旦发生链路故障,获取发生故障的交换机的端口信息,然后调用delete_flow函数,删除这些交换机的流表信息。

运行结果:

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

3.分别h1 ping h2h2 ping h1

结果:均可ping通。当h1 ping h2时,路径为s1às4às5path含义:从switch1的1端口进,从switch1的3端口出,从switch4的1端口进,从switch4的2端口出,从switch5的2端口进,从switch5的3端口出。同理,h2 ping h1的路径为s5às4às1,均为最短路径。

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。


基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

4.重新进行h1 ping h2,并在ping的过程中手动断开switch1switch4的连接

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

基于北向API开发一个简单的应用,实现网络拓扑中最短路径的查找,并开发应用实现基于SDN网络的链路故障恢复功能。

最初,传输路径为s1às4às5,当s1与s4断开,即网络传输路径发生链路故障,则流量传输路径变成了s1às2às3às5,也可看到客户端h1一直在发送数据,服务端h2也一直在接收数据。