本实验中本实验用VxLAN连接两个独立的mininet环境,并通过在mininet环境中设置搭建VxLAN,显示VxLAN的优势。并且在没有控制器的条件下,通过下发流表的方式确保网络的连通性。
VxLAN控制平面隧道的实现方式主要分为三种:通过数据平面自学习、通过控制协议学习和通过SDN Controller实现。本实验中通过SDN控制器实现两个mininet环境的通信,并且关闭控制器,下发流表引导数据包转发。
如下图所示,在两台虚拟机中利用mininet创建两个网络,利用VxLAN连通这两个mininet环境。关闭默认的控制器后,通过下发流表确保网络的连通性。本实验要求ovs版本在2.0.1以上。
虚拟机1的IP:
虚拟机2的IP:
1 分别在vm1和vm2中创建网络拓扑,包含1台主机和1个交换机:
sudo mn --topo single,1
2 分别在vm1和vm2中创建vxlan接口:
mininet> sh ovs-vsctl add-port s1 vxlan
3 配置vm1和vm2中的vxlan接口:
vm1:
mininet> sh ovs-vsctl set interface vxlan type=vxlan option:remote_ip=10.0.0.7 option:key=5566 ofport_request=9
vm2:
mininet> sh ovs-vsctl set interface vxlan type=vxlan option:remote_ip=10.0.0.6 option:key=5566 ofport_request=9
vm1:
vm2:
4 设置vm1中的主机IP:
mininet> h1 ifconfig h1-eth0 10.0.0.1
5 设置vm2中的主机IP:
mininet> h1 ifconfig h1-eth0 10.0.0.2
6 用vm1中的主机ping vm2中的主机:
mininet> h1 ping –c 5 10.0.0.2
7 分别关闭vm1和vm2中默认的控制器:
8 再次用vm1中的主机ping vm2中的主机:
9 停止控制器后,两个vm中的主机无法通信,为了使两个主机能够通信,分别在vm1和vm2中下发流表:
vm1:
mininet>sh ovs-ofctl add-flow s1 ‘in_port=1,actions=set_field:5566->tun_id,output:9’ Mininet>sh ovs-ofctl add-flow s1 in_port=9,tun_id=5566,actions=output:1 mininet>sh ovs-ofctl dump-flows s1
vm2:
mininet>sh ovs-ofctl add-flow s1 ‘in_port=1,actions=set_field:5566->tun_id,output:9’ mininet>sh ovs-ofctl add-flow s1 in_port=9,tun_id=5566,actions=output:1 mininet>sh ovs-ofctl dump-flows s1
10 再次用vm1中的主机ping vm2中的主机:
VxLAN是一种overlay的网络技术,可扩展局域网。VxLAN学习地址依旧保持的二层协议的特征,节点之间不会周期性交换路由表,遇到不认识的MAC地址则通过组播的方式获取路径,在SDN网络中,则向SDN控制器寻求帮助。本实验中,VxLAN先是依靠控制器实现地址学习,当关闭控制器后,则通过下发流表的方式引导数据包传播。