一:准备工作
(1) 案例目的
掌握Open vSwitch下发流表操作:掌握添加、删除流表命令以及设备通信的原理
(2)实验内容
Mininet创建一个默认树形拓扑并指定Mininet的控制器进行基本的添加、删除流表操作。
使网络实现网络通信和不通信。
(3)网络拓扑结构
二:OpenFlow流表实验准备
(1)使用Python设置网络拓扑 --- tree_topo.py
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
class MyTopo(Topo):
def __init__(self):
super(MyTopo,self).__init__()
# add host
Host1 = self.addHost('h1')
Host2 = self.addHost('h2')
Host3 = self.addHost('h3')
switch1 = self.addSwitch('s1')
switch2 = self.addSwitch('s2')
self.addLink(Host1,switch1)
self.addLink(Host2,switch1)
self.addLink(Host3,switch2)
self.addLink(switch1,switch2)
topos = {"mytopo":(lambda:MyTopo())}
(2)启动远程Ryu控制器
ryu-manager simple_switch.py
(3)Mininet开始启动网络拓扑
sudo mn --custom tree_topt.py --topo=mytopo --controller=remote,ip=127.0.0.1,port=6633
三:进行OpenFlow流表分析
(1)主要流表操作命令
dpctl dump-flows 查看静态流表
dpctl del-flows 删除所有交换机中的流表
dpctl add-flow in_port=1,actions=output:2 添加流表项到所有交换机,注意:一般是成对添加,实现双方通信
dpctl add-flow in_port=2,actions=output:1
sh ovs-ofctl del-flows s1 in_port=2 删除指定交换机的,匹配in_port=2的流表
dpctl del-flows in_port=1 删除所有交换机中符合in_port=1的流表
dpctl add-flow in_port=2,actions=drop 添加丢弃数据包的流表项
(2)查看是否启动Mininet后进行了数据包发送,导致控制器下发流表
重新启动Ryu和Mininet,直接查看交换机中是否有流表.
1.先启动交换机,查看流表,为空
2.启动控制器,之后再查看交换机中流表信息,依旧为空
3.主机使用pingall命令后,查看流表,发生变化
(3)删除所有流表
由于没有流表,所有ping操作不可达,要关闭RYU控制器。
(4)添加h1与和h2之间的流表转发
1.单个交换机操作
2.h1 ping h2,信息可达(因为有流表进行指导)
3.h1 ping h3,消息不可达(因为交换机2中没有流表项,并且交换机1也没有配置到port3的动作
4.实现所有网络所有主机互通(先清空流表)
为所有交换机添加端口1和端口2的操作---两个交换机公共操作
dpctl add-flow in_port=1,actions=output:2
dpctl add-flow in_port=2,actions=output:1
为交换机之间端口提供交互---只操作s1(因为只有s1有端口3)
sh ovs-ofctl add-flow s1 in_port=1,actions=output:2,3
sh ovs-ofctl add-flow s1 in_port=3,actions=output:1,2
sh ovs-ofctl add-flow s1 in_port=2,actions=output:1,3
或者:我们直接添加下面流表也可以实现上面操作
mininet> dpctl add-flow in_port=1,actions=output:2,3
mininet> dpctl add-flow in_port=2,actions=output:1,3
mininet> dpctl add-flow in_port=3,actions=output:1,2
(5)为交换机2添加丢弃流表,使得两个交换机不可通信(在前面互通基础上实现)