SDN-流表分析与增删改查

目录

基于OpenFlow的SDN网络

拓扑代码——mytopo.py

流表操作

查看流表

删除流表

添加流表


基于OpenFlow的SDN网络

SDN-流表分析与增删改查_第1张图片 基于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

SDN-流表分析与增删改查_第2张图片 标题

流表操作

查看流表

查看所有流表

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

流表实践

SDN-流表分析与增删改查_第3张图片 添加流表项

我们查看流表,刚开始为空,当然也就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是动作,意思是输出
SDN-流表分析与增删改查_第4张图片 OF1.0交换机信息

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

SDN-流表分析与增删改查_第5张图片 条件删除

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

SDN-流表分析与增删改查_第6张图片 删除流表项,添加丢弃流表项

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

SDN-流表分析与增删改查_第7张图片 添加丢弃流表项后的流表

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

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

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

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

 

你可能感兴趣的:(SDN)