平台: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相关推荐

  1. OpenFlow Tutorial 最详细翻译(一)

    天天写介绍SDN的估计大家都烦,看了跟没看一样,来篇实战的. 为什么敢说最权威最详细呢,还是下的功夫的区别.另外,比我李青林还笨的程序员,大概率搞不定这一坨一坨的麻烦事,比我牛逼的,肯定不屑于写这么土 ...

  2. Mininet FAQ

    2019独角兽企业重金招聘Python工程师标准>>> FAQ lantz edited this page on 20 Oct · 324 revisions Pages 65 M ...

  3. SDN控制器之POX篇

    1. 安装POX POX基于Python2.7的环境运行,官方版本的POX可以运行在Windows.Mac OS.以及Linux操作系统中.POX源码已在github发布,可将POX的源码下载到本地机 ...

  4. openflow hands on tutorial 使用心得

    1 很容易忽视第一个问题  ssh 登陆的时候注意参数,一开始-Y ,使用wireshark的时候 -X ,忘记加参数ssh连接后无法使用xwindows,因为默认的只能使用字符界面. 2. wire ...

  5. OpenDayLight tutorial

    link参考教程 Fundamentals for OpenDaylight programming Service Abstraction Layer (SAL) 搜索ubuntu 18.04 + ...

  6. Python Tutorial(十):浏览标准库(一)

    10.1 操作系统接口 os模块提供很多函数用于和操作系统的交互: 确定使用import os风格而不是from os import *.这将避免os.open()被内建的open()函数遮住,它的操 ...

  7. ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

    ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course! 教程大小解压后:4.96G 语言:英语+中英文字幕(机译)时长 ...

  8. 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 ...

  9. 宏基因组教程Metagenomics Tutorial (HUMAnN2)

    分析流程 下载测试数据 了解输入文件 软件安装和环境变量 序列质控和去宿主 质控后结果统计 合并双端 计算功能和代谢通路 多样品物种和功能组成合并为矩阵/表 STAMP软件统计绘图 整理humann2 ...

最新文章

  1. Swagger3.0 天天刷屏,真的香吗?
  2. nginx防止高负载的解决方案(sysgurad模块)
  3. 轻量级NuGet—BaGet
  4. mysql timestamp 并发_MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
  5. mysql怎么消除冗余,mysql剔除冗余数据
  6. 操作系统 内存管理相关知识
  7. python玩我的世界盒子_省培预存|编程教学建议第一辑“教材分层次梳理”
  8. NB-IOT(5)---关于NB-IoT的十大问题和答案
  9. mysql signal函数_MySQL:简单记录信号处理
  10. spring boot antd pro 跨域_springboot配置跨域
  11. [OpenBMC] 快速上手OpenBMC的Redfish
  12. 关于ChartControl的绑定数据源使用
  13. ssget 用法详解
  14. windows日志文件查看与清理
  15. cocos2dx iphoneX 游戏适配
  16. js脚本混淆加密(转载)
  17. 训练集、验证集和测试集这三个名词的区别
  18. linux配置网卡、修改主机名和映射文件(手把手配置)
  19. java for 获取索引_获取Java列表中的对象索引
  20. 可以重写static方法和private方法吗

热门文章

  1. python训练自己中文语料库_Python nltk载入自己的中文语料库的两种方法 for Windows7...
  2. JavaScript 的常量和变量
  3. java组件及事件处理(11)--ActionListener一个窗口,两个事件
  4. 电信云服务器重装系统,天翼云主机操作(二)
  5. 基于java的公共的图像处理软件,它是由National Institutes of Health开发的
  6. 使用IDM下载百度网盘的文件(亲测有用)
  7. C语言初阶:define定义的常量和宏,关于指针的详细讲解,初步认识结构体的使用
  8. LDO稳压器详解(一)-参数概念
  9. Huggingface Transformers库学习笔记(二):使用Transformers(上)(Using Transformers Part 1)
  10. 移动测试工程师必须知道的10个开源框架