2019 SDN上机第2次作业 CWC

1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名、交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况

利用Python脚本创建拓扑

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController,CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections

class MyTopo(Topo):
    "Simple topology example."

    def __init__(self):
        Topo.__init__(self)
        switches = []
	
	# add switches (s1 and s2)
        for i in range(2):
            sw = self.addSwitch("s{}".format(i + 1))
            switches.append(sw)

	# add hosts and links
        count = 1
        for sw in switches:
            for i in range(3):
                h = self.addHost("h{}".format(count))
                self.addLink(sw, h)
                count += 1

	# add the link between two switches
    	self.addLink(switches[0], switches[1])

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

  

执行脚本

sudo mn --custom newtopo.py --topo mytopo --switch ovsk,protocols=OpenFlow13

检查连通性

验证端口的正确性

扫描二维码关注公众号,回复: 7769246 查看本文章

2. 直接在Open vSwitch下发流表,用vlan得到下列虚拟网段,请逐条说明所下发的流表含义

  • h1 -- h4互通
  • h2 -- h5互通
  • h3 -- h6互通
  • 其余主机不通

另开终端

sudo ovs-ofctl -O OpenFlow13 add-flow s1  priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=3,actions=push_vlan:0x8100,set_field:4098-\>vlan_vid,output:4

含义:把 h1, h2, h3 设在同一个VLAN中,在 s1 的报文外层压入一层 vlan tag,经过端口4向s2转发。

   其中 set_field = 4096+vlan_id。h1, h2, h3 的 vlan_id 分别为 0, 1, 2。

sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output:1
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output:2
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=2,actions=pop_vlan,output:3

含义:s1 接收 s2 传来的数据报时,弹出 vlan tag,再根据 dl_vlan,向端口1, 2, 3转发。

sudo ovs-ofctl -O OpenFlow13 add-flow s2  priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=3,actions=push_vlan:0x8100,set_field:4098-\>vlan_vid,output:4

含义:把 h4, h5, h6 设在同一个VLAN中,在 s2 的报文外层压入一层 vlan tag,经过端口4向s1转发。

   其中 set_field = 4096+vlan_id。h4, h5, h6 的 vlan_id 分别为 0, 1, 2。

sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=0,actions=pop_vlan,output:1
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=1,actions=pop_vlan,output:2
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=2,actions=pop_vlan,output:3

含义:s2 接收 s1 传来的数据报时,弹出 vlan tag,再根据 dl_vlan,向端口1, 2, 3转发。

3. 直接在Open vSwitch查看流表,提交OVS命令执行结果

使用指令查看 s1, s2 的当前流表

sudo ovs-ofctl -O OpenFlow13 dump-flows s1
sudo ovs-ofctl -O OpenFlow13 dump-flows s2

执行结果

4. 提交主机连通性测试结果,验证流表的有效性

使用先前的终端执行以下指令

5. 利用Wireshark抓包,分析验证特定报文

选取s1-eth2口抓取报文。

以下截图的最下面的高亮部分表示数据包的数据部分。

由于h2和h5可连通,我们可在截图中看到来自h5的报文。

 

猜你喜欢

转载自www.cnblogs.com/willofficial/p/11809220.html