OpenFlow_tutorial_3_Learn_Development_Tools
一、Several Utilities
OpenFlow Tutorial VM 中预装了一些OpenFlow特性的工具和一般通用网络的工具。
1、Openflow Controller:处于Openflow南向接口上层。Controller又称NOS(Network Operating Systems),是SDN架构中十分重要的一层,用于支持控制逻辑在高层制定的策略的基础上配置网络。在后面会NOX、Beacon等平台上编写自己的Controller。
2、OpenFlow Switch:处于OpenFlow接口之下。
3、ovs-ofctl:命令行工具,用于快捷地发送Openflow消息,在查看交换机端口、查看流量统计和手动插入流表项方面十分有用。
4、wireshark。
5、iperf:通用命令行工具,用于测试单个TCP连接的速度。
6、mininet:网络仿真平台,用于搭建OpenFlow网络(controller,switches,hosts and links)。
7、cbench:性能测试工具。
二、搭建网络:
1、拓扑:

在SSH terminal中输入: $ sudo mn --topo single,3 --mac --switch ovsk --controller remote
通过该命令,在mininet中建立起如图拓扑,并使其MAC地址与IP地址相同(用IP地址主机号设置MAC地址),并使用远端Controller。

三、Ping Test
1、在mininet提示符后输入:h1 ping -c3 h2

发现不能ping通。因为此时switch的流表是空的,ping命令的数据包到达switch时发现没有匹配项,需要用packet-in数据包上传至controller,由于controller决定其处理策略,而此时switch还没有连接到controller,故无法ping通。
2、使用ovs-ofctl手动添加流表项:
再打开一个SSH terminal,同样连接到VM,在其中输入命令:
# sudo ovs-ofctl add-flow s1 in_port=1,actions=output:2
# sudo ovs-ofctl add-flow s1 in_port=2,actions=output:1

查看switch流表项,输入命令:# sudo ovs-ofctl dump-flows s1

3、再次使用ping命令,能够ping通:

四、启动Wireshark:
在SSH terminal中输入:sudo wireshark & 启动。(确保主机系统GUI与ubuntu14.04兼容,ubuntu18.04不能正常使用)

五、启动控制器并抓包:
1、在wireshark中选择loopback接口为监听接口,并在过滤器中输入过滤规则:"openflow_v1"。
2、在SSH terminal中输入命令:sudo controller ptcp: 启动一个类似具有学习能力的交换机的controller。

各种数据包的类型如下:

六、观察ping命令的openflow数据包:
1、首先修改过滤规则,忽略掉用于保持Switch和Controller之间连接活性的echo-request/reply数据包。

从上图中可以得到过滤规则:openflow_v1 && openflow_1_0.type!=2 && openflow_1_0.type!=3
2、为了观察ping命令的openflow数据包,需删掉之前添加的流表项,之外还建议删掉host上的ARP cache。
在SSH terminal中输入:sudo ovs-ofctl del-flow s1
在mininet terminal中输入:
h1 ip -s -s neigh flush all
h2 ip -s -s neigh flush all
3、再次执行ping命令,发现可以ping通,且Wireshark捕获到相关openflow数据包。


No.623:一个ARP请求在流表中失配,产生一个目的地址为广播地址的Packet-In数据包。
No.624:由ARP miss产生的一个广播Packet-Out数据包,用于查找相应IP地址主机的MAC地址。
No.626:当相应IP地址接收到广播Packet-Out数据包时,向源MAC地址返回一个点播告诉其自己的MAC地址。
No.627:Controller一个Flow-Mod数据包给Switch,在Switch的流表中添加一个特定数据流的流表项。
No.628:ping命令发送ICMP(Internet Control Message Protocol)数据包,Switch流表中无匹配项,因而通过Packet-In数据包上传至Controller。
No.629:将流表项添加到switch的流表中。
No.630:从h2返回的ICMP数据包,Switch流表中无匹配项,因而通过Packet-In数据包上传至Controller。
No.631:将流表项添加到switch的流表中。
其后数据包从序号和时间戳来看,应该不是本次ping命令产生的数据包。
ping命令发送三次ICMP数据包,后两次因为switch的流表中已有相应匹配项,因而不会产生Openflow数据包。
一定时间后流表项会超时作废。
该实验中这种使用Openflow的方式称为reactive mode(响应模式);还有一种在数据包到达switch之前就下发流表项的模式称为proactive mode(主动模式),这种模式可以避免swtich到controller之间的一个往返时间延迟(round-trip time)和添加流表项的时间。
图中各种数据包类型如下图解释:

七、Benchmark Controller w/iperf (衡量、检测)
1、iperf是用来检测两个主机间速度的命令行工具。

该命令在一个主机上运行一个iperf TCP server,在另一个主机上运行一个iperf client,建立连接以后双方相互发送大量数据包(blast packets)并报告结果。
2、与user-space switch比较:
关闭之前的拓扑,新建使用user-space switch的拓扑:

输入命令:sudo mn --topo single,3 --controller remote --switch user

运行iperf:

可以发送数据传输的速率慢了很多。因为使用user-space switch时,数据包在每一跳都需要从user-space进入kernel-space,再从kernel-space回到user-space,而不是在kernel-space中进行传输。user-space switch更容易修改,但是慢很多。
OpenFlow_tutorial_3_Learn_Development_Tools的更多相关文章
随机推荐
- Linux 杀死所有进程
方法一: sudo killall -9 netease-cloud-music 这种方法,必须要写全称. sudo netease-cloud-music QStandardPaths: XDG_R ...
- mac toad下建表问题
mac toad下创建表,表名会自动多一个双引号,如:tb_test => "tb_test",这个应该是mac系统智能引号问题导致的,目前还没找到解决办法,只能手动用sql ...
- 一.OC基础之:1,OC语言的前世今生 ,2,OC语言入门,3,OC语言与C的差异,4,面向对象,5,类和对象的抽象关系,6,类的代码创建,7,类的成员组成及访问
1,OC语言的前世今生 , 一, 在20世纪80年代早期,布莱德.麦克(Brad Cox)设计了OC语言,它在C语言的基础上增加了一层,这意味着对C进行了扩展,从而创造出一门新的程序设计语言,支持对象 ...
- 计算属性computed 与methods
你可能已经注意到我们可以通过调用表达式中的 method 来达到同样的效果: <p>Reversed message: "{{ reversedMessage() }}" ...
- MySql LOAD DATA 使用
load的语法 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO ...
- 【转载】Nginx 的工作原理 和优化
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locati ...
- MFC project for a non-Unicode character set is deprecated
error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must chang ...
- Linux下 SSH远程管理服务
第1章 SSH基本概述 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定 在进 ...
- bzoj 2142: 礼物【中国剩余定理+组合数学】
参考:http://blog.csdn.net/wzq_qwq/article/details/46709471 首先推组合数,设sum为每个人礼物数的和,那么答案为 \[ ( C_{n}^{sum} ...
- 大水题(water)
题目描述dzy 定义一个 $n^2$ 位的数的生成矩阵 $A$ 为一个大小为 $n \times n$ 且 Aij 为这个数的第 $i \times n+j-n$ 位的矩阵.现在 dzy 有一个数 $ ...