1.作业要求:
- 利用mininet创建给定的拓扑,要求拓扑支持OpenFlow 1.3协议,主机名、交换机名以及端口对应正确,并给出拓扑Mininet执行结果,展示端口连接情况
- 直接在Open vSwitch下发流表,实现给定的连通性要求,并逐条说明所下发的流表含义
- 直接在Open vSwitch查看流表,提交OVS命令执行结果
- 提交主机连通性测试结果,验证流表的有效性
- 利用Wireshark抓包,分析验证特定报文
- 作业博客链接:https://edu.cnblogs.com/campus/fzu/fzusdn2019/homework/9925
2.具体操作步骤与截图说明:
实验环境:VMware Workstation Pro14.1、ubuntu-16.04
(1)利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名、交换机名以及端口对应正确,给出拓扑Mininet执行结果,展示端口连接情况:
- 给定的拓扑结构如下所示:
操作步骤:
a.利用可视化工具miniedit搭建如下拓扑结构:
b.进入edit->preferences,勾选OpenFlow1.3和start CLI两个功能项:
c.点击Run按钮,运行网络,并使用net命令查看网络拓扑:
通过使用net命令,我们可以从网络拓扑结构中看出交换机s1的端口4与交换机s2的端口1相连接;主机h1、h2、h3分别与交换机s1的端口1、端口2、端口3相连;主机h4、h5、h6分别与交换机s2的端口2、端口3、端口4相连。
(2)在Open vSwitch下发流表,实现如下连通性要求,逐条说明所下发的流表含义:
- h1 -- h4互通
- h2 -- h5互通
- h3 -- h6互通
- 其余主机不通
a.将主机h1、h2、h3发送给交换机s1的数据包打上不同的vlan tag,并从s1的端口4向交换机s2转发:
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:4
//输入端口为s1的1端口,输出端口为s1的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
//输入端口为s1的2端口,输出端口为s1的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
//输入端口为s1的3端口,输出端口为s1的4端口;
b.将发送给交换机s1端口4的数据包去除vlan tag,并根据不同的标签发送给相对应的主机:
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
c.将主机h4、h5、h6发送给交换机s2的数据包打上不同的vlan tag,并从s2的端口1向交换机s1转发:
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:1
//输入端口为s2的2端口,输出端口为s2的1端口;
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=3,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:1
//输入端口为s2的3端口,输出端口为s2的1端口;
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=4,actions=push_vlan:0x8100,set_field:4098-\>vlan_vid,output:1
//输入端口为s2的4端口,输出端口为s2的1端口;
d.将发送给交换机s2端口1的数据包去除vlan tag,并根据不同的标签发送给相对应的主机:
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=0,actions=pop_vlan,output:2
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=1,actions=pop_vlan,output:3
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=2,actions=pop_vlan,output:4
参考链接:https://blog.csdn.net/rocson001/article/details/73163041
(3)直接在Open vSwitch查看流表,提交OVS命令执行结果:
a.查看交换机s1的流表:
sudo ovs-ofctl -O OpenFlow13 dump-flows s1
b.查看交换机s2的流表:
sudo ovs-ofctl -O OpenFlow13 dump-flows s2
(4)提交主机连通性测试结果,验证流表的有效性:
从主机连通性测试结果中可以看出,主机h1只能与主机h4ping通,主机h2只能与主机h5ping通,主机h3只能与主机h6ping通,其余主机ping不通,从而验证了流表的有效性。
(5)利用Wireshark抓包,分析验证特定报文:
a.启动wireshark:
sudo wireshark
b.启动wireshark之后执行pingall命令,然后在wireshark中进行报文抓取,可通过过滤器选中ICMP报文,查看主机间的通信信息:
3.实验总结:
通过这次实验,我熟悉了Open vSwitch这一工具的使用,了解了如何通过一些常用的OVS命令来下发流表和查看流表,如何检测主机的连通性测试效果以及如何利用Wireshark抓包,分析验证特定报文,有了不少的收获!