OpenFlow Tutorial
平台:PC机器*1
平台细节:Ubuntu12.04+Floodlight+Mininet2.0,其中,需要使用到虚拟机软件,我使用的是virtualbox。整个环境如下:
PC机器上安装Floodlight,作为OpenFlow环境的控制器。
在终端运行virtualbox中带有Mininet的虚拟机,用来模拟出OpenFlow交换机,以及host,以及自定义的网络拓扑结构。
配置含Mininet的虚拟机镜像
Mininet主要是虚拟OpenFlow交换机以及host节点。并且能构造除自定义的
拓扑。虚拟OpenFlow交换机主机是OpenvSwitch。
笔者使用amd64的Ubuntu系统,可以使用mininet2.0
mininet下载地址:http://archive.openflow.org/wk/index.php/OpenFlow_Tutorial
(用户名:mininet 密码:mininet)
1.在虚拟机中导入镜像
如果你下载了.ovf 的镜像文件,在虚拟机中导入:
运行vrtualbox --> 选择 ‘管理’ --> 导入虚拟电脑 --> 选择导入下载的.ovf文件。
也可以双击下载的.ovf文件,然后导入。
2.在终端使用命令解压虚拟机镜像 $ unzip OpenFlowTutorial-101311.zip
3.在virtualbox中设置网络,选择VM中的设置,选择网络,添加按钮添加一个仅"host only network"。
4.启动虚拟机,在vm中输入mininet的用户名和密码。
进入后给root设置密码,然后安装。
安装Floodlight
sudo apt-get install build-essential default-jdk ant python-dev
git clone git://github.com/floodlight/floodlight.git
cd floodlight
git checkout stable
ant
java -jar target/floodlight.jar 运行Floodlight
(出现6633 的时候已经成功)
通过ssh访问虚拟机
在这个步骤中,你会验证是否可以从主机PC(笔记本电脑)连接到通过SSH的客户端虚拟机(OpenFlowTutorial)。
从虚拟机控制台,登录到虚拟机,然后输入:
$ ifconfig -a
这时候应该看到三个接口(为eth0,eth1,LO),eth0和eth1应该有IP地址分配。
在该终端中运行:
$ ssh -X [user]@[VM ip]
更换[用户]为VM映像正确的用户名。
更换[访客的IP这里]与你刚才记下的IP。如果SSH无法连接,请确保可以ping通你要连接的IP地址。
为VM映像输入密码。接下来,在ssh终端启动X
$ xterm h1 h2
之后应该出现一个新的终端窗口。如果成功了,你已经完成了基本的设置。关闭xterm。如果你得到一个'xterm的未设置DISPLAY错误',从上面验证X服务器的安装。
启动网络
网络包括3个host和1个switch
在虚拟机创建这个的网络中,SSH终端,输入:
$ sudo mn --topo single,3 --mac --switch ovsk --controller remote
这告诉Mininet启动一个3主机,单(openvSwitch型)开关拓扑结构,设置每台主机相同的IP的MAC地址,并指向一个remote,默认为本地主机。
Mininet只是做:
创建3个虚拟主机,每一个单独的IP地址。
与3个端口的内核创建一个OpenFlow的软件交换机。
连接每个虚拟主机与虚拟以太网的开关。
设置每台主机等于它的IP的MAC地址。
配置OpenFlow的交换机连接到远程控制器。
mininet简要介绍
几个Mininet特定的命令:
要查看可用的节点列表,在Mininet控制台,运行:
mininet> nodes
要查看可用命令的列表,在Mininet控制台,运行:
mininet> help
要运行一个节点命令,在前面加上命令的节点的名称。例如,要检查一个虚拟主机的IP,在Mininet控制台,运行:
mininet> h1 ifconfig
运行交互式命令,调试输出产生xterm的一个或多个虚拟主机。在Mininet控制台,运行:
mininet> xterm h1 h2
还有其他命令:
mininet> dump
mininet> net
mininet> pingall
若在网页中察看拓扑信息,在vm中输入命令
$ sudo mn --controller=remote,ip=[controller ip]
查看PC上floodlight信息,可以发现有OpenFlow Switch与之相连。进入http://localhost:8080/ui/index.html
可以登录floodligt的web界面。
dpctl用法示例
dpctl是自带的OpenFlow参考分布,是单一交换机的流量控制表的实用工具。对于调试非常有用,通过查看流量状态和流量计数器。大多数OpenFlow的交换机就可以开始了一个被动的监听端口(在你当前的设置,这是6634),从中可以轮询切换,无需调试代码添加到控制器。
创建第二个SSH的窗口,然后运行:
$ dpctl show tcp:127.0.0.1:6634
‘show’命令连接到交换机和转储其端口状态。
这里有一个比较有用的命令:
$ dpctl dump-flows tcp:127.0.0.1:6634
由于我们还没有start任何控制器,流量表应该是空的。
ping测试
回到mininet控制台,并尝试从H1 ping通H2。在Mininet控制台:
mininet> h1 ping -c3 h2
正如之前所看到的,开关流量表是空的。除此之外,没有控制器连接到交换机,因此交换机不知道如何传入流量,导致ping不通。
使用dpctl手动安装必要的流量。在SSH终端:、
$ dpctl add-flow tcp:127.0.0.1:6634 in_port=1,actions=output:2
$ dpctl add-flow tcp:127.0.0.1:6634 in_port=2,actions=output:1
转发数据包在端口1来2端口和vice-verca。验证通过检查流量表
$ dpctl dump-flows tcp:127.0.0.1:6634
再次运行ping命令
mininet> h1 ping -c3 h2
注:如果没有看到任何ping答复来通过,这可能是该流条目过期。当你做一个“dpctl转储流”,你可以看到一个“idle_timeout”选项为每个条目,默认为60秒。这意味着,该流程将后60secs过期,如果没有传入通信。再次运行尊重这个限制,或者安装一个流量入口较长的超时。
$ dpctl add-flow tcp:127.0.0.1:6634 in_port=1,idle_timeout=120,actions=output:2
启动Wireshark
Wireshark是观看的OpenFlow协议消息,以及对一般的调试非常有用。
打开一个新的SSH终端并且连接到虚拟机。
$ ssh -X openflow@[guest ip address]
打开wireshark
$ sudo wireshark &
可能会得到使用Wireshark的具有root访问权限的警告消息。按OK键。
点击菜单栏中的Capture->Interfaces。点击开始按钮旁边的“LO”,loopback接口。会看到一些数据包将通过。
现在,成立了OpenFlow的控制流量的过滤器,通过键入'of':
of
按应用按钮到过滤器适用于所有记录的流量。
启动控制器和查看Wireshark的启动信息
在SSH终端:
$ controller ptcp:
在Wireshark窗口,可以看到一些新的消息类型:
Message | Type | Description |
Packet-In | Switch->Controller | a packet was received and it didn't match any entry in the switch's flow table, causing the packet to be sent to the controller. |
Packet-Out | Controller->Switch | controller send a packet out one or more switch ports. |
Flow-Mod | Controller->Switch | instructs a switch to add a particular flow to its flow table. |
Flow-Expired | Switch->Controller | a flow timed out after a period of inactivity. |
首先,你看到一个ARP请求错过流量表,生成一个广播数据包出的消息。接着,将ARP响应返回,与目前已知的控制器既MAC地址,它可以向下推流至开关用流管理员的消息。开关不能再推动的ICMP数据包流量。后续的ping请求直行通过数据通路;与连接h1和h2已经被推到交换机的流量,没有控制器的参与。
查看 openflow的ping消息
现在,我们将看到在响应数据包生成的消息。
在此之前更新Wireshark的过滤器忽略(用来保持交换机和控制器之间的连接)的echo-request/reply消息,输入:
of && (of.type !=3) && (of.type !=2)
运行ping命令来查看正在使用的OpenFlow的消息。在Mininet控制台输入:
mininet > h1 ping -c1 h2
在Wireshark窗口中可以看到新的消息类型:
Message | Type | Description |
Packet-In | Switch->Controller | a packet was received and it didn't match any entry in the switch's flow table, causing the packet to be sent to the controller. |
Packet-Out | Controller->Switch | controller send a packet out one or more switch ports. |
Flow-Mod | Controller->Switch | instructs a switch to add a particular flow to its flow table. |
Flow-Expired | Switch->Controller | a flow timed out after a period of inactivity. |
后续的ping请求直行通过数据通路,并且不接收额外的信息。
从Mininet控制台重新运行ping,再次:
mininet > h1 ping -c1 h2
用iperf测试tcp带宽
iperf是一个命令行测试工具,用于检查两台计算机之间的速度。
在mininet控制台运行:
mininet> iperf
Mininet命令运行一个虚拟主机上的iperf的TCP服务器,然后第二个虚拟主机上运行的iperf的客户端。一旦连接成功,他们彼此之间blast packets,并报告结果。
现在,在mininet控制台:
mininet > exit
启动相同Mininet与用户空间切换
$ sudo mn --topo single,3 --mac --controller remote --switch user
运行一个以上的iperf测试与参考控制器:
mininet > iperf
退出Mininet:
mininet > exit
OpenFlow Tutorial相关推荐
- OpenFlow Tutorial 最详细翻译(一)
天天写介绍SDN的估计大家都烦,看了跟没看一样,来篇实战的. 为什么敢说最权威最详细呢,还是下的功夫的区别.另外,比我李青林还笨的程序员,大概率搞不定这一坨一坨的麻烦事,比我牛逼的,肯定不屑于写这么土 ...
- Mininet FAQ
2019独角兽企业重金招聘Python工程师标准>>> FAQ lantz edited this page on 20 Oct · 324 revisions Pages 65 M ...
- SDN控制器之POX篇
1. 安装POX POX基于Python2.7的环境运行,官方版本的POX可以运行在Windows.Mac OS.以及Linux操作系统中.POX源码已在github发布,可将POX的源码下载到本地机 ...
- openflow hands on tutorial 使用心得
1 很容易忽视第一个问题 ssh 登陆的时候注意参数,一开始-Y ,使用wireshark的时候 -X ,忘记加参数ssh连接后无法使用xwindows,因为默认的只能使用字符界面. 2. wire ...
- OpenDayLight tutorial
link参考教程 Fundamentals for OpenDaylight programming Service Abstraction Layer (SAL) 搜索ubuntu 18.04 + ...
- Python Tutorial(十):浏览标准库(一)
10.1 操作系统接口 os模块提供很多函数用于和操作系统的交互: 确定使用import os风格而不是from os import *.这将避免os.open()被内建的open()函数遮住,它的操 ...
- ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course
ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course! 教程大小解压后:4.96G 语言:英语+中英文字幕(机译)时长 ...
- Finding iPhone Memory Leaks: A “Leaks” Tool Tutorial[转]
Finding iPhone Memory Leaks: A "Leaks" Tool Tutorial by OWEN GOSS on 12. FEB, 2009 in RESO ...
- 宏基因组教程Metagenomics Tutorial (HUMAnN2)
分析流程 下载测试数据 了解输入文件 软件安装和环境变量 序列质控和去宿主 质控后结果统计 合并双端 计算功能和代谢通路 多样品物种和功能组成合并为矩阵/表 STAMP软件统计绘图 整理humann2 ...
最新文章
- Swagger3.0 天天刷屏,真的香吗?
- nginx防止高负载的解决方案(sysgurad模块)
- 轻量级NuGet—BaGet
- mysql timestamp 并发_MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
- mysql怎么消除冗余,mysql剔除冗余数据
- 操作系统 内存管理相关知识
- python玩我的世界盒子_省培预存|编程教学建议第一辑“教材分层次梳理”
- NB-IOT(5)---关于NB-IoT的十大问题和答案
- mysql signal函数_MySQL:简单记录信号处理
- spring boot antd pro 跨域_springboot配置跨域
- [OpenBMC] 快速上手OpenBMC的Redfish
- 关于ChartControl的绑定数据源使用
- ssget 用法详解
- windows日志文件查看与清理
- cocos2dx iphoneX 游戏适配
- js脚本混淆加密(转载)
- 训练集、验证集和测试集这三个名词的区别
- linux配置网卡、修改主机名和映射文件(手把手配置)
- java for 获取索引_获取Java列表中的对象索引
- 可以重写static方法和private方法吗
热门文章
- python训练自己中文语料库_Python nltk载入自己的中文语料库的两种方法 for Windows7...
- JavaScript 的常量和变量
- java组件及事件处理(11)--ActionListener一个窗口,两个事件
- 电信云服务器重装系统,天翼云主机操作(二)
- 基于java的公共的图像处理软件,它是由National Institutes of Health开发的
- 使用IDM下载百度网盘的文件(亲测有用)
- C语言初阶:define定义的常量和宏,关于指针的详细讲解,初步认识结构体的使用
- LDO稳压器详解(一)-参数概念
- Huggingface Transformers库学习笔记(二):使用Transformers(上)(Using Transformers Part 1)
- 移动测试工程师必须知道的10个开源框架