zoukankan      html  css  js  c++  java
  • 实验5:开源控制器实践——POX

    实验5:开源控制器实践——POX

    forwarding.hub模块

    h1 ping h2时,h3处同样收到icmp报文

    image-20211006180714469

    h1 ping h3时,h2处同样收到icmp报文

    image-20211006180748171

    由于hub模块采用洪泛转发,所以在ping特定主机时,交换机会向所有端口洪泛转发,故可以在另一台主机处也会收到icmp报文。

    forwarding.l2_learning

    h1 ping h2时,h2处收到icmp报文,h3处则没有

    image-20211006180859172

    h1 ping h3时,h3处收到icmp报文,h2处则没有

    image-20211006180947859

    可以看到,交换机对进来的包进行了学习,所以从相应的端口发出,故只有目的主机可以抓取到报文

    L2_learning模块程序流程图

    image-20211008110643643

    进阶要求

    创建拓扑,并删除流表,使得所有主机无法ping通

    image-20211007132910591

    创建文件SendFlowInSingle3.py

    from pox.core import core
    import pox.openflow.libopenflow_01 as of
    from pox.openflow.of_json import *
    
    
    def _handle_ConnectionUp(event):
        msg = of.ofp_flow_mod()
        msg.priority = 1
        msg.match.in_port = 1
        msg.actions.append(of.ofp_action_output(port=2))
        msg.actions.append(of.ofp_action_output(port=3))
        event.connection.send(msg)
    
        msg = of.ofp_flow_mod()
        msg.priority = 1
        msg.match.in_port = 2
        msg.actions.append(of.ofp_action_output(port=1))
        msg.actions.append(of.ofp_action_output(port=3))
        event.connection.send(msg)
    
        msg = of.ofp_flow_mod()
        msg.priority = 1
        msg.match.in_port = 3
        msg.actions.append(of.ofp_action_output(port=1))
        msg.actions.append(of.ofp_action_output(port=2))
        event.connection.send(msg)
    
    
    def launch():
        core.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp)
    

    命令行输入./pox.py SendFlowInSingle3

    查看流表,并测试pingall

    image-20211008101855762

    看到流表下发成功,以及所有节点ping通,没有出现丢包

    总结

    本次作业难度较以往提升,一个是需要学习POX控制器,另外是需要对流表有一定的熟悉。本次实验遇到了两个难题,如下:

    • 在使用POX组件进行流表下发时,发现无法下发流表,询问同学之后了解到在生成拓扑时,需要指定openflow协议为1.0,才可以成功下发流表,但是一开始使用miniedit进行拓扑搭建时,又遇到POX端口冲突的情况。
    • 在编写代码进行流表下发时,按照老师pdf的通过匹配目的IP,进行流表下发,但是之后遇到问题,拓扑还是无法ping通。怀疑问题在于arp报文没有洪泛转发,但是不了解如何进行流表下发,使得arp报文可以进行洪泛转发。最后直接编写代码,分别将交换机三个端口输入的包向其他两个端口发送出去,使得拓扑可以ping通。

    经过本次实验,发现自己对于流表的了解还不够,之后还需再多阅读相关材料,进行学习。

  • 相关阅读:
    python之enumerate枚举 第二篇(六):enumerate枚举
    git使用学习
    Git安装
    eclipse对项目整理分类
    Java基础学习总结——Java对象的序列化和反序列化
    工作代码实例
    substring与substr
    第一个jave程序-helloworld
    UI自动化
    sikuli实例
  • 原文地址:https://www.cnblogs.com/JoshuaYu/p/15378888.html
Copyright © 2011-2022 走看看