一、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的更多相关文章

随机推荐

  1. XMU 1606 nc与滴水问题 【模拟】

    1606: nc与滴水问题 Time Limit: 1000 MS  Memory Limit: 64 MBSubmit: 85  Solved: 27[Submit][Status][Web Boa ...

  2. YTU 2597: 编程题B-选拔飞行员

    2597: 编程题B-选拔飞行员 时间限制: 1 Sec  内存限制: 128 MB 提交: 131  解决: 35 题目描述 2100年空军选拔高中生飞行学员基本条件要求如下,年龄范围:16-19周 ...

  3. 删除oracle数据库用户的dba权限(当出现同一用户DBA可以登录,normal不能登录)“无法对SYS拥有的对象创建触发器”

    系统报错:“无法对SYS拥有的对象创建触发器”,搞不懂是什么原因了,到底这触发器要用什么用户才能建立啊? ORA-04089: 无法对 SYS 拥有的对象创建触发器 第一种方式: 首先,用sys用户a ...

  4. 【原创】MapReduce备份Elasticsearch数据到HDFS(JAVA)

    一.环境:JAVA8,Elasticsearch-5.6.2,Hadoop-2.8.1二.实现功能:mapreduce读elasticsearch数据.输出parquet文件.多输出路径三.主要依赖 ...

  5. python pip安装第三方模块

    一.pip工具使用 安装windows版本python,自带pip工具.2者路径相同. 如果设置了环境路径,可以直接在命令提示符窗口下尝试运行pip.如果没有设置环境路径,可以先cd命令到pip工具的 ...

  6. P3161 [CQOI2012]模拟工厂

    传送门 先枚举选择哪些订单,然后转为判定是否可行 在能完成的情况下肯定是花越多时间提高生产力越优 我们设可以有\(x\)单位时间来提高生产力,那么如果当前离下一个订单的时间为\(T\)时,这个订单要\ ...

  7. 码云 fatal: Authentication failed for

    最近push代码到码云时,push失败,提示fatal: Authentication failed for,解决方法就是: 在git命令行中输入 git config --system --unse ...

  8. Golang 入门 : 理解并发与并行

    Golang 的语法和运行时直接内置了对并发的支持.Golang 里的并发指的是能让某个函数独立于其他函数运行的能力.当一个函数创建为 goroutine 时,Golang 会将其视为一个独立的工作单 ...

  9. django views视图函数

    Django views.py视图文件 一. 创建views.py文件,在工程文件夹根目录创建views.py视图文件,其实任意文件名都可以,使用views是为了遵循传统. 注:所有的views函数都 ...

  10. 校赛F 比比谁更快(线段树)

    http://acm.cug.edu.cn/JudgeOnline/problem.php?cid=1153&pid=5 题意:给你一个字符串,各两个操作: ch=0,[l,r]降序 ch=1 ...