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