热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

第1部分:日常Mininet使用首先,此演练的命令语法(可能很明显)说明:$先于应在shell提示符下键入的L

第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”过滤器框中,输入此过滤器,然后单击Apply:of
在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并没有这样做。拥有一切运行中的“根”的过程命名为便于调试,因为它允许您使用的是看所有从控制台的过程中ps,kill测试主机之间的连接
现在,确认您可以从主机0 ping到主机1:mininet> h1 ping -c 1 h2
如果稍后在命令中出现带有节点名称的字符串,则该节点名称将被其IP地址替换;这发生在h2。
您应该看到OpenFlow控制流量。第一个主机的ARP为第二个主机的MAC地址,这导致packet_in消息发送到控制器。然后,控制器发送一条packet_out消息,将广播数据包泛洪到交换机上的其他端口(在此示例中,是唯一的其他数据端口)。第二台主机看到ARP请求并发送答复。该答复到达控制器,控制器将其发送到第一台主机并下推流条目。
现在,第一个主机知道第二个主机的MAC地址,并且可以通过ICMP回显请求发送其ping。该请求以及来自第二个主机的相应答复均进入控制器,并导致流条目被下推(以及实际的数据包被发送出去)。
重复最后一个ping&#xff1a;mininet> h1 ping -c 1 h2ping第二次尝试的时间应该更少&#xff08;<100us&#xff09;。ping先前在交换机中安装了覆盖ICMP 流量的流条目&#xff0c;因此没有生成控制流量&#xff0c;并且数据包立即通过交换机。
运行此测试的一种更简单的方法是使用Mininet CLI内置pingall命令&#xff0c;该命令执行全对操作ping&#xff1a;mininet> pingall运行一个简单的Web服务器和客户端
请记住&#xff0c;这ping不是您可以在主机上运行的唯一命令&#xff01;Mininet主机可以运行基础Linux系统&#xff08;或VM&#xff09;及其文件系统可用的任何命令或应用程序。您也可以输入任何bash命令&#xff0c;包括作业控制&#xff08;&&#xff0c;jobs&#xff0c;kill&#xff0c;等。&#xff09;
接下来&#xff0c;尝试在上启动一个简单的HTTP服务器h1&#xff0c;从发出请求h2&#xff0c;然后关闭Web服务器&#xff1a;mininet> h1 python -m SimpleHTTPServer 80 & mininet> h2 wget -O - h1 ... mininet> h1 kill %python
退出CLI&#xff1a;mininet> exit清理
如果Mininet由于某种原因崩溃&#xff0c;请清理它&#xff1a;$ sudo mn -c第2部分&#xff1a;高级启动选项运行回归测试
您无需进入CLI&#xff1b;Mininet也可以用于运行自包含的回归测试。
运行回归测试&#xff1a;$ sudo mn --test pingpair
该命令创建了最小的拓扑&#xff0c;启动了OpenFlow参考控制器&#xff0c;进行了全对ping测试&#xff0c;并拆除了拓扑和控制器。
另一个有用的测试是iperf&#xff08;给它大约10秒钟才能完成&#xff09;&#xff1a;$ sudo mn --test iperf
此命令创建相同的Mininet&#xff0c;在一台主机上运行一台iperf服务器&#xff0c;在第二台主机上运行一台iperf客户端&#xff0c;并解析所获得的带宽。更改拓扑的大小和类型
默认拓扑是连接到两个主机的单个交换机。您可以使用将其更改为其他拓扑--topo&#xff0c;并为该拓扑的创建传递参数。例如&#xff0c;要验证一台交换机和三台主机的所有对ping连接&#xff0c;请执行以下操作&#xff1a;
运行回归测试&#xff1a;$ sudo mn --test pingall --topo single,3
另一个示例&#xff0c;具有线性拓扑&#xff08;其中每个交换机都有一个主机&#xff0c;并且所有交换机都在一条线上连接&#xff09;&#xff1a;$ sudo mn --test pingall --topo linear,4
参数化拓扑是Mininet最有用和最强大的功能之一。链接变化
Mininet 2.0允许您设置链接参数&#xff0c;甚至可以从命令行自动设置这些参数&#xff1a;$ sudo mn --link tc,bw&#61;10,delay&#61;10ms mininet> iperf ... mininet> h1 ping -c10 h2
如果每个链路的延迟为10毫秒&#xff0c;则往返时间&#xff08;RTT&#xff09;应该约为40毫秒&#xff0c;因为ICMP请求遍历两个链路&#xff08;一个到交换机&#xff0c;一个到目的地&#xff09;并且ICMP答复遍历两个返回的链路。您可以使用Mininet的Python API自定义每个链接 &#xff0c;但现在您可能希望继续本演练。可调详细度
默认的详细级别为info&#xff0c;它打印出Mininet在启动和拆卸期间的操作。将此与debug带有-v参数的完整输出进行比较&#xff1a;$ sudo mn -v debug ... mininet> exit
许多额外的细节将被打印出来。现在尝试一下output&#xff0c;该设置可以显示CLI输出&#xff0c;而其他几乎没有&#xff1a;$ sudo mn -v output mininet> exit
在CLI外部&#xff0c;可以使用其他详细级别&#xff0c;例如和warning&#xff0c;它与回归测试一起使用以隐藏不需要的函数输出。ID &#61; MAC

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

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

