mininet安装_谷歌翻译的mininet教程

第1部分:日常Mininet使用
首先,此演练的命令语法(可能很明显)说明:

  • $ 先于应在shell提示符下键入的Linux命令
  • mininet> 先于应在Mininet的CLI上键入的Mininet命令,
  • # 先于在root shell提示符下键入的Linux命令

在每种情况下,您都只应在提示符右侧键入命令(然后按return,当然!)。显示启动选项
让我们开始使用Mininet的启动选项。
键入以下命令以显示描述Mininet的启动选项的帮助消息:$ sudo mn -h
本演练将涵盖列出的大多数选项的典型用法。启动Wireshark(在另一个shell窗口)
要使用OpenFlow Wireshark解剖器查看控制流量,请先在后台打开Wireshark:$ sudo wireshark &
在“ Wireshark”过滤器框中,输入此过滤器,然后单击Applyof
在Wireshark中,单击“捕获”,然后单击“接口”,然后在回送接口(lo)上选择“启动” 。
目前,主窗口中不应显示任何OpenFlow数据包。注意:默认情况下,Wireshark安装在Mininet VM映像中。如果您使用的系统未安装Wireshark和OpenFlow插件,则可以使用Mininet的install.sh脚本安装这两个系统,如下所示:$ cd ~ $ git clone https://github.com/mininet/mininet # if it's not already there $ mininet/util/install.sh -w
如果安装了Wireshark,但您无法运行它(例如,出现诸如的错误 $DISPLAY not set,请查阅FAQ:https : //github.com/mininet/mininet/wiki/FAQ#wiki-x11-forwarding。)
正确设置X11将使您能够运行其他GUI程序和xterm终端仿真器,这些功能将在本演练的稍后部分中使用。与主机和交换机交互
启动最小拓扑并输入CLI:$ sudo mn
默认拓扑是minimal拓扑,它包括一个连接到两个主机的OpenFlow内核交换机,以及OpenFlow参考控制器。也可以在命令行上使用指定此拓扑--topo=minimal。其他拓扑也可以直接使用。请参阅的--topo输出部分mn -h
现在,所有四个实体(2个主机进程,1个切换进程,1个基本控制器)都在VM中运行。控制器可以在VM外部,其说明在底部。
如果没有通过特定的测试作为参数,则会显示Mininet CLI。
在Wireshark窗口中,您应该看到内核交换机已连接到参考控制器。
显示Mininet CLI命令:mininet> help
显示节点:mininet> nodes
显示链接:mininet> net
转储有关所有节点的信息:mininet> dump
您应该看到列出的交换机和两台主机。
如果在Mininet CLI中键入的第一个字符串是主机名,交换机名或控制器名,则命令将在该节点上执行。在主机进程上运行命令:mininet> h1 ifconfig -a
您应该看到主机h1-eth0和loopback(lo)接口。请注意,h1-eth0主Linux系统在ifconfig运行时看不到该接口(),因为它特定于主机进程的网络名称空间。
相反,默认情况下,交换机在根网络名称空间中运行,因此在“交换机”上运行命令与从常规终端运行命令相同:mininet> s1 ifconfig -a
这将显示交换机接口以及VM的连接输出(eth0)。
对于突出显示的主机已经分离的网络状态,运行其它实例arproute在两个s1h1
可以将每个主机,交换机和控制器放置在其自己的隔离网络名称空间中,但是这样做并没有真正的优势,除非您要复制复杂的多控制器网络。Mininet确实支持这一点。见--innamespace选项。
请注意,只有网络是虚拟的。每个主机进程都具有相同的进程和目录集。例如,从主机进程中打印进程列表:mininet> h1 ps -a
这应该与根网络名称空间所看到的完全相同:mininet> s1 ps -a
可以在Linux容器中使用单独的进程空间,但是当前Mininet并没有这样做。拥有一切运行中的“根”的过程命名为便于调试,因为它允许您使用的是看所有从控制台的过程中pskill测试主机之间的连接
现在,确认您可以从主机0 ping到主机1:mininet> h1 ping -c 1 h2
如果稍后在命令中出现带有节点名称的字符串,则该节点名称将被其IP地址替换;这发生在h2。
您应该看到OpenFlow控制流量。第一个主机的ARP为第二个主机的MAC地址,这导致packet_in消息发送到控制器。然后,控制器发送一条packet_out消息,将广播数据包泛洪到交换机上的其他端口(在此示例中,是唯一的其他数据端口)。第二台主机看到ARP请求并发送答复。该答复到达控制器,控制器将其发送到第一台主机并下推流条目。
现在,第一个主机知道第二个主机的MAC地址,并且可以通过ICMP回显请求发送其ping。该请求以及来自第二个主机的相应答复均进入控制器,并导致流条目被下推(以及实际的数据包被发送出去)。
重复最后一个pingmininet> h1 ping -c 1 h2ping第二次尝试的时间应该更少(<100us)。ping先前在交换机中安装了覆盖ICMP 流量的流条目,因此没有生成控制流量,并且数据包立即通过交换机。
运行此测试的一种更简单的方法是使用Mininet CLI内置pingall命令,该命令执行全对操作pingmininet> pingall运行一个简单的Web服务器和客户端
请记住,这ping不是您可以在主机上运行的唯一命令!Mininet主机可以运行基础Linux系统(或VM)及其文件系统可用的任何命令或应用程序。您也可以输入任何bash命令,包括作业控制(&jobskill,等。)
接下来,尝试在上启动一个简单的HTTP服务器h1,从发出请求h2,然后关闭Web服务器:mininet> h1 python -m SimpleHTTPServer 80 & mininet> h2 wget -O - h1 ... mininet> h1 kill %python
退出CLI:mininet> exit清理
如果Mininet由于某种原因崩溃,请清理它:$ sudo mn -c第2部分:高级启动选项运行回归测试
您无需进入CLI;Mininet也可以用于运行自包含的回归测试。
运行回归测试:$ sudo mn --test pingpair
该命令创建了最小的拓扑,启动了OpenFlow参考控制器,进行了全对ping测试,并拆除了拓扑和控制器。
另一个有用的测试是iperf(给它大约10秒钟才能完成):$ sudo mn --test iperf
此命令创建相同的Mininet,在一台主机上运行一台iperf服务器,在第二台主机上运行一台iperf客户端,并解析所获得的带宽。更改拓扑的大小和类型
默认拓扑是连接到两个主机的单个交换机。您可以使用将其更改为其他拓扑--topo,并为该拓扑的创建传递参数。例如,要验证一台交换机和三台主机的所有对ping连接,请执行以下操作:
运行回归测试:$ sudo mn --test pingall --topo single,3
另一个示例,具有线性拓扑(其中每个交换机都有一个主机,并且所有交换机都在一条线上连接):$ sudo mn --test pingall --topo linear,4
参数化拓扑是Mininet最有用和最强大的功能之一。链接变化
Mininet 2.0允许您设置链接参数,甚至可以从命令行自动设置这些参数:$ sudo mn --link tc,bw=10,delay=10ms mininet> iperf ... mininet> h1 ping -c10 h2
如果每个链路的延迟为10毫秒,则往返时间(RTT)应该约为40毫秒,因为ICMP请求遍历两个链路(一个到交换机,一个到目的地)并且ICMP答复遍历两个返回的链路。您可以使用Mininet的Python API自定义每个链接 ,但现在您可能希望继续本演练。可调详细度
默认的详细级别为info,它打印出Mininet在启动和拆卸期间的操作。将此与debug带有-v参数的完整输出进行比较:$ sudo mn -v debug ... mininet> exit
许多额外的细节将被打印出来。现在尝试一下output,该设置可以显示CLI输出,而其他几乎没有:$ sudo mn -v output mininet> exit
在CLI外部,可以使用其他详细级别,例如和warning,它与回归测试一起使用以隐藏不需要的函数输出。ID = MAC

默认情况下,主机以随机分配的MAC地址开头。这会使调试变得很困难,因为每次创建Mininet时,MAC都会改变,因此很难将控制流量与特定主机相关联。

--mac选项超级有用,并将主机MAC和IP地址设置为小的,唯一的,易于读取的ID。

之前:

$ sudo mn
...
mininet> h1 ifconfig
h1-eth0  Link encap:Ethernet  HWaddr f6:9d:5a:7f:41:42  
          inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:392 (392.0 B)  TX bytes:392 (392.0 B)
mininet> exit

后:

$ sudo mn --mac
...
mininet> h1 ifconfig
h1-eth0  Link encap:Ethernet  HWaddr 00:00:00:00:00:01
          inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
mininet> exit

相比之下,Linux报告的交换机数据端口的MAC将保持随机。这是因为您可以使用FAQ中提到的OpenFlow将MAC“分配”到数据端口。这是一个微妙的点,您现在可能可以忽略。

XTerm显示

对于更复杂的调试,您可以启动Mininet,以便产生一个或多个xterm。

xterm为每个主机启动并切换,请传递以下-x选项:

$ sudo mn -x

一秒钟后,将弹出xterms,并自动设置窗口名称。

或者,您可以显示其他xterm,如下所示。

默认情况下,仅将主机放置在单独的名称空间中。每个交换机的窗口都是不必要的(即相当于常规终端),但是可以方便地运行和保留交换机调试命令,例如流计数器转储。

Xterms对于运行您可能需要取消的交互式命令也很有用,您需要查看这些交互式命令的输出。

例如:

在标有“ switch:s1(root)”的xterm中,运行:

# dpctl dump-flows tcp:127.0.0.1:6634

什么都不会打印出来;交换机没有添加流量。要dpctl与其他交换机一起使用,请以详细模式启动mininet,并在创建交换机时查看其被动侦听端口。

现在,在标有“ host:h1”的xterm中,运行:

# ping 10.0.0.2

返回s1并转储流:#dpctl dump-flows tcp:127.0.0.1:6634

您现在应该看到多个流条目。另外(通常更方便),您可以使用dpctlMininet CLI内置的命令,而无需任何xterm或手动指定交换机的IP和端口。

您可以通过检查ifconfig来判断xterm是否在根名称空间中。如果显示了所有接口(包括eth0),则该接口位于根名称空间中。此外,其标题应包含“(root)”。

从Mininet CLI关闭设置:

mininet> exit

xterms应该自动关闭。

其他开关类型

可以使用其他开关类型。例如,运行用户空间开关:

$ sudo mn --switch user --test iperf

请注意,TCP iperf报告的带宽比以前使用内核交换机看到的要低得多。

如果您执行前面显示的ping测试,您应该注意到会有更大的延迟,因为现在数据包必须承受额外的内核到用户空间的转换。由于OS可以安排代表主机的用户空间进程,因此ping时间将更具可变性。

另一方面,用户空间开关可能是实现新功能的良好起点,尤其是在软件性能不是很关键的情况下。

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

$ sudo mn --switch ovsk --test iperf

小型网络基准

要记录建立和拆除拓扑的时间,请使用测试“无”:

$ sudo mn --test none

一切都在自己的命名空间中(仅限用户切换)

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

$ sudo mn --innamespace --switch user

交换机将不使用环回,而是通过单独的桥接控制连接与控制器通信。就其本身而言,此选项并不是非常有用,但是确实提供了一个示例,说明如何隔离不同的开关。

请注意,此选项(自11/19/12起)不适用于Open vSwitch。

mininet> exit

第3部分:Mininet命令行界面(CLI)命令

显示选项

要查看命令行界面(CLI)选项的列表,请启动最小化拓扑并使其运行。建立Mininet:

$ sudo mn

显示选项:

mininet> help

Python解释器

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

在Mininet CLI上,运行:

mininet> py 'hello ' + 'world'

打印可访问的局部变量:

mininet> py locals()

接下来,使用dir()函数查看可用于节点的方法和属性:

mininet> py dir(s1)

您可以使用help()函数阅读在线文档,以获取节点上可用方法的信息:

mininet> py help(h1) (Press "q" to quit reading the documentation.)

您还可以评估变量的方法:

mininet> py h1.IP()

链接上/下

对于容错测试,打开和关闭链接可能会有帮助。

要禁用虚拟以太网对的两个部分:

mininet> link s1 h1 down

您应该看到生成了OpenFlow端口状态更改通知。备份链接:

mininet> link s1 h1 up

XTerm显示

要显示h1和h2的xterm:

mininet> xterm h1 h2

第4部分:Python API示例

Mininet源代码树中的examples目录包含有关如何使用Mininet的Python API的示例,以及尚未集成到主要代码库中的潜在有用代码。

注意:如开头所述,本演练假定您正在使用Mininet VM(包括所需的一切),或者是本机安装了所有相关工具,包括参考控制器controller(它是OpenFlow参考实现的一部分)install.sh -f如果尚未安装,则可以使用安装。

每个主机的SSH守护程序

一个可能特别有用的示例在每个主机上运行SSH守护程序:

$ sudo ~/mininet/examples/sshd.py

您可以从另一个终端进入任何主机并运行交互式命令:

$ ssh 10.0.0.1
$ ping 10.0.0.2
...
$ exit

退出SSH示例mininet:

$ exit

openflow官网教程

重点这一步(在另外一个shell里)

7bc8043f2a2895fa9eb9d59164107715.png

eede406dae1d455675ad7ee259cf4fbe.png

启动控制器

cd ~/pox

./pox.py log.level --DEBUG misc.of_tutorial(这个命令一定要打全)

tcpdump这个命令不要多打,只打tcpdump

e08a87f02849529844e82f0a76c032f9.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值