Mininet教程(五):流表

Mininet教程(五):流表

SDNLAB:Mininet入门与实战 笔记

拓扑结构

在mininet/custom文件中新建py脚本(命名为topo-2sw-3host.py),生成3主机2交换机的网络:

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 ):
        Topo.__init__( self )

        # hosts & switches
        Host1 = self.addHost( 'h1' )
        Host2 = self.addHost( 'h2' )
        Host3 = self.addHost( 'h3' )
        Switch1 = self.addSwitch( 's1' )
        Switch2 = self.addSwitch( 's2' )

        # links
        self.addLink( Host1, Switch1 )
        self.addLink( Host2, Switch1 )
        self.addLink( Host3, Switch2 )
        self.addLink( Switch1, Switch2 )


topos = {'mytopo': ( lambda : MyTopo() ) }

在终端中执行命令:

sudo mn --custom topo-2sw-3host.py --topo mytopo

controller使用默认设置。

流表相关命令

查看静态流表

在mininet环境下:

mininet> dpctl dump-flows #查看静态流表

刚开始交换机s1、s2流表为空。
主机的互ping操作,使得交换机的流表更新(通过与controller通信)。譬如h1 ping h2可以更新s1的流表,h1 ping h3可以更新s1和s2的流表。

mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
*** s2 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):

mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=3.92 ms
^C
--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 3.920/3.920/3.920/0.000 ms

mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=7.596s, table=0, n_packets=0, n_bytes=0, idle_timeout=60, idle_age=7, priority=65535,icmp,in_port=2,vlan_tci=0x0000,dl_src=5e:63:4a:82:dd:33,dl_dst=26:35:0a:98:23:f9,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_tos=0,icmp_type=0,icmp_code=0 actions=output:1
 cookie=0x0, duration=2.356s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=2, priority=65535,arp,in_port=1,vlan_tci=0x0000,dl_src=26:35:0a:98:23:f9,dl_dst=5e:63:4a:82:dd:33,arp_spa=10.0.0.1,arp_tpa=10.0.0.2,arp_op=1 actions=output:2
 cookie=0x0, duration=2.354s, table=0, n_packets=1, n_bytes=42, idle_timeout=60, idle_age=2, priority=65535,arp,in_port=2,vlan_tci=0x0000,dl_src=5e:63:4a:82:dd:33,dl_dst=26:35:0a:98:23:f9,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=1 actions=output:1
 cookie=0x0, duration=2.351s, table=0, n_packets=0, n_bytes=0, idle_timeout=60, idle_age=2, priority=65535,arp,in_port=2,vlan_tci=0x0000,dl_src=5e:63:4a:82:dd:33,dl_dst=26:35:0a:98:23:f9,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=2 actions=output:1
 cookie=0x0, duration=2.349s, table=0, n_packets=0, n_bytes=0, idle_timeout=60, idle_age=2, priority=65535,arp,in_port=1,vlan_tci=0x0000,dl_src=26:35:0a:98:23:f9,dl_dst=5e:63:4a:82:dd:33,arp_spa=10.0.0.1,arp_tpa=10.0.0.2,arp_op=2 actions=output:2
*** s2 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):

添加流表

mininet> dpctl add-flow in_port=1,actions=output:2 #对所有的switch添加
mininet> dpctl add-flow in_port=2,actions=drop #丢弃数据包

譬如:

mininet> dpctl add-flow in_port=1,actions=output:2
*** s1 ------------------------------------------------------------------------
*** s2 ------------------------------------------------------------------------

mininet> dpctl add-flow in_port=2,actions=output:1
*** s1 ------------------------------------------------------------------------
*** s2 ------------------------------------------------------------------------

mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=16.432s, table=0, n_packets=0, n_bytes=0, idle_age=16, in_port=1 actions=output:2
 cookie=0x0, duration=9.793s, table=0, n_packets=0, n_bytes=0, idle_age=9, in_port=2 actions=output:1
