前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenDaylight与Mininet应用实战之流表操作三

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

作者头像
SDNLAB
发布2018-03-28 15:18:35
1.5K0
发布2018-03-28 15:18:35
举报
文章被收录于专栏:SDNLABSDNLAB

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

1 流表作用

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

2 环境准备

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

3 Mininet连接ODL控制器

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

代码语言:javascript
复制
# mn –switch ovsk –controller=remote,ip=[ODL_IP],port=6633[默认端口]

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

odl-mini-03-device
odl-mini-03-device

4 流表的简单操作

4.1 从终端对流表进行操作

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

代码语言:javascript
复制
root@ubuntu:/# ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):

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

代码语言:javascript
复制
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (0/2 lost)

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

代码语言:javascript
复制
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号端口发来的所有数据包。

代码语言:javascript
复制
# ovs-ofctl add-flow s1 priority=1,in_port=2,actions=drop
odl-mini-03-add flow
odl-mini-03-add flow

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

代码语言:javascript
复制
mininet> pingall
*** Ping: testing ping reachability
h1 -> X
h2 -> X
*** Results: 100% dropped (2/2 lost)

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

代码语言:javascript
复制
# ovs-ofctl del-flows br0 in_port=2

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

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

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

odl-mini-03-troubleshoot
odl-mini-03-troubleshoot

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

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

odl-mini-03-flow detail
odl-mini-03-flow detail

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

5 总结

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 流表作用
  • 2 环境准备
  • 3 Mininet连接ODL控制器
  • 4 流表的简单操作
    • 4.1 从终端对流表进行操作
      • 4.2 通过ODL的Web界面进行流表操作
      • 5 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档