实验2:Open vSwitch虚拟交换机实践

实验2:Open vSwitch虚拟交换机实践

一、实验目的

  1. 能够对Open vSwitch进行基本操作;
  2. 能够通过命令行终端使用OVS命令操作Open vSwitch交换机,管理流表;
  3. 能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中的Open vSwitch交换机

二、实验环境

Ubuntu 20.04 Desktop amd64

三、实验要求

(一)基本要求

1、ovs-vsctl基础操作实践:创建OVS交换机,以ovs-xxxxxxxxx命名,其中xxxxxxxxx为本人学号。在创建的交换机上增加端口p0和p1,设置p0的端口号为100,p1的端口号为101,类型均为internal;为了避免网络接口上的地址和本机已有网络地址冲突,需要创建虚拟网络空间(参考命令netns)ns0和ns1,分别将p0和p1移入,并分别配置p0和p1端口的ip地址为190.168.0.100、192.168.0.101,子网掩码为255.255.255.0;最后测试p0和p1的连通性。

sudo ovs-vsctl add-br ovs-032002534
sudo ovs-vsctl add-port ovs-032002534 p0 
sudo ovs-vsctl set Interface p0 ofport_request=100 type=internal
sudo ethtool -i p0
sudo ip netns add ns0
sudo ip link set p0 netns ns0
sudo ip netns exec ns0 ip addr add 192.168.0.100/24 dev p0
sudo ip netns exec ns0 ifconfig p0 promisc up
sudo ovs-vsctl add-port ovs-032002534 p1 
sudo ovs-vsctl set Interface p1 ofport_request=101 type=internal
sudo ethtool -i p1
sudo ip netns add ns1
sudo ip link set p1 netns ns1
sudo ip netns exec ns1 ip addr add 192.168.0.101/24 dev p1
sudo ip netns exec ns1 ifconfig p1 promisc up
sudo ip netns exec ns0 ping 192.168.0.101

a) /home/用户名/学号/lab2/目录下执行ovs-vsctl show命令、以及p0和p1连通性测试的执行结果截图;

执行 sudo ovs-vsctl show

p0和p1连通性测试

b) /home/用户名/学号/lab2/目录下开启Mininet CLI并执行pingall命令的截图、上述目录下查看OVS流表的命令结果截图,wireshark抓包截图

1、使用Mininet搭建的SDN拓扑,如下图所示,要求支持OpenFlow 1.3协议,主机名、交换机名以及端口对应正确。

img

生成拓扑

执行

sudo mn --custom 032002534.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6653 --switch ovsk,protocols=OpenFlow13

2、通过命令行终端输入“ovs-ofctl”命令,直接在s1和s2上添加流表,划分出所要求的VLAN。
为s1设置wlan

sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3
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

为s2设置wlan

sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3
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

s1和s2流表

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

测试连通性

image-20220921102546721

  • h1 – h3互通
  • h2 – h4互通
  • 其余主机不通

wireshark捕获s1端口3

(二)进阶要求

输入

sudo python3 topo2.py python

运行并测试联通性

阅读SDNLAB实验使用Mininet,编写Python代码,生成(一)中的SDN拓扑,并在代码中直接使用OVS命令,做到可以直接运行Python程序完成和(一)相同的VLAN划分。

抓包

(四)实验总结

这次实验感觉比上次难,大概是用到了上次实验所学的知识但是我又不能熟练掌握,以至于在生成拓扑的时候出现代码无法运行的错误,最后是通过仔细对照实验要求的拓扑图,对代码进行修改,代码才得以运行。除此以外,在ovs-vsctl show的时候出现了一个叫s1的交换机,紧接着后面一堆error,经查阅资料,可用sudo ovs-vsctl del-br s1来进行删除。

总的来说这次学到了ovs-vsctl相关基础操作,巩固了利用Mininet搭建SDN拓扑,以及wireshark的基本使用,但是对于前面几个实验所学的知识还是需要不断复习巩固,以免下次实验又磕磕碰碰。

posted @ 2022-09-21 12:56  VJJJJJJ  阅读(57)  评论(0编辑  收藏  举报