SDN初探–openflow实验记录(ubuntu+mininet+opendaylight)

SDN,虚拟化和云计算是这几年网络层面最火的趋势,虚拟化和SDN都对数据中心提供了完美的解决方案,并基于此掀起一场势在必行的改革。从最初只有”控制和转发分离”这样模糊的认识,到现在承担起SDN这样一个项目,实习时公司也联合盛科和云杉推出基于SDN网络的虚拟化产品,以及诸如未来网络、华为、juniper甚至曾经对SDN不屑一顾的思科在痛失亚马逊10亿的订单后也开始奋起直追。其实很明显,云计算的先驱亚马逊看到谷歌基于SDN的B4网络通过10Gbit/s网络连接分布于全球的12个数据中心,在部署了周密的流量工程和优先级调度后,将链路使用率从平均的30%-40%提升至接近100%,在当时市场上并没有openflow交换机的情况下,在openflow和SDN刚从斯坦福的实验室走出来的情况下,谷歌能取得如此成绩确实让人赞叹,也让亚马逊下定决心自己自己做网络,让思科纠结许久了的SDN终于得以临盆。

其实不难理解思科的行为。SDN做不做,如果做那无疑等于砸自己的脚,因为SDN提出的概念即是控制和转发解耦,通过一台controller控制多台openflow switch,既可以构建虚拟化的网络,而在南向接口有大名鼎鼎的openflow协议,协议实现标准化,底层又只做转发,这样思科靠什么来竞争,靠什么增加用户粘度?比硬件,思科无胜算。所以思科不想做,做了等于革传统网络基础设施厂商的名。

和思科不同的是,作为竞争对手的juniper就积极多了,大手笔以1.76亿美元的价格收购成立仅两天的SDN创业公司Contrail Systems,实际上除此之外,SDN的创业公司都宿命不凡:

VMware今年7月以12.6亿美元的价格收购了SDN市场的领先者Nicira,从而使这一技术备受关注。自那时以来,专注于SDN技术的创业公司成为了科技行业热点。今年10月,Nicira最大的竞争对手Big Swith获得了一轮2500万美元的融资。几天前,另一家SDN技术公司Plexxi也启动运营。该公司此前获得了两轮共4800万美元投资。今年8月,SDN创业公司Plumgrid融资1070万美元。

能说的还有很多,关于SDN可以写本书了都。记得我研究那会儿市面上也就赵慧玲的一本介绍SDN的书,这会儿已经多很多了,感觉的童鞋可以自行研究。网络虚拟化和可编程化都是非常酷炫的概念。

先来安装mininet

 

mininet,这是斯坦福大学开发的虚拟化平台可以测试SDN,支持openflow,open vSwitch等各种协议,mininet官网上提供了集成在ubuntu中的vmware镜像:http://mininet.org/.默认用户名和密码为mininet.提供python API,支持自定义拓扑.

不过这里准备用源码编译安装。ubuntu下也可以直接apt-get install mininet,不过实验之后这样在某些情况下会出现问题,所以还是决定自己安装。

我的环境是Ubuntu 14.04  x64

apt-get update

apt-get install git

下载mininet源码:

git clone git://github.com/mininet/mininet

安装脚本:

mininet/util/install.sh [options]

后面的参数有:

 

-a: install everything that is included in the Mininet VM, including dependencies like Open vSwitch as well the additions like the OpenFlow wireshark dissector and POX. By default these tools will be built in directories created in your home directory.

-nfv: install Mininet, the OpenFlow reference switch, and Open vSwitch

-s mydir: use this option before other options to place source/build trees in a specified directory rather than in your home directory.

 

 

我这里直接 ./install.sh -a 安装所有组件

安装的过程中,出现错误:

    Cloning into 'openflow'... fatal:
    read error: Connection reset by peer

或者某些链接错误,之后在安装就一路OK

 

1.   sudo mn 可以创建基本拓扑:

2.    CRT上sudo mn –mac -x

创建基本拓扑,并为每个节点启用xterm窗口

 

3.   基本命令:

 

nodes 显示节点信息
net 链路信息
dump 节点ip,PID等

 

4.    各节点单独操作:
s1 ifconfig -a

h2 ping -c 3 h1

pingall

h1 route/arp

测试:sudo mn --test pingpair/iperf

 

5.    创建拓扑

创建三台主机的拓扑: sudo mn –topo single,3

 

创建线性拓扑:  sudo mn –topo linear,4

 

6.     查看flow table

 

 

 

dpctl是一个调试命令,switch上开放了监听端口6634,可以显示flow stateflow counters

“dpctl is a utility that comes with the OpenFlow reference distribution and enables visibility and control over a single switch’s flow table. It is especially useful for debugging, by viewing flow state and flow counters. Most OpenFlow switches can start up with a passive listening port (in your current setup this is 6634), from which you can poll the switch, without having to add debugging code to the controller.”

 

可以直接在mininet下

s1 dpctl dump-flows tcp:127.0.0.1:6634

这条命令来查看流表,也可以在s1节点上  dpctl dump-flows tcp:127.0.0.1:6634

可以看到的流表类似如下:

cookie=0, duration_sec=31s, duration_nsec=699000000s, table_id=0, priority=0, n_packets=2, n_bytes=84, idle_timeout=60,hard_timeout=0,arp,in_port=2,dl_vlan=0xffff,dl_src=00:00:00:00:00:02,dl_dst=00:00:00:00:00:01,nw_src=10.0.0.2,nw_dst=10.0.0.1,nw_proto=1,actions=output:1

 

     接下来安装opendaylight

 

安装 Openjdk-7

 

sudo apt-get -y install openjdk-7-jdk

 

添加 JDK 环境变量:

cisco@ubsolr:~$ sudo vim /etc/profile 末尾添加

 

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH

 

重启ubuntu

 

直接 opendaylight下添加权限 chmod +x run.sh

运行 ./run.sh

 

启动完成后,回车出现osgi>

 

打开浏览器输入 localhost:8080,回车即可打开opendaylight的登陆界面,默认用户名和密码都是admin/admin

 

联动mininet和opendaylight

mininet指定opendaylight作为控制器:

 

sudo mn –mac -x –topo single,3 –controller=remote,ip=127.0.0.1

 

进入mininet后,开启wireshark,抓取loopback口的流量,可以看到OFP的流量,可以看到status request/replay

 

在mininet上输入

s1 dptcl dump-flows tcp:127.0.0.1:6634

查看流表,此时的输出应为:

只有stats_reply,暂时没有流表

接下来让h1 ping h2, 促使控制器产生流表

h1上 ping 10.0.0.2 -c 3

再次dptcl 可以看见:

 

交换机上已经产生了两条流表

wireshark 上可以抓到这条修改流表的报文,对应openflow协议的规定可以看到各个字段

mininet上执行pingall,促使LLDP发现拓扑:

 

 

接下来进入浏览器,打开localhost:8080,登陆后就已经可以看到拓扑了:

 

你可能感兴趣的:(SDN初探–openflow实验记录(ubuntu+mininet+opendaylight))