之前&#xff1a;

$ 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.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:6 errors:0 dropped:0 overruns:0 frame:0TX packets:6 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:392 (392.0 B) TX bytes:392 (392.0 B)
mininet> exit

后&#xff1a;

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

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

XTerm显示

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

xterm为每个主机启动并切换&#xff0c;请传递以下-x选项&#xff1a;

$ sudo mn -x

一秒钟后&#xff0c;将弹出xterms&#xff0c;并自动设置窗口名称。

或者&#xff0c;您可以显示其他xterm&#xff0c;如下所示。

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

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

例如&#xff1a;

在标有“ switch&#xff1a;s1&#xff08;root&#xff09;”的xterm中&#xff0c;运行&#xff1a;

# dpctl dump-flows tcp:127.0.0.1:6634

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

现在&#xff0c;在标有“ host&#xff1a;h1”的xterm中&#xff0c;运行&#xff1a;

# ping 10.0.0.2

返回s1并转储流&#xff1a;&#xff03;dpctl dump-flows tcp&#xff1a;127.0.0.1&#xff1a;6634

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

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

从Mininet CLI关闭设置&#xff1a;

mininet> exit

xterms应该自动关闭。

其他开关类型

可以使用其他开关类型。例如&#xff0c;运行用户空间开关&#xff1a;

$ sudo mn --switch user --test iperf

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

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

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

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

$ sudo mn --switch ovsk --test iperf

小型网络基准

要记录建立和拆除拓扑的时间&#xff0c;请使用测试“无”&#xff1a;

$ sudo mn --test none

一切都在自己的命名空间中&#xff08;仅限用户切换&#xff09;

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

$ sudo mn --innamespace --switch user

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

请注意&#xff0c;此选项&#xff08;自11/19/12起&#xff09;不适用于Open vSwitch。

mininet> exit

第3部分&#xff1a;Mininet命令行界面&#xff08;CLI&#xff09;命令

显示选项

要查看命令行界面&#xff08;CLI&#xff09;选项的列表&#xff0c;请启动最小化拓扑并使其运行。建立Mininet&#xff1a;

$ sudo mn

显示选项&#xff1a;

mininet> help

Python解释器

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

在Mininet CLI上&#xff0c;运行&#xff1a;

mininet> py &#39;hello &#39; &#43; &#39;world&#39;

打印可访问的局部变量&#xff1a;

mininet> py locals()

接下来&#xff0c;使用dir&#xff08;&#xff09;函数查看可用于节点的方法和属性&#xff1a;

mininet> py dir(s1)

您可以使用help&#xff08;&#xff09;函数阅读在线文档&#xff0c;以获取节点上可用方法的信息&#xff1a;

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

您还可以评估变量的方法&#xff1a;

mininet> py h1.IP()

链接上/下

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

要禁用虚拟以太网对的两个部分&#xff1a;

mininet> link s1 h1 down

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

mininet> link s1 h1 up

XTerm显示

要显示h1和h2的xterm&#xff1a;

mininet> xterm h1 h2

第4部分&#xff1a;Python API示例

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

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

每个主机的SSH守护程序

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

$ sudo ~/mininet/examples/sshd.py

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

$ ssh 10.0.0.1
$ ping 10.0.0.2
...
$ exit

退出SSH示例mininet&#xff1a;

$ exit

openflow官网教程

重点这一步&#xff08;在另外一个shell里&#xff09;

7bc8043f2a2895fa9eb9d59164107715.png
eede406dae1d455675ad7ee259cf4fbe.png

启动控制器

cd &#xff5e;/pox

./pox.py log.level --DEBUG misc.of_tutorial&#xff08;这个命令一定要打全&#xff09;

tcpdump这个命令不要多打&#xff0c;只打tcpdump

e08a87f02849529844e82f0a76c032f9.png



推荐阅读
author-avatar
青樽有酒_585_587
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有