天天看点

Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

Test connectivity between hosts

验证h1可以ping通h2

h1 ping h2 -c 1
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

现在第一主机知道的第二个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中的命令解析二Part 2: 高级选项Advanced Startup Options

退出mininet交互命令:

mininet>exit

如果mininet出于某种原因崩溃,可以用下面命令来清理:

sudo mn -c

Part 2: 高级选项Advanced Startup Options

回归测试Run a Regression Test

Mininet 可以用于直接运行回归测试,不一定要切换到他的 CLI 下面。

运行回归测试:

sudo mn --test pingpair
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

这条命令会创建一个小的拓扑结构,然后启动 OpenFLow 的控制器,然后跑 ping 测试,最后再把拓扑结构跟控制器关掉。

还有一直常用的测试是iperf(完成这个测试大概需要10s 钟):

sudo mn --test iperf
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

此命令创建的相同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
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

另一个例子中,使用线性拓扑(其中每个交换机配有一个主机,并且所有的交换机连接在一起):

sudo mn --test pingall --topo linear,4
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

链路变化 Link variations

Mininet2.0允许你设置连接参数,甚至可以通过命令行实现自动化设置:

$ sudo mn --link tc,bw=10,delay=10ms
mininet> iperf
mininet> h1 ping -c10 h2
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

上面的设置每两个节点之间的延迟是10ms,因为 ICMP 请求传过了两条链路(一次是到大交换机,一次到达主机),往返时间(RRT)就应该是40ms。

你还可以使用 PythonAPI 来做更多的事儿,不过现在我们先继续往下演练。

调整输出信息Adjustable Verbosity

Mininet默认输出信息的级别是 Info,Info级别会输出 Mininet的详细信息。

我们也可以通过 -v参数来设置输出DEBUG信息。

$ sudo mn -v debug
mininet> exit
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

这样会打印出更多额外的细节。现在尝试一下output参数,这样可以在 CLI 中打印更少的信息。

$ sudo mn -v output
mininet> exit
           

除了上面的几个级别,还有其他的级别可以使用,比如warning等

Custom Topologies自定义拓扑结构

在custom/topo-2sw-2host.py中是一个例子可以拿来参考,我们可以看到通过 PythonAPI 我们可以很简单的来定义拓扑结构。

这个例子直接连接两台交换机,每个交换机带有一台主机。

Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

我们提供一个自定义的mininet 文件,就可以创建新的拓扑结构、交换机类型。

我们在命令行里面测试一下:

Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

ID= MAC

默认情况下,host 的 mac 地址是随机分配的。这会导致每次 mininet 创建的时候,MAC地址都会改变,这会给调试带来一些困难

–mac参数可以解决上面的问题,例子如下:

之前:

$ sudo mn
mininet> h1 ifconfig
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

使用–mac参数:

$ sudo mn --mac
mininet> h1 ifconfig
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

XTerm Display xterm屏显

为了方便更复杂的调试工作,可以使用 mininet 的 xterms

可以通过x选项来给每一个 host 与交换机启动一个xterm。

sudo mn -x
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

后一秒钟,在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
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

因为交换机中没有数据流量,所以不会有信息输出。

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
           
Mininet中的命令解析二Part 2: 高级选项Advanced Startup Options

回到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.

就其本身而言,这个选项是没有多大用处的,但它确实提供了如何分离不同交换机的例子。