SDN-流表分析与增删改查

目录

基于OpenFlow的SDN网络

拓扑代码——mytopo.py

流表操作

查看流表

删除流表

添加流表


基于OpenFlow的SDN网络

基于OpenFlow的SDN网络

上图以主机h1向网络发送数据包时的情况为例,若发送给主机h2,则路线为①②③⑥,每条路径的解释见图注。若读者没有了解过OpenFlow协议,请参考下面的文章,可以看看里面的数据结构,以及Packetin、Packetout、Flow-Mod消息、流表的字段等。

SDN-OpenFlow1.0协议分析

 

拓扑代码——mytopo.py

from mininet.topo import Topo
 
class MyTopo( Topo ):
 
    def __init__( self ):
 
        # initilaize topology   
        Topo.__init__( self )
 
        # add hosts and switches
        h1 = self.addHost( 'h1' )
        h2 = self.addHost( 'h2' )
        h3 = self.addHost( 'h3' )
        s1 = self.addSwitch( 's1' )
        s2 = self.addSwitch( 's2' )
 
        # add links
        self.addLink(h1,s1,1,1)
        self.addLink(h2,s1,1,3)
        self.addLink(h3,s2,1,1)
        self.addLink(s1,s2,2,2)
 
topos = { 'mytopo': ( lambda: MyTopo() ) }

你也可以使用图形化界面miniedit进行网络构建

SDN-Mininet安装使用

启动控制器,博主使用的是OpenDaylight

启动mininet

标题

流表操作

查看流表

查看所有流表

dpctl dump-flows

仅查看某个交换机的流表需要使用ovs-ofctl, 本文主要使用dpctl,其他命令请查看SDN-Mininet命令详解(dpctl ovs-vsctl ovs-ofctl)

删除流表

删除所有流表命令

dpctl del-flows

 在SDN-OpenFlow1.0协议分析中的控制器配置流表(Flow-Mod消息)部分是不是还提到了删除部分流表呀,我们也可以根据条件进行删除。

删除入端口号为1和2的流表项命令

dpctl del-flows in_port=1
dpctl del-flows in_port=2

上面的dpctl命令是针对所有流表的,那么针对某个交换机的流表如何删除呢?

对某个交换机的流表进行删除命令(删除交换机s1流表中入端口号为2的流表项)

sh ovs-ofctl del-flows s1 in_port=2

添加流表

添加入端口为1,出端口为2及入端口为2,出端口为1的流表项

dpctl add-flow in_port=1,actions=output:2
dpctl add-flow in_port=2,actions=output:1

添加丢弃数据包的流表,丢弃入端口为2的数据包

dpctl add-flow in_port=2,actions=drop

流表实践

添加流表项

我们查看流表,刚开始为空,当然也就ping不通。接下来添加了两个流表项,再次ping,可以看到h1与h3之间可以ping通。

可以看到两个交换机的1、2端口均打开,而在构建网络时主机h2是3号端口,所以ping不通。

cookie=0x0, duration=3.146s, table=0, n_packets=0, n_bytes=0, idle_timeout=60, priority=65535,arp,in_port="s1-eth1",vlan_tci=0x0000,dl_src=c2:9d:8f:ac:b9:1c,dl_dst=a6:a5:54:a4:3f:9b,arp_spa=10.0.0.3,arp_tpa=10.0.0.1,arp_op=2 actions=output:"s1-eth2"

上面是SDN-Mininet安装使用文章中pingall命令后的流表,多了些字段。

  • cookie为控制器定义的流表项标识符
  • duration是持续时间
  • table是流表的id
  • n_packets大概是缓冲的数据包数(不太清楚,有读者知道,请下方评论)
  • n_bytes大概是缓冲的字节数(不太清楚,有读者知道,请下方评论)
  • idle_timeout是空闲时间
  • priority是流表项的优先级
  • in _port是入端口
  • vlan_tal
  • dl_src是以太网源地址
  • dl_dst是以太网目的地址
  • arp_spa
  • arp_tpa
  • arp_op
  • actions是动作列表
  • output是动作,意思是输出
OF1.0交换机信息

查看OF1.0交换机,可以看到和之前分析协议时写的一样,有一些动作等。

条件删除

接下来我们删除交换机s1中入端口为2的流表项,h1与h3就无法ping通了。

删除流表项,添加丢弃流表项

 接下来,我删除了所有流表,重新添加端口1、2的流表项,使之可以ping通,再添加丢弃流表项,使通过端口2的数据包丢弃,最后h1与h3之间无法ping通。

添加丢弃流表项后的流表

查看流表可以看出,每个交换机均添加了一条action为drop的流表项。

mininet其他命令请查看SDN-Mininet命令详解(dpctl ovs-vsctl ovs-ofctl)

更多SDN相关内容,请查看:SDN-自学笔记

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

 

  • 5
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lady_killer9

感谢您的打赏,我会加倍努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值