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

检查连通性

验证端口的正确性

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的报文。

来源:https://www.cnblogs.com/willofficial/p/11809220.html