zoukankan      html  css  js  c++  java
  • [SDN] mininet walkthrough

    本次学习使用的是mininet的VM-image,所以安装过程就先忽略掉了,主要学习使用方法。

    同时完成了在虚拟机上配置minient和Wireshark, 可以直接在虚拟机上操作.

    1. Everyday mininet usage

    1.1 Display Startup Options

    使用

    sudo mn -h
    

    获取相关帮助信息:

    1.2 启动wireshark

    是启动wireshark,这里就有问题了,对于mininet提供的VM来说,并不具有图形界面,无法启动wireshark,是不是要重新装一个带wireshark和mininet的虚拟机呢?

    如果采用ssh -X -v的方法进行连接,因为Mac上的X11配置也是有问题的,所以也不成功。这个步骤暂时无法完成。

    1.3 Interact with host and switches

    使用 sudo mn 启动mininet ,默认的拓扑结构是最小化的结构,包括一个交换机和两个hosts,加上一个控制器。也可以用 sudo mn --topo=minimal 来实现这个结构,可以在 -h 菜单中详细查看。

    在 mininet 中的交互式解释器中,可以有几种命令,VIDEO

    • help
    • nodes
    • net
    • dump

    在host上执行命令:h1 ifconfig -a :

    ifconfig

    这里的h1-eth0 是不能在这个primary-linux-system中看到的,因为它只是h1这个虚拟的host上执行的结果。

    交换机上也可以执行ifconfigs1 ifconfig -a :发现有很多网卡,这里面还包括了 **primary-linux-sytstem **中的eth0:

    在s1 和 h1 上运行命令 arp

    发现s1 上面的2条arp是eth0的,h1 没有arp 记录。

    把所有host,交换机,控制器放在独立的网络命名空间中是有可能的,但是这样做没什么优势。 这句话没怎么明白。

    只有网络是虚拟的,每个host进程ps 的输出都是一样的。

    1.4 Test connectivity between hosts

    h1 ping h2: h1 ping -c 1 h2:

    这个时候又可以看到 openflow control traffic了,还是考虑搞一个可以运行wireashark 的环境,学习起来比较直接。

    Mon Nov 7 14:08:15 2016 现在这个环境已经可以使用了,重新实现一下这个试试:

    抓包数据,h1和 h2 的 MAC地址如下:

    mac_address

    然后是wireshark的数据包顺序:

    顺便还可以发现,h1 的 arp 列表中出现了 h2 ,h2 的 arp列表中也出现了对方:

    arps

    注意,第一次ping 的时间比后面 ping 的时间要长不少:

    ping -c 4

    原因是,因为第一次ping 的时候,产生了 control traffic, 但是在之后就不产生了(自己的理解:控制器告诉了 switch还是host 该怎么处理这类数据),所以这种数据就直接被发出了,所以时间减少。

    直接使用命令 pingall 可以检查主机之间的连通性,更为方便。

    pingall

    1.5 Run a simple web server and client

    在host上面不只只能用ping,mininet可以让host执行任何primary-linux-system中存在的命令。下面,在h1上开启一个简单的http服务器,并让h2发出http请求:

    HTTP-200-OK

    使用 exit 退出 mininet:

    2. Advanced Startup Options

    2.1 回归测试

    不用进入CLI,也可以让mininet进行回归测试(什么是regression test?):

    测试结果会告诉时间:

    另外一种测试方法是通过ipref测试网络性能,在一台主机上建立ipref服务器,在另一台上建立ipref客户点,来获得带宽数据,但是在我的环境中出现了caught expection ,貌似做不成功?:

    问题已发现:拼写错误:iperf:

    test-iperf

    2.2 Changing topology size and type

    默认拓扑图是一个交换机连接两个主机,可以使用--topo 参数改变这个拓扑图。比如说测试1个交换机和3个主机这个网络的连通性:

    sudo mn --test pingall --topo single,3

    另一个例子:a linear topology,每个交换机连接一个主机,所有交换机连城一个直线:

    连接差异化。

    mininet允许你设置连接参数,可以通过命令行直接自动配置:

    sudo mn --link tc,bw=10,delay=10ms

    注意终端中输出了10ms delay,然后执行命令 iperf

    iperf

    发现这里测出来的带宽比上面没有delay = 10ms 的时候要低不少。

    10

    除了第一个包的时间长,因为上面提到过第一个包要发给控制器来问控制器怎么转发,后面的包就是稳定在40ms左右。(40 = 2 * (10 + 10) ),40是因为 two links comming back.

    可以定制每条link的延时,可以使用mininet Python API,但是现在还不着急先看这个。

    2.4 Adjustable verbosity

    默认的 verbosity 等级是 info ,也可以换成debug,这个就比较啰嗦:

    以及 -v output

    2.5 Custom topologies

    定制拓扑结构,使用Python API 可以轻松定义拓扑结构,例子在目录in custom/topo-2sw-2host.py里面,link

    使用命令sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test pingall 来加载该拓扑配置,至于API的使用,以后再学习都可以。

    2.6 ID == MAC

    使用sudo mn --mac之后:

    mac地址就是id。

    2.7 Xterm

    该启动方式就是给每一个网络的组件开一个图形化终端, 在你的电脑屏幕上:

    可以分别去操作每个终端, 在需要仔细调试的时候比较有用.

    默认情况下, 只有主机是放在不同的命名空间下的; 给交换机分配一个终端是没有必要的, 但是这是一个执行和交换机调试语句的好地方, 比如 flow counter dumps.

    xterms 还在执行交互式命令的时候很有帮助, 尤其是你需要取消终止命令的时候, 或者是你需要看输出的时候.

    比如说: 在 switch s1 中, 执行

    # dpctl dump-flows tcp:127.0.0.1:6634

    (不会打印任何东西, 因为叫环节没有添加任何流.) 执行失败...原因未知

    在mininet 的 CLI 中执行exit 会退出上面的所有窗口.

    2.8 Other Switch Types

    可以使用其他交换机类型, 比如说 user-space switch :

    $ sudo mn --switch user --test iperf

    会发现带宽会低不少:

    Ping 测试也会发现延迟增加了, 因为现在的数据包必须经过内核到用户空间的转换.

    另一方面,用户空间交换机可以是实现新功能的一个很好的起点,特别是在软件性能不是关键的情况下。

    另一个示例开关类型是Open vSwitch(OVS),它预先安装在Mininet VM上。 iperf报告的TCP带宽应该类似于OpenFlow内核模块,并且可能更快:

    2.9 Everything in its own Namespace (user switch only)

    默认情况下,主机放在自己的命名空间中,而交换机和控制器在根命名空间中。 要将开关放在自己的命名空间中,请传递--namespace选项:

    $ sudo mn --innamespace --switch user

    交换机将通过单独桥接的控制连接, 代替使用环回, 与控制器通信。 这个选项本身不是非常有用,但它提供了一个如何隔离不同的交换机的例子。

    3. Mininet CLI Commands

    3.1 Display Options

    使用help命令来列出所有可以输入的命令, 这个我们已经会了.

    3.2 Python Interpreter

    如果Mininiet命令行上的第一个短语是py,那么使用Python执行该命令。 这可能有助于扩展Mininet,以及探测其内部工作。 每个主机,交换机和控制器都有一个关联的Node对象。

    打印本地变量:

    使用dir函数可以对节点有效, py dir(s1):

    dir

    还可以单独打印某些变量:

    py h1.IP()

    IP

    链接或断开操作可以有助于容错测试.

    mininet> link s1 h1 down
    
    mininet> link s1 h1 up
    

    3.3 Xterm Display

    mininet> xterm h1 h2, 用来展示h1 和 h2 的 xterm.

  • 相关阅读:
    【洛谷P2967】【USACO 2009 Dec】电子游戏 Video Game Troubles
    2021-09-11 刷题 39. 组合总和
    2021-09-10 刷题 160. 相交链表
    2021-09-09 刷题 141. 环形链表
    2021-09-08 刷题 20. 有效的括号
    2021-09-07 刷题 119杨辉三角2
    2021-08-01 刷题 合并两个有序链表
    2021-07-31 leetcode刷题记录 两数之和
    根据需要数据库的内容,封装增删改查的sql函数
    QT 对XML 文件进行增删改查
  • 原文地址:https://www.cnblogs.com/guoyunzhe/p/6056832.html
Copyright © 2011-2022 走看看