第1小题:简单网络
一、 实验目的
搭建如图1.1所示的简单网络,通过流表操作来实现两台不同主机间的 ping 通与否。
图1.1:简单网络拓扑
二、 实验环境搭建
(一)设计思路
如图1.1所示,简单网络由一台Controller,两台switch以及两台host组成。我们通过Controller添加流表让两台host无法ping通。
(二)设备以及平台
我们选择在物理机安装VMware Workstation 10。下载SDN Hub(sdnhub.org)构建的all-in-one tutorial VM(以下称SDN虚拟机)并导入到VMware。这是一个预装了很多SDN相关的软件和工具的64位的Ubuntu 12.10虚拟机映像。内置软件和工具如下:
· SDN控制器:Opendaylight,Ryu,Floodlight,Pox和Trema
· 示例代码:hub,2层学习型交换机和其它应用
· Open vSwitch 1.11 :支持Openflow 1.0,实验性的支持 Openflow 1.2 和 1.3
· Mininet:创建和运行示例拓扑
· Eclipse 和 Maven
· Wireshark:协议数据包分析
我们使用的控制器为floodlight。
三、 实验过程及结果
(一)初始环境
首次进入SDN虚拟机,打开终端,输入以下命令,对floodlight进行编译及运行:
>>cd floodlight
>>ant
>>java -jar target/floodlight.jar
floodlight开始监听交换机和6633端口(如图1.2和1.3所示)。
图1.2:编译并运行floodlight
图1.3:已运行的floodlight
(二)mininet创建拓扑
在终端中输入以下命令创建拓扑:
>>sudo mn --custom /home/ubuntu/mininet/custom/topo-2sw-2host.py --topo mytopo --switch ovsk --controller=remote,ip=192.168.181.142,port=6633
topo-2sw-2host.py文件是该系统中已有的文件,可直接使用,且拓扑与题目要求相同。文件内容如下:
"""Custom topology example
Two directly connected switches plus a host for each switch:
host --- switch --- switch --- host
Adding the ‘topos‘ dict with a key/value pair to generate our newly defined
topology enables one to pass in ‘--topo=mytopo‘ from the command line.
"""
from mininet.topo import Topo
class MyTopo( Topo ):
"Simple topology example."
def __init__( self ):
"Create custom topo."
# Initialize topology
Topo.__init__( self )
# Add hosts and switches
leftHost = self.addHost( ‘h1‘ )
rightHost = self.addHost( ‘h2‘ )
leftSwitch = self.addSwitch( ‘s3‘ )
rightSwitch = self.addSwitch( ‘s4‘ )
# Add links
self.addLink( leftHost, leftSwitch )
self.addLink( leftSwitch, rightSwitch )
self.addLink( rightSwitch, rightHost )
topos = { ‘mytopo‘: ( lambda: MyTopo() ) }
结果如图1.4所示,此拓扑由两台主机h1,h2和两台交换机s3,s4组成,拓扑图如图1.1所示。
图1.4:mininet建立拓扑
打开浏览器输入 http://localhost:8080/ui/index.html,进入图形化的 mininet 可视界面(如图1.5和1.6所示)。
图1.5:Mininet 图形化界面
图1.6:Mininet 图形化拓扑结构界面
(三)测试主机是否ping通
在mininet中输入以下命令,测试h1与h2能否ping通(如图1.7所示):
>>pingall
图1.7:测试h1和h2的连接
此时丢包率为 0%,即两台主机h1与h2可以ping通。
(四)添加流表使主机间无法ping通
在终端中输入以下命令:
>>ovs-ofctl dump-flows s3
>>ovs-ofctl add-flow s3 priority=1,in_port=2,actions=drop
如图1.8和图1.9所示。图1.8中显示的流表为Controller添加的临时流表,5s后会自动失效。
图1.8:查看交换机s3的流表
图1.9:添加流表使h1,h2不能连通
图1.10:添加的流表信息
由图1.10显示,在添加了该流表后,输入pingall命令,丢包率达100%,主机h1和h2无法ping通,实现题目要求。