zoukankan      html  css  js  c++  java
  • 2020 SDN第三次上机实验

    实验3:Mininet实验——测量路径的损耗率

    一、实验目的

         在实验2的基础上进一步熟悉Mininet自定义拓扑脚本,以及与损耗率相关的设定;初步了解Mininet安装时自带的POX控制器脚本编写,测试路径损耗率

    二、试验任务

         h0向h1发送数据包,由于在Mininet脚本中设置了连接损耗率,在传输过程中会丢失一些包,本次实验的目的是展示如何通过控制器计算路径损耗速率(h0 → s0 → s1 → h1)。这里假设控制器预先知道网络拓扑。控制器将向 s0 和 s1 发送flow_stats_request,当控制器接收到来自 s0 的response时,将特定流的数据包数保存在 input_pkts中,当控制器接收到来自 s1的 response时,将接收到特定流的数据包数保存在 output_pkts中,差值就是丢失的数据包数量。
         基于上述拓扑,编写 Mininet脚本,设置特定的交换机间的路径损耗速率,然后编写 POX控制器脚本,实现对路径的损耗率的测量。

    三、实验步骤

    1.实验环境

         安装了Ubuntu 16.04.7 Desktop amd64的虚拟机

    2.实验过程

         (1)新建并编辑 pox 脚本flow_stat.py :

         在 pox 安装目录下(Mininet完整安装了 pox )执行以下命令运行 pox 脚本:

    $ ./pox.py flow_stat
    

         从第7行开始,程序让h0 ping h1 ,监测 s0和 s1之间的链路 。

    • 如果匹配到以太网类型的包头(0x0800),并且数据包的目的 IP 地址是 192.168.123.2(对照后面 Mininet 的脚本发现是 h1), 并且连接到控制器的数据平面设备 id 是 s0(h0 ping h1,链路 s0-s1 上数据包是从 s0 流向 s1,s0 为源,s1 为目的地), 执行 input_pkts = f.packet_count,把数据包数量存入input_pkts;
    • 同理,如果连接到控制器的数据平面设备 id 是 s1,执行 output_pkts = f.packet_count,把数据包数量存入 output_pkts
    • 最后求 input_pkts 和 output_pkts 的差值。一般情况下差值为正,说明链路上数据包有损耗

         (2)编辑 Mininet 脚本 mymininet3.py

         参照拓扑图,新建并编辑 Mininet 脚本 mymininet3.py,控制器因为安装在本机,
    所以需修改参考资料代码中的控制器地址为 127.0.0.1:6633.

    switch.cmd( 'ovs-vsctl set-controller dp0 tcp:127.0.0.1:6633' ) 
    switch1.cmd( 'ovs-vsctl set-controller dp1 tcp:127.0.0.1:6633' ) 
    

         设置 s0 和 s1 之间链路的丢包率为 0

    info( "*** Creating links
    " )     
    linkopts0=dict(bw=100, delay='1ms', loss=0)     
    linkopts1=dict(bw=100, delay='1ms', loss=0)     
    link0=TCLink( h0, switch, **linkopts0)     
    link1 = TCLink( switch, switch1, **linkopts1)          
    link2 = TCLink( h1, switch1, **linkopts0) 
    

         再执行命令运行Mininet脚本mymininet.py

    $ sudo python mymininet.py 
    

         Ping 默认是每 1 秒钟测一次,ping 的结果会显示一个丢包率,这里的丢包率是根据 ping 不通的次数占总次数的百分比计算得到的。上图中由于一共 ping 了 20次,每次都能通,所以丢包率是

         观察 pox 侧的实时状态更新发现平均丢包率为 0,结果符合 Mininet 脚本中设置的损耗率,也有可能出现负值,可以认为没有丢包。

         如果修改代码中 s0 和 s1 之间链路的丢包率为 10

     info( "*** Creating links
    " )     
     linkopts0=dict(bw=100, delay='1ms', loss=0)     
     linkopts1=dict(bw=100, delay='1ms', loss=10)     
     link0=TCLink( h0, switch, **linkopts0)     
     link1 = TCLink( switch, switch1, **linkopts1)          
     link2 = TCLink( h1, switch1, **linkopts0) 
    

         重新运行 Mininet 脚本 mymininet3.py,20 秒时间的 ping 过程中有 icmp_seq 为
    2/4/14/16/19/20 共 6 次 ping 不通,所以丢包率计算为 30%.

         POX 端重新测试,会发现出现丢包现象,但是实际测量出的丢包率会有浮动,链
    路的性能总体受到了限制。

    四、总结

    • 在pox 连接失败时,用ctrl + C结束进程,否则会出现已经建立链路无法重连,需要重新启动
    • 在mininet二次连接时会出现 File exist 的错误,需要使用sudo mn -c清除环境

    五、参考资料:

         SDNLAB实验 参考资料: https://www.sdnlab.com/15100.html

  • 相关阅读:
    Allegro PCB Design GXL (legacy) 使用slide无法将走线推挤到焊盘的原因
    OrCAD Capture CIS 16.6 导出BOM
    Altium Designer (17.0) 打印输出指定的层
    Allegro PCB Design GXL (legacy) 将指定的层导出为DXF
    Allegro PCB Design GXL (legacy) 设置十字大光标
    Allegro PCB Design GXL (legacy) 手动更改元器件引脚的网络
    magento产品导入时需要注意的事项
    magento url rewrite
    验证台湾同胞身份证信息
    IE8对css文件的限制
  • 原文地址:https://www.cnblogs.com/Limerence-C/p/13681049.html
Copyright © 2011-2022 走看看