本文参考: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