*** s2 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=16.432s, table=0, n_packets=0, n_bytes=0, idle_age=16, in_port=1 actions=output:2
 cookie=0x0, duration=9.793s, table=0, n_packets=0, n_bytes=0, idle_age=9, in_port=2 actions=output:1

此时h1、h2之间互ping,因为已经有流表记录了相应操作,所以switch不需要再与controller通信了。但h1和h3之间不可以互ping,因为流表没有指定对于端口3的操作。

mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.048 ms
^C
--- 10.0.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1021ms
rtt min/avg/max/mdev = 0.048/0.112/0.177/0.065 ms

mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=76.287s, table=0, n_packets=2, n_bytes=196, idle_age=3, in_port=1 actions=output:2
 cookie=0x0, duration=69.648s, table=0, n_packets=2, n_bytes=196, idle_age=3, in_port=2 actions=output:1
*** s2 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=76.287s, table=0, n_packets=0, n_bytes=0, idle_age=76, in_port=1 actions=output:2
 cookie=0x0, duration=69.648s, table=0, n_packets=0, n_bytes=0, idle_age=69, in_port=2 actions=output:1

mininet> h1 ping h3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=9 Destination Host Unreachable
From 10.0.0.1 icmp_seq=10 Destination Host Unreachable
From 10.0.0.1 icmp_seq=11 Destination Host Unreachable
^C
--- 10.0.0.3 ping statistics ---
14 packets transmitted, 0 received, +3 errors, 100% packet loss, time 13305ms
pipe 4

当更改流表为drop时,h1和h2也不能ping通了:

mininet> dpctl add-flow in_port=1,actions=drop
*** s1 ------------------------------------------------------------------------
*** s2 ------------------------------------------------------------------------

mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=215.839s, table=0, n_packets=0, n_bytes=0, idle_age=215, in_port=2 actions=output:1
 cookie=0x0, duration=9.080s, table=0, n_packets=0, n_bytes=0, idle_age=160, in_port=1 actions=drop
*** s2 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=215.840s, table=0, n_packets=0, n_bytes=0, idle_age=215, in_port=2 actions=output:1
 cookie=0x0, duration=9.080s, table=0, n_packets=0, n_bytes=0, idle_age=221, in_port=1 actions=drop

mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=10 Destination Host Unreachable
From 10.0.0.1 icmp_seq=11 Destination Host Unreachable
From 10.0.0.1 icmp_seq=12 Destination Host Unreachable
^C
--- 10.0.0.2 ping statistics ---
15 packets transmitted, 0 received, +3 errors, 100% packet loss, time 14329ms
pipe 4

删除流表

mininet> dpctl del-flows #删除所有流表
mininet> dpctl del-flows in_port=2 #仅对入口2
mininet> sh ovs-ofctl del-flows s1 in_port=2 #仅对s1&入口2

譬如:

mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=330.753s, table=0, n_packets=0, n_bytes=0, idle_age=330, in_port=2 actions=output:1
 cookie=0x0, duration=123.994s, table=0, n_packets=18, n_bytes=1260, idle_age=95, in_port=1 actions=drop
*** s2 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=330.754s, table=0, n_packets=0, n_bytes=0, idle_age=330, in_port=2 actions=output:1
 cookie=0x0, duration=123.994s, table=0, n_packets=0, n_bytes=0, idle_age=336, in_port=1 actions=drop
 
mininet> dpctl del-flows in_port=2
*** s1 ------------------------------------------------------------------------
*** s2 ------------------------------------------------------------------------

mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=139.906s, table=0, n_packets=18, n_bytes=1260, idle_age=110, in_port=1 actions=drop
*** s2 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=139.906s, table=0, n_packets=0, n_bytes=0, idle_age=352, in_port=1 actions=drop

mininet> sh ovs-ofctl del-flows s1 in_port=1

mininet> dpctl dump-flows
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
*** s2 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=263.703s, table=0, n_packets=0, n_bytes=0, idle_age=476, in_port=1 actions=drop

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值