Test connectivity between hosts
验证h1可以ping通h2
h1 ping h2 -c 1

现在第一主机知道的第二个IP地址,并且可以通过ICMP ping 来回显请求
重复前一条命令
这次 ping 的时间将比第一次低的多, A flow entry covering ICMP ping traffic was previously installed in the switch, so no control traffic was generated, and the packets immediately pass through the switch.
使用
pingall
命令可以让每一个节点直接都产生上面的效果。
Run a simple web server and client
我们不单可以在主机上面运行ping命令,每一条 Linux下的命令或者程序都可以在 Mininet 中运行:
接下来,尝试开始于h1启动一个简单的HTTP服务器上,然后从h2发出请求,最后关闭Web服务器:
h1 python -m SimpleHTTPServer 80 &
h2 wget h1
h1 kill %python
退出mininet交互命令:
mininet>exit
如果mininet出于某种原因崩溃,可以用下面命令来清理:
sudo mn -c
Part 2: 高级选项Advanced Startup Options
回归测试Run a Regression Test
Mininet 可以用于直接运行回归测试,不一定要切换到他的 CLI 下面。
运行回归测试:
sudo mn --test pingpair
这条命令会创建一个小的拓扑结构,然后启动 OpenFLow 的控制器,然后跑 ping 测试,最后再把拓扑结构跟控制器关掉。
还有一直常用的测试是iperf(完成这个测试大概需要10s 钟):
sudo mn --test iperf
此命令创建的相同Mininet,并在其中一台 host 上面跑 iperf server, 然后在另外一台 host 上面运行iperf client 然后解析取得带宽情况。
更改拓扑结构大小和类型 Changing Topology Size and Type
Mininet 默认的拓扑结构是由两台 host 以及一台交换机组成的,你可以用–topo参数来更改拓扑结构。
假设你要在一个交换机与三台 host 之间做 ping 探测验证(verify all-pairs ping connectivity)。
运行回归测试:
sudo mn --test pingall --topo single,3
另一个例子中,使用线性拓扑(其中每个交换机配有一个主机,并且所有的交换机连接在一起):
sudo mn --test pingall --topo linear,4
链路变化 Link variations
Mininet2.0允许你设置连接参数,甚至可以通过命令行实现自动化设置:
$ sudo mn --link tc,bw=10,delay=10ms
mininet> iperf
mininet> h1 ping -c10 h2
上面的设置每两个节点之间的延迟是10ms,因为 ICMP 请求传过了两条链路(一次是到大交换机,一次到达主机),往返时间(RRT)就应该是40ms。
你还可以使用 PythonAPI 来做更多的事儿,不过现在我们先继续往下演练。
调整输出信息Adjustable Verbosity
Mininet默认输出信息的级别是 Info,Info级别会输出 Mininet的详细信息。
我们也可以通过 -v参数来设置输出DEBUG信息。
$ sudo mn -v debug
mininet> exit
这样会打印出更多额外的细节。现在尝试一下output参数,这样可以在 CLI 中打印更少的信息。
$ sudo mn -v output
mininet> exit
除了上面的几个级别,还有其他的级别可以使用,比如warning等
Custom Topologies自定义拓扑结构
在custom/topo-2sw-2host.py中是一个例子可以拿来参考,我们可以看到通过 PythonAPI 我们可以很简单的来定义拓扑结构。
这个例子直接连接两台交换机,每个交换机带有一台主机。
我们提供一个自定义的mininet 文件,就可以创建新的拓扑结构、交换机类型。
我们在命令行里面测试一下:
ID= MAC
默认情况下,host 的 mac 地址是随机分配的。这会导致每次 mininet 创建的时候,MAC地址都会改变,这会给调试带来一些困难
–mac参数可以解决上面的问题,例子如下:
之前:
$ sudo mn
mininet> h1 ifconfig
使用–mac参数:
$ sudo mn --mac
mininet> h1 ifconfig
XTerm Display xterm屏显
为了方便更复杂的调试工作,可以使用 mininet 的 xterms
可以通过x选项来给每一个 host 与交换机启动一个xterm。
sudo mn -x
后一秒钟,在xterm终端会弹出,并且具有自动设置窗口的名称(h1,h2…)。
或者,您也可以用下面的方式打开更多的xterm。
默认情况下,仅仅 host 需要一个namespace,而交换机的窗口则不用(与政策的终端类似)
but can be a convenient place to run and leave up switch debug commands, such as flow counter dumps.
在你想看到交互命令的时候,xterm 很有用,但是如果你仅仅想看到输出信息,那你可能想停掉 xterm
例如:
在switch: s1 (root)的 xterm下面运行:
dpctl dump-flows tcp:127.0.0.1:6634
因为交换机中没有数据流量,所以不会有信息输出。
To use dpctl with other switches, start up mininet in verbose mode and look at the passive listening ports for the switches when they’re created.
现在,在host: h1的xterm中运行:
# ping 10.0.0.2
回到s1的 xterm中查看:
# dpctl dump-flows tcp:127.0.0.1:6634
现在就可以看见数据流了。
另外我们可以直接用dpctl命令直接调用 Mininet CLI 里面的命令,而不需要启动任何xterm或者指定交换机的IP 跟端口。
我们看已通过ifconfig命令来判断xterm 是否在root的名字空间下,如果所有的网卡都显示出来(包含eth0),那他就是在root下。
Other Switch Types 其他类型的交换机
我们可以使用不同的交换机类型。例如:运行 user-space 交换机:
$ sudo mn --switch user --test iperf
值得注意的是这种交换机下,带宽相比于前面的内核态交换机要小的多。
如果做 ping 探测,也会有更高的延迟,这是因为现在的数据包需要从内核态转换到用户空间,消耗了更多的资源。
另一方面,用户空间的交换机会有一些新功能,如果交换机的性能不是关键问题是的时候。
在 Mininet 虚拟机中预装了另外一个交换机类型是 Open vSwitch(OVS),在iperf测试中,带宽会比内核态交换机更大。
$ sudo mn --switch ovsk --test iperf
Mininet Benchmark
To record the time to set up and tear down a topology, use test ‘none’:
$ sudo mn --test none
Everything in its own Namespace (user switch only)
默认情况下,主机都放在自己的命名空间,
而交换机和控制器的root命名空间。
我们可以通过–innamespace参数来把交换机放在自己的名字空间中。
$ sudo mn --innamespace --switch user
Instead of using loopback, the switches will talk to the controller through a separately bridged control connection.
就其本身而言,这个选项是没有多大用处的,但它确实提供了如何分离不同交换机的例子。