FlowVisor学习Word下载.docx
《FlowVisor学习Word下载.docx》由会员分享,可在线阅读,更多相关《FlowVisor学习Word下载.docx(41页珍藏版)》请在冰豆网上搜索。
![FlowVisor学习Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/21/eee1dd7d-6f19-4173-9a03-0bae472cb7f1/eee1dd7d-6f19-4173-9a03-0bae472cb7f11.gif)
目录
FlowVisor学习1
1.FlowVisor2
1.1.FlowVisor介绍2
1.1.1.FlowVisor基本概念2
1.1.2.切片2
1.1.3.流规则3
1.1.4.带宽3
1.1.5.拓扑结构3
1.1.6.转发表4
1.2.FlowVisor安装过程4
1.3.FlowVisor基本操作5
1.3.1.切片操作5
1.3.1.流规则操作6
2.Mininet7
2.1.SDN与Mininet概述7
2.2.Mininet的特性7
2.3.常用指令8
3.Opendaylight8
3.1.ODL概念8
3.2.ODL的框架原则8
3.3.框架概述9
4.建立连接10
4.1.FlowVisor部分10
4.2.Mininet部分11
4.3.Opendaylight部分13
4.4.抓包看看tcp连接14
5.基于实验的flowspace细述15
5.1.全路径,单向数据通路15
5.2.全路径,双向数据通路15
5.3.指定路径,单向数据通路16
5.4.指定路径,双向数据通路17
5.5.流规则结论18
1.FlowVisor
1.1.FlowVisor介绍
FlowVisor是建立在OpenFlow之上的网络虚拟化平台,它可以将物理网络分成多个逻辑网络,从而实现开放软件定义网络(SDN)。
它为管理员提供了广泛定义规则来管理网络,而不是通过调整路由器和交换机来管理网络。
FlowVisor安装在商品硬件上,它是一个特殊的OpenFlow控制器,主要是作为OpenFlow交换机网络和其他标准OpenFlow控制器之间的透明代理。
虽然FlowVisor仍被认为处于试验阶段,并且缺乏一些基本功能(例如命令行管理工具),但FlowVisor已经被部署在很多生产环境中,例如从2009年开始应用于斯坦福大学的校园网络。
FlowVisor通过抽象层来分割物理网络,它位于一组交换机和软件定义网络或多个网络之间,管理带宽、CPU利用率和流量表,这类似于管理程序位于服务器硬件和软件之间,以允许多个虚拟操作系统运行。
正如管理程序依赖于标准x86指令来虚拟化服务器一样,FlowVisor使用标准OpenFlow指令集来管理OpenFlow交换机,这些指令设置了低级别规则,比如如何基于数据包表头中的特点来转发数据包。
由于所有这些规则都是通过流量表定义的,因此,无论是从带宽还是CPU使用率来看,网络虚拟化都没有增加很多开销或者几乎没有增加开销,不过另外需要设置和修改流量表规则的单独的带外物理控制器。
1.1.1.FlowVisor基本概念
1.1.2.切片
FlowVisor网络的基本要素是网络切片(Slice),网络切片是由一组文本配置文件来定义的。
文本配置文件包含控制各种网络活动的规则,例如允许、只读和拒绝,其范围包括流量的来源IP地址、端口号或者数据包表头信息。
例如,网络管理员可以将安全的Telnet流量(默认端口992)分配到其自身的切片,将执行团队IP地址的流量分配到另一个切片。
然后他可以创建第三个默认切片来管理所有其他流量,把它当做“只读”切片来监控其他三个切片,以达到诊断目的。
网络管理员可以动态地重新分配和管理这些切片,以确保浏览YouTube的人不会对Telnet应用程序和执行团队带宽造成负面影响。
1.1.3.流规则
其英文名称Flowspace。
表面上理解是流空间,但实际上切片定义了控制器的网络分区,不定义切片的匹配规则。
需要创建的规则叫做FlowSpace。
所以其翻译成流规则更好些。
Flowspace包含下面字段:
字段名
含义
priority
优先级,0-65535
in_port
进入端口
dl_vlan
Vlanid,0xffff
表示匹配非vlan包,否则指定为0-4095表示12位的vlanid
dl_vpcp
Vlan优先级最外层VLAN头的PCP域
dl_src
Ethernet源Mac地址
dl_dst
Ethernet目的Mac地址
dl_type
Ethernet协议类型,
采用0–65535表示
nw_src
源IP地址
nw_dst
目的IP地址
nw_proto
IP协议类型,十进制数0-255
nw_tos
IPTos位,采用0-255表示
tp_src
TCP/UDP源端口
tp_dst
TCP/UDP目的端口
wildcards
匹配规则
actions
切片行为,指的是slice对这个flowspace拥有的权限,DELEGATE=1,READ=2,WRITE=4.actions的值为这3个的组合,所有取值范围为1-7
1.1.4.带宽
每个切片应该具有专门的总可用带宽百分比。
1.1.5.拓扑结构
每个切片对于网络节点(包括物理和虚拟交换机及路由器)应该有自己的“看法”.切片的组成部分应该是不知道切片的:
对于控制器而言,FlowVisor看起来就是普通的交换机;
从OpenFlow交换机的角度来看,FlowVisor就是一个控制器。
1.1.6.转发表
由于转发表往往被限定在物理设备上,网络管理员应确保一个切片不会影响任何特定设备的转发表,迫使它放弃另一切片的规则。
1.2.FlowVisor安装过程
好多前辈都写过相关的文档,我是按照前辈的文档来进行安装的。
所以在这里我也不多说什么就写简要步骤。
●环境搭建
Ø
安装JDK,之前很多前辈说FlowVisor不支持JDK1.6以上的版本。
估计FlowVisor也改进过,亲测JDK1.7可以使用。
安装JDK:
sudoapt-getinstallopenjdk-7-jdk
安装ant,不多说,比较简单,sudoapt–getinstallAnt.
●获取源码
下载flowvisor-1.0-MAINT.zip
gitclonegit:
//
Make操作后
然后你就会发现,成功了。
sudomakeinstall
在输入完User和Group后,记得不要输入密码,不然每次操作都要输入密码,比较麻烦。
启动flowvisor
flowvisor/usr/local/etc/flowvisor/flowvisor-config.xml
1.3.FlowVisor基本操作
1.3.1.切片操作
●创建切片
命令格式:
fvctladd-slice[options]<
slicename>
<
controller-url>
admin-email>
具体命令:
fvctl-p8081add-slices1tcp:
127.0.0.1:
6636fv@
成功显示:
查看切片
查看所有的切片
fvctl-p<
port>
list-slices
fvctl-p8081list-slices
查看具体切片
命令格式:
fvctl-p<
list-slice-info<
具体命令:
fvctl-p8081list-slice-infos1
●显示slice的统计信息
fvctl-p8081list-slice-statss1
●修改切片
8081>
update-slice[option]<
slice-name>
fvctl-p8081update-slice--disable-slices1
关闭slice:
s1
●删除切片
fvctlremove-slice<
fvctlremove-slices1
1.3.1.流规则操作
●添加flowspace
fvctladd-flowspace[options]<
flowspace-name>
dpid>
priority>
match>
slice-perm>
创建flowspace
fvctl-p8081add-flowspacefs1all100dl_dst=78:
45:
c4:
2d:
72:
51s1=5
fvctl-p8181add-flowspacefs1all100dl_src=78:
fvctl-p8181add-flowspacefs2all100dl_dst=78:
29:
fb:
c4s2=5
fvctl-p8181add-flowspacefs2all100dl_src=78:
注:
flowspace的名字可以重名。
更多命令可以查看manfvctl
2.Mininet
2.1.SDN与Mininet概述
SDN全名为(SoftwareDefinedNetwork)即软件定义网络,是现互联网中一种新型的网络创新架构,其核心技术OpenFlow通过网络设备控制面与数据面分离开来,从而实现网络流量的灵活控制,为网络及应用提供了良好的平台。
而Mininet是一个轻量级软件定义网络和测试平台;
它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行想过的内核系统和用户代码,也可简单理解为SDN网络系统中的一种基于进程虚拟化平台,它支持OpenFlow、OpenvSwith等各种协议,Mininet也可以模拟一个完整的网络主机、链接和交换机在同一台计算机上且有助于互动开发、测试和演示,尤其是那些使用OpenFlow和SDN技术;
同时也可将此进程虚拟化的平台下代码迁移到真实的环境中。
2.2.Mininet的特性
∙支持OpenFlow、OpenvSwitch等软定义网路部件
∙支持系统级的还原测试,支持复杂拓扑,自定义拓扑等
∙提供PythonAPI,方便多人协作开发
∙很好的硬件移植性与高扩展性
∙支持数千台主机的网络结构
2.3.常用指令
名称
作用
nodes
查看全部节点
net
查看链路信息
dump
输出各节点的信息
h1ping-c4h2
测试主机之间的连通性
iperf
两个节点之间用指定简单的TCP测试
iperfudp
两个节点之间用指定款单udp进行测试
noecho
运行交互窗口,关闭回应
pingpair
两个主机将互ping
help
列出命令文档,查看命令帮助:
helpcommand
dpctl
在所有叫交换机
exit/quit
退出mininet命令行
hXifconfig
查看当前那主机的ip地址,如:
h1ifconfig
py/sh
执行python表达式或运行外部shell程序
3.Opendaylight
3.1.ODL概念
Opendaylight是一个以模块化、可插拔、灵活的、基于Java的控制器为核心的开源平台。
从北往南,它首先包括供上层应用和业务逻辑使用的北向开放API,有OSGi和REST两类。
上层应用程序利用这些北向API获得网络智能信息、运行算法处理分析以及组合新的网络策略;
其次,它包括控制器平台本身,它是一组可动态组合的模块用于汇集网络信息,比如网络中有哪些元素、其统计信息如何等;
最南边是能够支持多种协议的南向接口,如Openflow1.01.3BGP-LS等,这些南向接口可以调用设备上服务抽象层SAL。
在这里我们用的是ODL中的controller的部分,那controller部分的作用是什么呢,在这里controller为控制器,其控制着交换机的路由转发。
3.2.ODL的框架原则
OpenDaylightController在设计的时候遵循了六个基本的架构原则:
(1)运行时模块化和扩展化(RuntimeModularityandExtensibility):
支持在控制器运行时进行安装、删除和服务的更新。
(2)多协议的南向支持(MultiprotocolSouthbound):
南向支持多种协议。
(3)服务抽象层(ServiceAbstractionLayer):
南向多种协议对上提供统一的北向服务接口。
(4)开放的可扩展北向API(OpenExtensibleNorthboundAPI):
提供可扩展的应API,通过REST或者函数调用方式。
两者提供的功能要一致。
(5)支持多租户、切片(SupportforMultitenancy/Slicing):
允许网络在逻辑上(或物理上)划分成不同的切片或租户。
控制器的部分功能和模块可以管理指定切片。
控制器根据所管理的分片来呈现不同的控制观测面。
(6)一致性聚合(ConsistentClustering):
提供细粒度复制的聚合和确保网络一致性的横向扩展(scale-out)。
3.3.框架概述
上图所示,南向通过plugin的方式来支持多种协议,包括OpenFlow1.0、1.3,BGP-LS等。
这些模块被动态挂载到服务抽象层(SAL),SAL为上层提供服务,将来自上层的调用封装为适合底层网络设备的协议格式。
控制器需要获取底层设备功能、可达性等方面的信息,这些信息被存放在拓扑管理器(TopologyManager)中。
其他的组件,包括ARPhandler、HostTracker、DeviceManager和SwitchManager,则为TopologyManager生成拓扑数据。
控制器为应用(App)提供开放的北向API。
支持OSGi框架和双向的REST接口。
OSGi框架提供给与控制器运行在同一地址空间的应用,而RESTAPI则提供给运行在不同地址空间的应用。
所有的逻辑和算法都运行在应用中。
控制自带了GUI,这个GUI使用了跟应用同样的北向API,这些北向API也可以被其他的应用调用。
4.建立连接
4.1.FlowVisor部分
●启动FlowVisor
在终端中输入命令:
flowvisor/etc/flowvisor/config.json
启动后界面如下:
在这里要注意的是FlowVisor的服务端口是8081.不要错误的认为监听端口是8081,然后连接到这个端口上。
●创建slice
创建slice的命令格式为
fvctladd-slice[options]<
执行fvctl-p8081add-slices1tcp:
192.168.5.64:
6633sono@命令,就可以创建切片。
创建成功如下:
这里面要注意的是tcp条件后面的ip地址是你的控制器的ip地址。
我这里用的是opendaylight,端口就是opendaylight监听的端口。
还有就是一个切片只能对应一个控制器,这算是flowsivor的不足之处吧。
创建完后使用fvctl-p8081list-slices我们来看看创建的slice
或者具体的看看slice里面的信息,使用fvctl-p8081list-slice-infos1,具体显示如下:
●创建规则
在不创建规则的情况下,opendaylight是无法和flowsivor建立连接的。
即使你创建了slice,并且提示是成功的,也无法连接。
不多说具体创建操作fvctl-p8081add-flowspacefs1all100anys1=5,创建完,终端不会显示什么有效信息,但是opendaylight控制器的控制端可以看到以下信息:
证明flowvisor已经连接到控制器中。
但是里面还没有交换机的任何信息。
到这里我们flowvisor的操作部分已经完成。
下面我们来操作mininet部分。
4.2.Mininet部分
●创建虚拟拓扑
创建拓扑可以直接在root下直接使用mn就可以创建默认的拓扑了,但是默认的拓扑也是只是连接到127.0.0.1上。
所以我们要使用以下命令:
sudomn--topo=tree,3--controller=remote,ip=192.168.217.128,port=6644
解释下:
mn后通过--来加参数topo是指的你的拓扑结构,其中的tree,3是表示三层树形结构,--controller=remote表示拓扑网络的控制器控制方式是remote,其中的ip是指flowvisor所在主机的ip,端口就是flowvisor的监听端口,我这里改的是6644。
创建后的效果如下:
●查看flowvisor主机的net
当虚拟网络创建好了后,我们就可以看到flowvisor监听端口,建立的tcp连接。
使用如下命令查看
能看到我们创建了7个交换机,这七个交换机和flowvisor建立的tcp连接。
●查看flowvisor中的datapaths
不多说使用datapaths可以查看连接进来的交换机,我们使用的查看命令是:
fvctl-p8081list-datapaths
4.3.Opendaylight部分
●控制端显示
到这里就创建好了一个网络虚拟化实例,下面看看控制端现实的信息:
这里我们能看到七个虚拟交换机和控制器通过tcp相连。
●Web端显示
这是web端的拓扑结构,当然这些交换机并不是真的存在,是通过mininet虚拟出来的突破结构。
这是交换机的节点信息信息,在这里我们发现我们创建的虚拟交换机是openflow交换机。
其节点信息如下:
4.4.抓包看看tcp连接
5.基于实验的flowspace细述
Flowspace的概念上面已经讲过,FlowSpacedefinedbyacollectionofpacketheadersandassignedto“Slices”。
上述的实验连接中创建flowspace使用的是最近本的命令,具体命令如下:
fvctl-p8081add-flowspacefs1all100anys1=5
其中在链路这个参数上我们定义了all,即使用所用交换机,100为优先级,match匹配项中我们用的是any,即任何主机都可以成为消息的发送者和接受者。
5.1.全路径,单向数据通路
这次我们使用的链路还是all,只给定单向数据通通路。
(1)我们使用如下命令创建流规则:
fvctl-p8081add-flowspacefs1all100nw_src=10.0.0.1,nw_dst=10.0.0.0.2
(2)我们使用如下命令让其生效:
(当发现你写改的规则无法生效时可以使用)
fvctl-p8081update-slice--disable-slices1让slice失效
fvctl-p8081update-slice--enable-slices1让slice生效
(3)让我们查看下数据链路的ping情况
我们会发现所有的都是ping不通的。
5.2.全路径,双向数据通路
这次我们使用的链路还是all,给定双向的数据通路。
fvctl-p8081add-flowspacefs1all100nw_src=10.0.0.1,nw_dst=10.0.0.0.2
fvctl-p8081add-flowspacefs1all100nw_src=10.0.0.2,nw_dst=10.0.0.0.1
我们会发现所有的都还是能ping通的。
5.3.指定路径,单向数据通路
这次我们给定链路,但是只给定单向数据通通路。
fvctl-p8081add-flowspacefs100:
00:
03100nw_src=10.0.0.2,nw_dst=10.0.0.0.1
5.4.指定路径,双向数据通路
这次我们给定链路,但是只给定双向数据通通路。
f