[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
:
这里的h1-eth0
是不能在这个primary-linux-system中看到的,因为它只是h1这个虚拟的host上执行的结果。
交换机上也可以执行ifconfig
:s1 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地址如下:
然后是wireshark的数据包顺序:
顺便还可以发现,h1 的 arp 列表中出现了 h2 ,h2 的 arp列表中也出现了对方:
注意,第一次ping
的时间比后面 ping
的时间要长不少:
原因是,因为第一次ping
的时候,产生了 control traffic,
但是在之后就不产生了(自己的理解:控制器告诉了 switch还是host 该怎么处理这类数据),所以这种数据就直接被发出了,所以时间减少。
直接使用命令 pingall
可以检查主机之间的连通性,更为方便。
1.5 Run a simple web server and client
在host上面不只只能用ping
,mininet可以让host执行任何primary-linux-system中存在的命令。下面,在h1上开启一个简单的http服务器,并让h2发出http请求:
使用 exit 退出 mininet:
2. Advanced Startup Options
2.1 回归测试
不用进入CLI,也可以让mininet进行回归测试(什么是regression test?):
测试结果会告诉时间:
另外一种测试方法是通过ipref
测试网络性能,在一台主机上建立ipref服务器,在另一台上建立ipref客户点,来获得带宽数据,但是在我的环境中出现了caught expection
,貌似做不成功?:
问题已发现:拼写错误:iperf
:
2.2 Changing topology size and type
默认拓扑图是一个交换机连接两个主机,可以使用--topo
参数改变这个拓扑图。比如说测试1个交换机和3个主机这个网络的连通性:
sudo mn --test pingall --topo single,3
另一个例子:a linear topology,每个交换机连接一个主机,所有交换机连城一个直线:
2.3 Link variations
连接差异化。
mininet允许你设置连接参数,可以通过命令行直接自动配置:
sudo mn --link tc,bw=10,delay=10ms
注意终端中输出了10ms delay
,然后执行命令 iperf
:
发现这里测出来的带宽比上面没有delay = 10ms 的时候要低不少。
除了第一个包的时间长,因为上面提到过第一个包要发给控制器来问控制器怎么转发,后面的包就是稳定在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)
:
还可以单独打印某些变量:
py h1.IP()
3.2 Link Up/Down
链接或断开操作可以有助于容错测试.
mininet> link s1 h1 down
mininet> link s1 h1 up
3.3 Xterm Display
mininet> xterm h1 h2
, 用来展示h1 和 h2 的 xterm.
[SDN] mininet walkthrough的更多相关文章
- 玩了一下SDN:MININET+FLOODLIGHT,感觉这确实是一个趋势啊
功能用增加中间层的方案来解决. 仿佛回到用交换机和路由器模拟器的感觉. 遇到执行命令小问题,狗哥搞定: mininet>mininet> dpctl dump-flows tcp:127. ...
- Mininet安装,简单实现一个网络拓扑结构
安装mininet Mininet安装教程,可以按照这个来,然而这个虚拟机有时会很难装.可以考虑如下的做法:先 git clone,cd mininet 和 cat INSTALL之后,可以在提示信息 ...
- Machine and Deep Learning with Python
Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...
- Floodlight+Mininet的SDN实验平台搭建初探
平台环境说明: Cpu:Intel Core 2 Duo T6570 Mem:4.00GB Os :Ubuntu 14.04 1.Floodlight Floodlight是一个比较成熟的sdn控制器 ...
- SDN 网络系统之 Mininet 与 API 详解
SDN 网络系统之 Mininet 与 API 详解 Mininet 是轻量级的软件定义网络系统平台,同时提供了对 OpenFlow 协议的支持.本文主要介绍了 Mininet 的相关概念与特性,并列 ...
- 搭建SDN网络——mininet
好久没来写不博客,感觉自己不写写博客,就完全想不起当天干了什么.前几天参加了小米的面试,整个人被打击的不行,还是要好好学习,不然工作都找不到. 这学期选了SDN的课,只有六周,学完有点懵,这这这等于什 ...
- mininet、floodlight在第一次SDN上机作业中出现的一些问题
mininet.floodlight在第一次SND上机作业中出现的一些问题 首先给出链接 VMware安装 mininet安装 floodlight安装及问题,各个版本Ubuntu SDN第一次上机作 ...
- SDN实验---Mininet实验(玩转流表)
一:实验目的 (一)案例目的 (二)实验内容 (三)网络拓扑结构 二:OpenFlow流表实验准备 (一)使用Python设置网络拓扑 --- tree_topo.py from mininet.to ...
- SDN实验---使用git安装Mininet
0:补充Ubuntu截屏 截全屏 printscreen 截取当前窗口 alt + printscreen 截取任意矩形 shift + printscreen 截取全屏到剪切板 ctrl + pri ...
随机推荐
- sqlmap 1.0.21 tamper 总结
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- redis发布订阅
命令 : redis-cli打开一个客户端 Redis Psubscribe 命令订阅一个或多个符合给定模式的频道. 每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.n ...
- Ubuntu 12.04 系统安装极点五笔输入法
习惯用五笔了,在Ubuntu下安装了下五笔: 下面就实际操作,安装极点五笔输入法! 在终端中执行如下命令: sudo wget http://www.xiit.cn/wp-content/upload ...
- c#前3章总结
01.net和c#的区别 大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标:任何人,在任何地方,使用任何终端设备,都可以访问微软提供的服务. .net Framework:要想让 ...
- response的outputStream输出数据的问题
package cn.itcast.response; import java.io.IOException; import java.io.OutputStream; import java.io. ...
- AIM Tech Round 3 (Div. 2) A B C D
虽然打的时候是深夜但是状态比较好 但还是犯了好多错误..加分场愣是打成了降分场 ABC都比较水 一会敲完去看D 很快的就想出了求0和1个数的办法 然后一直wa在第四组..快结束的时候B因为低级错误被h ...
- centos同步北京时间
yum install ntp ntpdate #ntpdate -u 202.120.2.101 //写入硬件 #hwclock -w 以下是国内常见的NTP服务器 ntp.sjtu.edu.cn ...
- Oracle中的数据类型
数据类型 数据类型是在设计表结构中需要定义的,选择适当的数据类型可以节省存储空间,提高运算效率. Oracle数据类型主要包括 1.字符型 适合保存字符串类型的数据,如姓名.地址.简介等等. 如:ch ...
- 错误:Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp;的解决
问题: 代码中查询MySQL的结果集时报错,提示Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp;刚开始 ...
- ionic获取焦点
功能需求:点击按钮后获取input输入框的焦点 获取焦点用jq focus()不成功,因为angular也不推荐,所以网上找了一个在focus封装成指令的方法 指令写法: .directive('my ...