通信人家园
标题: 基于Mininet和Open vSwitch 的网络模拟器 [查看完整版帖子] [打印本页]
时间: 2021-4-8 20:50
作者: navyxiao
标题: 基于Mininet和Open vSwitch 的网络模拟器
1 Mininet基本介绍
Mininet是一个网络模拟器,它可以创建一个由虚拟主机(hosts)、交换机(switches)、控制器(controllers)和链接(links)组成的网络。Mininet主机运行标准的Linux网络软件,其交换机支持OpenFlow接口,从而可以实现高度灵活的自定义路由和软件定义网络(SDN)。
它可以:
l 为开发OpenFlow应用程序提供简单而廉价的网络测试平台
l 允许多个并发开发人员在同一拓扑上独立工作
l 支持系统级回归测试,并且是可重复和易于封装的
l 支持复杂的拓扑测试,而不需要连接真实的物理网络
l 提供可感知拓扑和面向OpenFlow的命令行工具,可用于开发调试或者运行网络级别的测试
l 支持任意自定义拓扑,并包含一组基本的参数化拓扑
l 提供了简单而扩展性强的Python API用于创建网络
Mininet提供了一种简单的方法来验证网络的系统行为和系统性能,并进行各种拓扑的组网实验。Mininet网络可以运行包括标准Unix / Linux网络应用程序以及真实的Linux内核和网络协议栈在内的各种实际代码。因为上述特性,我们在Mininet上为OpenFlow控制器、交换机或主机开发和测试的代码,可以轻松移植到真实的硬件系统环境中。只需进行最小的更改,就可以进行真实的测试、性能评估和部署。
Mininet使用基于进程的虚拟化来在单个OS内核上运行最多4096个主机和交换机实例。 从2.2.26版开始,Linux支持网络名称空间(network namespaces),这是一种轻量级虚拟化功能,可为单独的进程提供单独的网络接口,路由表和ARP表。 Mininet可以创建内核或用户空间的OpenFlow交换机,用于控制交换机的控制器以及用于在模拟网络上进行通信的主机。 虽然Mininet当前依赖于Linux内核,但将来它可能支持具有基于进程的虚拟化的其他操作系统,例如Solaris容器或FreeBSD jail。Mininet的代码几乎全部是Python。
相比较其他硬件测试平台和模拟器,Mininet有如下好处:
l 启动运行速度更快:几秒钟而不是几分钟
l 更大的网络规模:同时运行几百个主机和交换机而不是几个
l 提供更多的带宽:在一般的硬件条件下可以支持总共2Gbps的带宽
l 易于安装:可以安装在基于VMware或者VirtualBox的虚拟机上
l 不需要昂贵的硬件,随时可用
l 快速的重新配置和重新启动
l 可以运行真实的代码。包括应用程序、操作系统内核、控制平面代码(包括控制器、交换机的代码)
l 易于连接外部网络
2 基于Mininet的网络仿真
2.1 快速构建网络拓扑
真实的网络拓扑环境非常复杂,变化繁多。基于物理硬件设备构建实验环境往往代价很大。既要考虑硬件成本,还要考虑各种场地限制、设备间的连接等。使用Mininet提供的命令行或者Python接口,用户可以非常方便的构建自定义网络。比如我们想构建一个树形网络拓扑,深度为2,扇出为8,(也就是说,使用9台交换机连接64个主机),交换机用的是Open vSwitch(后面会有章节专门介绍),使用基于OpenFlow的控制器对其进行控制,建立网络后使用pingall 命令对网络中各节点间的连通性进行测试,那么我们可以使用下面一条命令来建立网络:
sudo mn --switch ovs --controller ref--topo tree,depth=2,fanout=8 --test pingall
整个网络的构建非常简单,并且耗时非常少,有文章介绍,这个网络拓扑在笔记本电脑上只需要45秒就可以构建完成。除了使用参数化的命令来定制网络之外,还可以使用Python提供的API接口来更加灵活的自定义网络拓扑。
2.2 大规模组网
通过进程虚拟化,Mininet可以在单核CPU上模拟最多4096个节点,每个节点都有自己的网络命名空间(独立的网络接口和转发表),因此我们可以在Mininet上模拟出在实验室中无法做到的大规模组网场景。比如我们需要测试SDN控制器的极限性能,以及验证在大规模组网环境下控制器的性能,使用Mininet可以实现这个目标。因为Mininet使用了Open vSwitch(一种在数据中心普遍采用的虚拟交换机),其流量转发都是真实的(相当于CPU的软转发----运行于内核态的datapath程序就是一个按照流表转发的OF交换机),再结合Mininet提供的链路参数设置和各种流量验证工具,其模拟出来的结果具有非常高的可信度。
2.3 链路带宽和状态
对于有线无线混合组网的机动网络场景,我们还需要定义链路的带宽和状态来模拟真实的网络,对此Mininet能够非常好的满足我们的使用需求。比如,我们可以使用如下命令对link进行配置,使其带宽为10Mbps,延时为10ms:
$ sudo mn --link tc,bw=10,delay=10ms
我们可以通过命令设置Mininet的link参数(带宽:bw,时延:delay,丢包率:loss)来模拟真实的信道环境,从而验证各种应用程序或者SDN网络控制器在真实网络环境下的功能和性能表现。
2.4 连接外部网络
Mininet是将真实的或者虚拟的网络接口映射成交换机的虚端口(vport),从而实现流量在各个虚端口之间的转发。当把主机的物理端口(网卡)映射成交换机的端口时,这个端口就具备了与外部真实网络交互的能力。这对我们验证虚拟交换机与外部网管、控制器之间的交互非常有帮助。
如上图所示,Mininet网络与外部的物理网络通过物理网口互连形成混合组网,外部控制器可以通过OpenFlow接口管理真实的或者虚拟的交换机设备,从而最大程度的还原了网络,为各种验证场景和模拟需求提供了可行性。
2.5 代码一致性
通常都会希望运行于模拟器上的代码与运行于物理设备上的代码能尽量的保持一致,避免开发和维护两套差异过大的代码。Mininet则提供了这种可能性。因为Mininet运行在虚拟机上,可以最大化的排除因为平台的差异导致代码不兼容所造成的影响。比如运行在Linux开发板上的应用程序,只需要重新使用主机的编译链工具进行编译,则可以运行在Mininet上。对于支持标准的OpenFlow的设备程序,可以做到与Mininet的无缝对接;对于不支持OpenFlow的设备(因为OpenFlow并不适用于机动网络,一般厂家都会采用轻量化的南向接口),则可以将自己的南向接口先适配成OpenFlow接口,再与OVS进行对接交互。
2.6 定制报文转发
在构建Mininet网络时所指定的底层交换机(Open vSwitch)本身就是一个在数据中心和或者云容器广泛使用的虚拟OpenFlow交换机,通过OpenFlow接口对其配置好流表后,OVS的转发行为与物理交换机的行为是完全一致的。因此,与一些只能模拟交换机基本功能的模拟器不同,基于Mininet进行二次开发的虚拟网络设备,是可以验证报文的转发路径和预期结果,这对产品开发的自动化验证回归是非常有帮助的,可以实现完全的闭环回归测试。
3 OpenvSwitch介绍
3.1 OVS简介
在过去,数据中心的服务器是直接连在硬件交换机上,后来VMware实现了服务器虚拟化技术,使虚拟服务器(VMs)能够连接在虚拟交换机上,借助这个虚拟交换机,可以为服务器上运行的VMs或容器提供逻辑的虚拟的以太网接口,这些逻辑接口都连接到虚拟交换机上,有三种比较流行的虚拟交换机:
VMware virtual switch,Cisco Nexus 1000V,和Open vSwitch
Open vSwitch(OVS)是运行在虚拟化平台上的虚拟交换机,其支持OpenFlow协议,也支持gre/vxlan/IPsec等隧道技术。
3.2 OVS架构
Open vSwitch有三个比较核心的模块:
Ø ovs-vswitchd:一个实现交换机的守护进程。
Ø ovsdb-server:一个轻量级的数据库服务器,用于ovs-vswitchd查询以获取其配置。
Ø openvswitch.ko:一个配套的基于流来实现交换的Linux内核模块(Datapath)。
为了方便配置和管理,提供如下工具:
Ø ovs-dpctl:用来配置交换机内核模块
Ø ovs-vsctl:用于查询和更新ovs-vswitchd的配置信息,操作对象为ovsdb-server。更新配置时,命令会等待配置在ovs-vswitchd生效后才返回。
Ø ovs-appctl:向ovs-vswitchd发送命令。
Ø ovs-ofctl: 用来配置交换机的flow相关。
3.3 OVS特性清单
3.4 支持MPLS
在2.4版本中,Open vSwitch能够完整的支持MPLS功能,包括匹配、压栈、弹出至多三层MPLS标签。而且MPLS转发过程发生在操作系统内核,这大大提升了转发性能。这对于使用MPLS标签作为转发层面技术的厂家来说,使用Mininet+Open vSwitch方案完全可以在管理/控制层面、转发层面模拟他们的设备。
4 软件架构
4.1 基本架构
用户APP(包括各种L2、L3协议、路由管理模块、控制器程序等),与OVS运行于同一个进程,由Mininet进行管理和维护。APP与OVS之间存在报文收发接口和流表配置接口。OVS通过OpenFlow接收来自于APP流表配置,从而实现对报文的匹配、处理和转发。APP收到OVS上送的报文后,按照报文类型字段进行协议分发,派送给各个协议处理模块。SDN控制器也可以作为APP的一个模块运行于节点进程内,实现多个控制器的分布式部署。Mininet的作用是批量创建和管理大规模的OVS节点,并按照指定的网络拓扑类型进行部署。
4.2 软件模块
Mininet组网控制:Mininet可以通过vsctl接口、PythonAPI调用等方式对网络规模、网络拓扑、链路参数进行设定,创建网络资源,并且启动各个节点进程,以及驻留在节点进程上的各种应用APP和OVS;
Open vSwitch:Mininet在创建和启动网络后,OVS按照流表进行转发;OVS将受到的协议报文通过收发包接口上送给协议模块;
OF Adapter:对于不支持标准OpenFlow的厂家来说,可以通过开发OF适配模块,将私有的南向接口转换成标准的OpenFlow接口。
控制器:控制器通过拓扑发现模块,感知网络拓扑结构;按照业务需求生成端到端的路由,并分配各节点的转发信息;将转发路由通过南向接口下发给OVS。
SNMP等北向接口:模拟器可以通过SNMP、Restful API、CLI等方式进行人机交互,实现拓扑信息、业务信息、路由信息的配置和展现。
4.3 报文收发
OVS可以按照流表配置的动作,捕捉协议报文上送APP;也可以通过修改datapath的收包处理函数:ovs_vport_receive,在vport收到特定类型报文时,上送给APP进行处理。
通信人家园 (https://www.txrjy.com/) |
Powered by C114 |