Open vSwitch流表应用实战

本文参考:Open vSwitch流表应用实战

一个通过改变流表下发而实现的互相通信实验。

实验目的:

  • 掌握Open vSwitch下发流表操作;
  • 掌握添加、删除流表命令以及设备通信的原理。

原理:......我们可以通过对流表操作来控制交换机的转发行为。

实验参考图:

实验准备:

我的环境:装有ODL控制器和Mininet的Ubuntu14.04操作系统,单系统实现。
ip地址:192.168.1.101
运行ODL的终端:A;运行Mininet的终端:B。

启动ODL:

cd /目录/bin //ODL的bin目录

./karaf

等到终端A出现:

Listening on port 12001 bound on address 0.0.0.0/0.0.0.0
Backlog is 1000, linger timeout is 2000, and read timeout is 0

证明ODL启动,可以用命令查看6633端口:

netstat -anp|grep 6633

接下来启动Mininet,连接ODL控制器:

sudo mn --controller=remote,ip=192.168.1.101,port=6633

流表的简单操作

查看初始流表:

sh ovs-ofctl dump-flows s1

pingall

查看pingall之后的流表:

sh ovs-ofctl dump-flows s1

多了两条:

我们看到每条流规则由一系列字段组成,它们由基本字段、条件字段和动作字段三部分组成。有了流表后交换机就根据流表来进行数据包的操作,当然我们也可以人工的进行流表的新增、修改、删除操作,在我们这个环境下可直接在终端下输入命令。

添加删除流表

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

sh ovs-ofctl add-flow s1 priority=12,in_port=2,actions=drop

(注:优先级比其他流表优先级高)

和之前的流表对比
未删除的时候:

执行之后:

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

再删除一条流规则:如将删除条件字段中包含in_port=2的所有流表,如下图所示,将含有in_port=2的所有流表被删除了.

sh ovs-ofctl del-flows s1 in_port=2

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

实验结束。

实验结论

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

2016/10/19

posted @ 2016-10-19 16:58  Wasdns  阅读(1497)  评论(0编辑  收藏  举报