OpenDaylight与Mininet应用实战之流表操作三

本文简要介绍在虚拟机环境下,主要目的是对Open vSwitch下发的流表操作,通过OpenDaylight与Mininet熟悉添加、删除流表的命令及设备通信的原理。

1 流表作用

在SDN环境下,当交换机收到一个数据包并且交换机中没有与该数据包匹配的流表项时,交换机将此数据包发送给控制器,由控制器决策数据包如何处理。控制器下发决策后,交换机根据控制器下发的信息来进行数据包的处理,即转发或者丢弃该数据包。我们可以通过对流表操作来控制交换机的转发行为。下面简单介绍一下流表的基本操作。

2 环境准备

参考本专题前面两篇文章装好OpenDaylight(以下简称“ODL”)和Mininet的虚拟机环境。

3 Mininet连接ODL控制器

首先我们在已安装有相关环境的虚拟机终端中启动ODL和Mininet,Mininet创建一个默认树形拓扑并选择Mininet的控制器为ODL。ODL启动详见:OpenDaylight与Mininet应用实战之基本环境搭建(一)

# mn –switch ovsk –controller=remote,ip=[ODL_IP],port=6633[默认端口]

在ODL的Web界面中我们可以看到已连接上ODL的交换机。

4 流表的简单操作

4.1 从终端对流表进行操作

新建一个终端查看当前交换机上的流表,返回值应为空。

root@ubuntu:/# ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):

在Mininet中pingall一下,交换机下面的两台主机h1、h2应能互相通信,如果不能通信请检查交换机是否与ODL正确连接。

mininet> pingall
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (0/2 lost)

此时再查看交换机s1中流表应为两条。

root@ubuntu:/# ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):
cookie=0x0, duration=76.445s, table=0, n_packets=0, n_bytes=0, priority=1,ip,nw_dst=10.0.0.2 actions=mod_dl_dst:4a:d3:cf:8c:cc:4c,output:2
cookie=0x0, duration=76.49s, table=0, n_packets=2, n_bytes=196, priority=1,ip,nw_dst=10.0.0.1 actions=mod_dl_dst:46:bc:5d:64:2f:06,output:1

我们看到每条流规则由一系列字段组成,它们由基本字段、条件字段和动作字段三部分组成。有了流表后交换机就根据流表来进行数据包的操作,当然我们也可以人工的进行流表的新增、修改、删除操作。在我们这个环境下有两种方式对流表进行操作,一种是直接在终端下输入命令,另一种则是在ODL的Web界面下操作,相比而言第二种的图形化界面更加人性化一点。

例如让交换机丢弃从2号端口发来的所有数据包。

# ovs-ofctl add-flow s1 priority=1,in_port=2,actions=drop

增加这条流表以后,Mininet中h1和h2主机之间没有办法通信了。

mininet> pingall
*** Ping: testing ping reachability
h1 -> X
h2 -> X
*** Results: 100% dropped (2/2 lost)

我们再删除一条流规则:例如删除条件字段中包含in_port=2的所有流表。

# ovs-ofctl del-flows br0 in_port=2

因为我们之前添加的丢弃2号端口包的流表已被删除,这时Mininet中h1和h2主机又可以正常通信了。

4.2 通过ODL的Web界面进行流表操作

我们进入ODL的Web界面里面的Troubleshoot标签页,点击左侧Existing Nodes下对应交换机的Flows就能看到当前交换机上的流表。

切换至Flows标签页下,就可以进行流表的操作了。

点击Add Flow Entry根据字段填写相应的值,这里我们将来自1端口的包丢弃,输入一个流表名称,Node选择对应交换机,Input Port选择1端口s1-eth1(1),最后的Actions选择Drop。填写后点击Install Flow,流表便由控制器写入交换机了。这里一条流表中可以按顺序执行多个Action。

此时Mininet两台主机又无法通信了,将这条流表删除后两台主机便又可以正常通信。

5 总结

本文主要让读者对OpenFlow流表有更进一步的了解,简略介绍一些基本的流表操作。后续读者可以进行比如改写源和目标机的ip和mac地址、对数据包泛洪、回环等操作,用户可以根据需求通过修改流表来自主地控制转发行为,这本身也是SDN的初衷之一,也使得我们控制网络更加的便捷、灵活、多样。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2014-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员宝库

PHP 面试知识梳理

算法与数据结构 BTree和B+tree BTree B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉...

440120
来自专栏开源优测

RFC1945 超文本传输协议--HTTP/1.0 之一

12220
来自专栏orientlu

BLE 广播格式定义

低功耗蓝牙两类报文 : 广播报文 和 数据报文。 本文讨论广播报文数据段,不包括完整报文其他部分,比如前导,接入地址等

81320
来自专栏IT派

PHP面试知识梳理

B树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉树,B树的每个内节点有多个分支,即多叉。

34130
来自专栏SDNLAB

OpenFlow协议中instruction&action概念解读

阅读任何一个协议都要注意的一点是这个协议中所定义的专有术语,对这些术语的理解不到位的话也会造成对协议的理解偏差。本文想和大家分享几个可能容易混淆的术语。 在Op...

31060
来自专栏Android 研究

OKHttp源码解析(四)--中阶之拦截器及调用链

那我们书接上文。上篇文章已经说明了OKHttp有两种调用方式,一种是阻塞的同步请求,一种是异步的非阻塞的请求。但是无论同步还是异步都会调用下RealCall的 ...

33450
来自专栏技术小讲堂

使用WCF进行跨平台开发之三(JAVA调用WCF服务)1.开发必备2.生成WCF客户端3.开发程序4.结束语

     前两篇写了在.net中和php中调用WCF。这一篇将要解决java中调用WCF的问题,使用的依旧是上一篇中托管在IIS中的WCF服务,本来我是打算用a...

44850
来自专栏阮一峰的网络日志

MIME笔记

MIME的全称是"Multipurpose Internet Mail Extensions",中译为"多用途互联网邮件扩展",指的是一系列的电子邮件技术规范,...

15040
来自专栏腾讯玄武实验室的专栏

异常中的异常:借助系统异常处理特例实现匪夷所思的漏洞利用

内存的读、写、执行属性是系统安全最重要的机制之一。通常,如果要改写内存中的数据,必须先确保这块内存具有可写属性,如果要执行一块内存中的代码,必须先确保这块内存具...

15600
来自专栏用户画像

第31章 配置链路聚合

190. 在S3610 交换机上创建包含有端口Ethernet1/0/1,ID 为2 的聚合端口,其正确命令是_____。B

10810

扫码关注云+社区

领取腾讯云代金券