SDN-Mininet中流表应用实战
一、案例目的掌握Open vSwitch下发流表操作;掌握添加、删除流表命令以及设备通信的原理。Mininet创建一个默认的树形拓扑并指定Mininet的控制器,进行基本的添加、删除流表操作,使网络实现网络通信和不通信。二、网络拓扑三、操作步骤1.创建流表操作环境1.在custom目录下自定义拓扑脚本exper1.py#!/usr/bin/pythonfrom mininet.topo impor
一、案例目的
掌握Open vSwitch下发流表操作;
掌握添加、删除流表命令以及设备通信的原理。
Mininet创建一个默认的树形拓扑并指定Mininet的控制器,进行基本的添加、删除流表操作,使网络实现网络通信和不通信。
二、网络拓扑
三、操作步骤
1.创建流表操作环境
1.在custom目录下自定义拓扑脚本exper1.py
#!/usr/bin/python
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):
"Simple topology example."
def __init__(self):
"Create custom topo."
# Initialize topology
Topo.__init(self)
# Add hosts and switches
Host1=self.addHost('h1')
Host2=self.addHost('h2')
Host3=self.addHost('h3')
Switch1=self.addSwitch('s1')
Switch2=self.addSwitch('s2')
# Add links
self.addLink(Host1,Switch1)
self.addLink(Host2,Switch1)
self.addLink(Host3,Switch2)
self.addLink(Switch1,Switch2)
topos={'mytopo':(lambda:MyTopo())}
2.创建拓扑:
sudo mn --custom exper1.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633
其中 ip=127.0.0.1表示使用的是本地 IP地址
2、查看流表
1.查看静态流表(发现没有流表)
dpctl dump-flows
2.这时候输入pingall指令,发现主机之间是没法通信的
3.先开启ryu,然后再pingall,这时是可以进行主机间通信的
ryu-manager simple_switch.py
4.因为ping操作本身是一个通信的过程,经过通信,交换机里便会留下流表,这时候交换机里就已经存在流表了
3.添加流表
1.删除之前的所有流表,此时流表为空
dpctl del-flows
2.手动添加流表
添加 输入端口为1,输出端口为2 的流表
dpctl add-flow in_port=1,actions=output:2
添加 输入端口为2,输出端口为1 的流表
dpctl add-flow in_port=2,actions=output:1
3.这时候 h1和h2是可以相互通信的
4.但是h1 h2 是无法与h3相互通信的,因为没有添加3号端口的流表
5.于是我重新加入了6条流表,保证 1 2 3 三个端口可以相互作为进出端口,但是只能查看到每个交换机里面只有3个流表,且主机之间无法相互通信,想知道是为什么?
4.删除流表
1.删除交换机 s1 中端口号为 1 的流表
sh ovs-ofctl del-flows s1 in_port=1
2.删除所有交换机中输入端口号为 2 的流表
dpctl del-flows in_port=2
5.添加丢弃数据包的流表
让交换机丢弃从 1 号端口发来的所有数据包
1.先删除所有的流表
2.虽然删除了,主机之前还是可以相互通信的 因为pingall是控制器下发的流表
3.添加输入端口为 1 的drop流表
dpctl add-flow in_port=1,action=drop
4.虽然添加成功,但仍旧可以ping通,因为原本的流表(刚刚pingall的一下,控制器下发了流表)在前面,优先级较高
5.需要删除所有的流表,并再次添加相应的 drop 流表,便可以实现 drop 的功能,使得所有的主机之间不能相互通信
更多推荐
所有评论(0)