1.实验目的

本实验中本实验用VxLAN连接两个独立的mininet环境,并通过在mininet环境中设置搭建VxLAN,显示VxLAN的优势。并且在没有控制器的条件下,通过下发流表的方式确保网络的连通性。

2.实验原理

VxLAN控制平面隧道的实现方式主要分为三种:通过数据平面自学习、通过控制协议学习和通过SDN Controller实现。本实验中通过SDN控制器实现两个mininet环境的通信,并且关闭控制器,下发流表引导数据包转发。

3.实验任务

如下图所示,在两台虚拟机中利用mininet创建两个网络,利用VxLAN连通这两个mininet环境。关闭默认的控制器后,通过下发流表确保网络的连通性。本实验要求ovs版本在2.0.1以上。

4.实验步骤

虚拟机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中的主机:

5.实验结论

VxLAN是一种overlay的网络技术,可扩展局域网。VxLAN学习地址依旧保持的二层协议的特征,节点之间不会周期性交换路由表,遇到不认识的MAC地址则通过组播的方式获取路径,在SDN网络中,则向SDN控制器寻求帮助。本实验中,VxLAN先是依靠控制器实现地址学习,当关闭控制器后,则通过下发流表的方式引导数据包传播。